Microsoft 365 Initialisation d'une variable tableau à partir d'une plage de cellules

  • Initiateur de la discussion Initiateur de la discussion BenHarber
  • 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 !

BenHarber

XLDnaute Occasionnel
Bonjour le Forum,
Je crois avoir déjà lu (mais sur quel site ? 🙄) que l'initialisation d'une variable tableau avec les commandes suivantes...
Dim DataRange As Variant
DataRange = Range("maPlage").Value
...ne pouvait pas se faire avec une plage de cellules discontinues : Vous confirmez ?

Ci-joint un petit exemple avec 2 tests :
1) une plage de cellules continues nommée "CellsContinues" : pas de pb pour passer en revue l'intégralité des valeurs de ma variable-tableau,
2) une plage de cellules discontinues nommée "CellsDiscontinues" : ma variable-tableau n'a été initialisée que sur le 1er groupe de cellules continues de ma plage discontinue.

Dans le second cas, avez-vous une suggestion d'initialisation SIMPLE pour CellsDiscontinues ?

Merci d'avance pour vos suggestions et idées qui sont toujours pour moi source d'inspiration !
 

Pièces jointes

Bonjour @job75 ,
Merci pour ta proposition.
Mais je n'arrive pas à comprendre pourquoi je redimensionne au départ le tableau VBA d'une ligne supplémentaire pour boucler ensuite sur une ligne en moins ? Bon, vous me direz : ce n'est pas la première fois que qqch m'échappe...😩
1742987278559.png
 
pas à comprendre pourquoi je redimensionne au départ le tableau VBA d'une ligne supplémentaire pour boucler ensuite sur une ligne en moins ?
C'est une astuce pour ne pas se retrouver dans le cas d'une plage avec une unique cellule qui entrainerait que tablo n'est pas un tableau mais une simple variable.
On contraint donc tablo à un minimum de deux éléments et dans la boucle on saute l'élément "rajouté".

En fait on peut utiliser deux "philosophies"
  1. constater que tablo n'est pas un tableau (array) et agir en conséquence (agir à postériori) - proposition de ma pomme
  2. ou faire en sorte que tablo soit toujours un tableau et changer un indice de boucle (prévenir plutôt que guérir) - proposition de @job75
 
Dernière édition:
Oui avec la philosophie 1 on peut faire aussi comme ceci :
VB:
Sub testZoneContinue()
Set a = Range("CellsContinues")
tablo = a 'tableau, plus rapide
If Not IsArray(tablo) Then ReDim tablo(1 To 1, 1 To 1): tablo(1, 1) = a
For i = 1 To UBound(tablo, 1)
    For j = 1 To UBound(tablo, 2)
        MsgBox tablo(i, j)
Next j, i
End Sub

Sub testZoneDiscontinue()
For Each a In Range("CellsDisContinues").Areas
    tablo = a 'tableau, plus rapide
    If Not IsArray(tablo) Then ReDim tablo(1 To 1, 1 To 1): tablo(1, 1) = a
    For i = 1 To UBound(tablo, 1)
        For j = 1 To UBound(tablo, 2)
            MsgBox tablo(i, j)
Next j, i, a
End Sub
Je préfère la philosophie 2 du post #6.
 

Pièces jointes

- 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

Réponses
2
Affichages
517
Compte Supprimé 979
C
Retour