Peut-on rendre une variable…VARIABLE ? ?

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 ne sais pas comment résoudre le cas suivant :
Soit un tableau qui s’étend de A1 à B100.
La 1ère colonne contient 3 types de valeur (disons 'toto', 'tata' ou 'tutu' disposés aléatoirement)
Je souhaite récupérer dans une « variable variable » (maVar1 puis maVar2…etc…jusqu’à maVari…la valeur qui se trouve en colonne B, disons à côté du mot 'tutu'.

J’ai donc déclaré maVar puis écrit le code suivant :
Set maZone = ActiveSheet.Range(« A1 :A100 »)
i=1
For Each c In maZone
If c.value = « tutu »Then
maVar(i) = c.Offset(0, 1)
i = i + 1
End If
Next c

Cette macro ne plante pas…mais lorsque je souhaite utiliser maVar(i) tout est à vide !

Quelqu’un aurait-t-il un conseil à me donner ?

Merci d’avance

BenHarber
 
Pascal,
Merci pour la rapidité de ta réponse : je vais essayer de me documenter sur les commandes Redim et Preserve dont j'ignore actuellement l'emploi.
J'ai essayé ta solution en introduisant ''MsgBox Mavar(i)'' pour voir ce que la variable prenait comme valeur : chose que je ne m'explique pas, c'est que le message m'est bien retourné lorsque je suis à l'intérieur de la boucle...mais dès que j'en sors, la macro plante (''erreur d'exécution 9 - Indice en dehors de la plage'')...

Y a-t-il une solution pour utiliser les variables après le passage de cette boucle ?

Merci d'avance pour ta réponse et/ou conseil.

BenHarber
 
Re

essaies comme ceci

Dim Mavar() as string

Set maZone = ActiveSheet.Range(« A1 :A100 »)
i=1
For Each c In maZone
If c.value = « tutu »Then
redim preserve mavar(1 to i)
maVar(i) = c.Offset(0, 1)
i = i + 1
End If
Next c

for i = 1 to ubound(mavar)
msgbox mavar(i)
next

Sinon cela doit être normal car comme tu rajoutes 1 à ta valuer de i enf in de boucle ton var(i) n'existe pas

il faudrait faire ainsi sinon

Dim Mavar() as string

Set maZone = ActiveSheet.Range(« A1 :A100 »)
i=0
For Each c In maZone
If c.value = « tutu »Then
i = i + 1
redim preserve mavar(1 to i)
maVar(i) = c.Offset(0, 1)
End If
Next c
 
Bonjour benHarber, pascal 🙂

Ma contribution au fil.

Si tu veux retrourner tes valeurs de toto, tata, tutu dans un tableau en une seule boucle, tu peux tester ceci :

Sub Bouton7_QuandClic()
Dim c As Range
Dim maVar() As String
Dim x As Byte, ligne As Byte
Dim i As Byte, j As Byte, colonne As Byte

ReDim maVar(1 To 3, 1 To 1)
x = 2

'complete les entetes du tablo
maVar(1, 1) = 'tutu'
maVar(2, 1) = 'tata'
maVar(3, 1) = 'toto'

'boucle sur chaque ligne de la colonne A
For Each c In Range('a1:a' & Range('a65536').End(xlUp).Row)
        x = x + 1
        'affecte la variable colonne suivant le nom
        Select Case c
                Case 'tutu': colonne = 1
                Case 'tata': colonne = 2
                Case 'toto': colonne = 3
                Case Else: colonne = 0
        End Select
       
        'remplit le tableau dynamique
&nbsp; &nbsp; &nbsp; &nbsp; If colonne <> 0 Then 'si colonne=0 c'est que c n'est ni tata, tutu ou toto
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ReDim Preserve maVar(1 To 3, 1 To x)
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; maVar(colonne, x) = c.Offset(0, 1)
&nbsp; &nbsp; &nbsp; &nbsp; End If
Next c

'renvoi les données
For i = 1 To UBound(maVar) 'les lignes
&nbsp; &nbsp; &nbsp; &nbsp; ligne = 1
&nbsp; &nbsp; &nbsp; &nbsp; For j = 1 To UBound(maVar, 2) 'les colonnes
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; If maVar(i, j) <> '' Then 'exclut les lignes vides
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Cells(ligne, i + 4) = maVar(i, j) 'renvoi à partir de la colonne E
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ligne = ligne + 1
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; End If
&nbsp; &nbsp; &nbsp; &nbsp; Next j
Next i
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
End Sub


exemple en pièce jointe.

salut
[file name=Classeur3_20051121142750.zip size=8048]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Classeur3_20051121142750.zip[/file]
 

Pièces jointes

Merci RV.
Avec ça, je vais essayer d'aborder la technique des 'tableaux' que j'ai souvent eu l'occasion de lire mais jamais de faire...
PS : d'ailleurs, si vous connaissez une bonne littérature sur le sujet (ouvrages, sites), je suis preneur !

@+

BenHarber
 
Salut BenHarber, Pascal, Hervé,

Ben, je n'ai pas bien compris ce que tu veux faire de tes données, mais ma petite contrib toute simpliste mais fonctionnelle:

Sub Test2()
Dim myArray As Variant
Dim i As Integer
Feuil1.Range('A1').CurrentRegion.Select
myArray = Selection.Value
For i = 1 To UBound(myArray, 1)
&nbsp; &nbsp; &nbsp; &nbsp;
If myArray(i, 1) = 'tutu' Then Debug.Print myArray(i, 2)
Next
End Sub

2 avantages à cette façon de procéder:
- C'est beaucoup, beaucoup, mais alors beaucoup plus rapide si ton tableau est grand (ici, s'il n'y a que 3 cas, cela peut se discuter..quoique 🙂).
- Si ton range est variable en largeur il faut juste y rajouter le nombre de colonne pour tester correctement le tableau.
Le tableau peut, évidement être Public pour être accédé en dehors de la procédure. Attention dans ces cas là à son utilisation (cf Preserve, ReDim)

Bon courage
 
Ben alors là...
Je n'ai aucun avis sur le sujet étant novice en matière de tableau...
Mais vous m'avez donné là matière à travailler pour 2 mois au moins !!
Je regarderai tout ça après avoir gobé et digéré les 'Array', 'Redim' et autres 'Ubound'...

@+

BenHarber
 
Salut Hervé, BenHarber,

En fait...euh...aucune :lol: :lol: :lol:
Nan, en fait il y a une raison, c'est que j'ai extrait cela d'un vieux bout de code et que j'ai pas recodé cette ligne.
On peux effectivement l'écrire comme cela:
myArray = Feuil1.Range('A1').CurrentRegion.Value
F

Merci de la remarque 😉

Ben, désolé pour le mal de crâne :whistle: :whistle: :lol:
 
- 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

N
Réponses
17
Affichages
3 K
ninajams
N
K
Réponses
6
Affichages
2 K
K
S
Réponses
1
Affichages
1 K
schoum5
S
N
Réponses
5
Affichages
2 K
Nicko29
N
V
Réponses
5
Affichages
741
J
Réponses
15
Affichages
20 K
opopop
O
M
Réponses
5
Affichages
2 K
mauricette007
M
Réponses
5
Affichages
4 K
Compte Supprimé 979
C
K
Réponses
2
Affichages
2 K
kevenpom
K
Retour