Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Manipulation de variables tableaux. ReDim Preserve

  • Initiateur de la discussion Initiateur de la discussion dionys0s
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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:
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)
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Microsoft 365 Export données
Réponses
4
Affichages
652
Réponses
0
Affichages
516
Réponses
3
Affichages
584
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…