Lecture variables tableau ligne après ligne plutôt que colonne après colonne.
Bonjour à tous,
Je suis un utilisateur VBA débutant et cela fait cinq jours que je bute sur un problème.
J'utilise des variables tableau interdépendantes.
Ma première variable tableau, tableau(I, 0), récupère des données dans un onglet Excel nommé "Exercice" (tableau(I, 0) = Sheets("Exercice").Range("A" & I + 1) )
Ma deuxième variable tableau, tableau(I, 1), est égal à 1 si tableau(I - 1, 0) est > 7 et si tableau(I - 1, 2) est = 2
Ma troisième variable tableau, tableau(I, 2), est égal à 2 si tableau(I, 0) est > 8
Mon problème, c'est que la deuxième variable ne fonctionne pas puisque VBA construit d'abord mon premier tableau, puis mon deuxième et enfin mon troisième. Comme s'il construisait colonne après colonne.
Au stade de tableau(I, 1), VBA n'a aucune information sur la valeur de tableau(I, 2).
Sur le tableur Excel, je ne rencontre pas ce problème, puisque le tableur construit ligne après ligne. Je peux très bien construire ma cellule B2 en fonction de la cellule C1. Pas dans mon code VBA.
J'espère avoir été clair.
Qu'est-ce que je n'ai pas compris ? Comment faire pour que mes variables tableau se comportent comme dans un tableur Excel ?
Merci de votre aide.
P.S. : merci de ne pas me donner l'astuce de remplacer dans ma deuxième variable tableau(I - 1, 2) par tableau(I-1, 0) est > 8. Vous n'avez compris, ce n'est pas ce que je recherche.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| Sub Exemple()
'Déclarations
Dim tableau()
Dim derniereLigne As Integer
Dim I As Integer
derniereLigne = Sheets("Exercice").Cells(Rows.Count, 1).End(xlUp).Row 'Dernière ligne de la base de données
ReDim tableau(derniereLigne - 1, 2) 'Redimensionnement
For I = 0 To derniereLigne - 1
tableau(I, 0) = Sheets("Exercice").Range("A" & I + 1) 'Enregistrement des valeurs dans le tableau 7, 8, 9 , 8, 7
Next
For I = 1 To derniereLigne - 1
If tableau(I - 1, 0) > 7 And tableau(I - 1, 2) = 2 Then
tableau(I, 1) = 1
End If
Next
For I = 0 To derniereLigne - 1
If tableau(I, 0) > 8 Then
tableau(I, 2) = 2
End If
Next
For I = 0 To derniereLigne - 1
Sheets("Exercice").Range("S" & I + 1) = tableau(I, 0)
Next
For I = 0 To derniereLigne - 1
Sheets("Exercice").Range("T" & I + 1) = tableau(I, 1)
Next
For I = 0 To derniereLigne - 1
Sheets("Exercice").Range("U" & I + 1) = tableau(I, 2)
Next
End Sub |