Manipulation de variables tableaux. ReDim Preserve

dionys0s

XLDnaute Impliqué
Bonjour le forum

je sollicite votre aide pour comprendre comment manipuler un tableau.

Voilà l'idée de ma macro.

1-Je parcours chaque ligne et caque colonne d'une plage définie (par un InputBox typé RefEdit).
2-Si la cellule analysée est fusionnée, alors j'aimerais mettre dans une variable tableau ses 4 coordonnées (première ligne, première colonne, dernière ligne, dernière colonne) donc j'ai un vecteur COORDS() as variant que je redim en COORDS(x, 4). Je pense que cette partie est bonne dans la mesure où j'arrive bien à récupérer les coordonnées de ma première cellule analysée par la boucle.
3-Sur la cellule suivante, on rechope les coordonnées et on parcourt les éléments du tableau et si on est toujours dans la cellule fusionnée, alors on ne fait rien, et sinon, on rajoute un élément au tableau (les 4 coordonnées de la nouvelle cellule fusionnée). Donc je dois utiliser un ReDim Preserve COORDS(x, 4) (entretemps, x a pris +1 en valeur), mais ça fait planter ma macro.

Je ne comprends plus rien... si vous voyez ce qui cloche, je suis preneur. Je pensais avoir compris comment manipuler les variables tableaux, mais là je commence à douter...

Code:
    x = 1
ReDim COORDS(x, 4)
For i = PlageMax.Rows(1).Row To PlageMax.Rows(PlageMax.Rows.Count).Row
  For j = PlageMax.Columns(1).Column To PlageMax.Columns(PlageMax.Columns.Count).Column
    If ASh.Cells(i, j).MergeCells Then
      PremLign = ASh.Cells(i, j).MergeArea.Rows(1).Row
      PremCol = ASh.Cells(i, j).MergeArea.Columns(1).Column
      DerLign = ASh.Cells(i, j).MergeArea.Rows(ASh.Cells(i, j).MergeArea.Rows.Count).Row
      DerCol = ASh.Cells(i, j).MergeArea.Columns(ASh.Cells(i, j).MergeArea.Columns.Count).Column
      If i = PlageMax.Rows(1).Row And j = PlageMax.Columns(1).Column Then
        COORDS(x, 1) = PremLign
        COORDS(x, 2) = PremCol
        COORDS(x, 3) = DerLign
        COORDS(x, 4) = DerCol
        x = x + 1
      Else
        ReDim Preserve COORDS(x, 4)    'LA LIGNE PRISE DE TETE
        For n = 1 To UBound(COORDS)
          If COORDS(n, 1) = PremLign And COORDS(n, 2) = PremCol And COORDS(n, 3) = DerLign And COORDS(n, 4) = DerCol Then
                            
          Else
            COORDS(x, 1) = PremLign
            COORDS(x, 2) = PremCol
            COORDS(x, 3) = DerLign
            COORDS(x, 4) = DerCol
            x = x + 1
          End If
        Next n
      End If
    Else
    End If
  Next j
Next i

D'avance merci pour votre aide.
 
Dernière édition:

pierrejean

XLDnaute Barbatruc
Re : Manipulation de variables tableaux. ReDim Preserve

Bonjour dionys0s

La réponse est simple:

Un Redim Preserve ne peut intervenir que sur la seconde dimension d'un tableau
avec F1:
Si vous utilisez le mot clé Preserve, vous ne pouvez redimensionner que la dernière dimension du tableau
Il te faut partir d'un ReDim COORDS(4, x)
 

Discussions similaires

Réponses
7
Affichages
320

Statistiques des forums

Discussions
312 086
Messages
2 085 197
Membres
102 814
dernier inscrit
JLGalley