Boucle sur valeur non vide
Bonjour à tous,
J'ai créé un tableau scores de 6 "cellules" et 6 variables value1....value6
Je cherche à donner à chaque variables la valeur de la cellule non vide :value1-->valeur de la 1ere cellule non vide,value2-->valeur de la 2eme cellule non vide, ainsi de suite, pour l'instant j'ai réussi à détecté la 1ere cellule non vide mais a l'envers et pour les autres ....je me suis perdue.
Sub test()
Dim Scores(5) As String
Dim value1, value2, value3, value4, value5, value6 As String
Scores(0) = ""
Scores(1) = "B"
Scores(2) = ""
Scores(3) = "D"
Scores(4) = ""
Scores(5) = "F"
For i = 0 To 5
If Scores(i) <> "" Then value1 = Scores(i)
Next i
MsgBox (value1)
MsgBox (value2)
End Sub
en gros je sais pas trop quoi faire, une idée???
merci de votre aide
Greg
Bonjour greg954,
ATTENTION : ne PAS utiliser le nom "value" pour une variable
ou un autre "objet" car c'est un mot-clé réservé de VBA !!!
C'est pourquoi j'ai utilisé valX() à la place.
Je te propose ce code VBA :
Option Explicit
Sub test()
Dim Score(5) As String, valX(5) As String, k As Byte, i As Byte
Score(0) = ""
Score(1) = "B"
Score(2) = ""
Score(3) = "D"
Score(4) = ""
Score(5) = "F"
For i = 0 To 5
If Score(i) <> "" Then valX(k) = Score(i): k = k + 1
Next i
For i = 0 To 5
If valX(i) <> "" Then MsgBox valX(i)
Next i
End Sub
Note : j'ai mis la 2ème boucle For pour laisser comme tu avais fait,
mais il va de soi qu'elles peuvent être unies en une seule boucle :
For i = 0 To 5
If Score(i) <> "" Then valX(k) = Score(i): MsgBox valX(k): k = k + 1
Next i
Merci de me dire si ça te convient.
Cordialement
Merci pour t'on aide,
Dans la msgbox çà fonctionne très bien,mais j'aimerai bien si on peut que valx(1) = B,valx(2)=D,valx(3)=F,,valx(4)=""...
Dans le code présent si je test valx(1), cela me retourne la valeur D??.Le but est d’utiliser les valeurs des valx pour "travailler" avec.
Greg
ps: j’avais pas fait attention pour value, merci
Tu as utilisé ton tableau Scores() à partir de l'indice 0 puisque tu avais mis : Scores(0) = "" ;
mis à part que j'ai renommé ce tableau en Score(), j'ai utilisé le tableau valX() à partir de 0
aussi, c'est pourquoi : valX(0) = "B" ; valX(1) = "D" ; valX(2) = "F"
Si tu préfères utiliser valX() à partir de l'indice 1, alors dans le Dim, mets : valX(6)
et mets k = k + 1 avant l'affectation :
If Score(i) <> "" Then k = k + 1: valX(k) = Score(i): MsgBox valX(k)
(ceci pour la boucle unique)
Pour 2 boucles : valX(6) aussi, et voici le code complet :
Option Explicit
Sub test()
Dim Score(5) As String, valX(6) As String, k As Byte, i As Byte
Score(0) = ""
Score(1) = "B"
Score(2) = ""
Score(3) = "D"
Score(4) = ""
Score(5) = "F"
For i = 0 To 5
If Score(i) <> "" Then k = k + 1: valX(k) = Score(i)
Next i
For i = 1 To 6
If valX(i) <> "" Then MsgBox valX(i)
Next i
End Sub
Si ça te va, merci de passer le sujet en résolu.
Merci à toi, ça fonctionne super bien, exactement ce que je voulais faire.
bonne journée
Greg
encore meerci