Boucle vb

juliet -  
GégéLAMBERT Messages postés 616 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

A l'aide ce forum, j'ai réussi a écrire ce programme, cependant ca ne marche pas tout à fait comme je veux, mais je ne comprends pas pourquoi. Voilà je voulais que si C3 est numérique alors on a dans la listbox le contenu de C2, si D3 est numérique alors on a D2 dans la listbox...

Mais ca ne marche pas car dans un cas ou C3 n'est pas numérique et que D3 l'est, alors ca n'écrit pas D2 dans la listbox. Il faut obligatoirement que C3 soit numérique pour que la formule fonctionne. Et ca ne sera pas toujours le cas.

J'espère que vous allez me comprendre...

Private Sub CommandButton1_Click()
I = 3
If ComboBox1.Value = "SIL9" Then
Do While Worksheets("Cu").Cells(3, I) <> ""
If IsNumeric(Worksheets("Cu").Cells(3, I).Value) Then
ListBox1.AddItem Worksheets("Cu").Cells(2, I).Value
End If
I = I + 1
Loop
End If


End Sub

D'avance merci
A voir également:

6 réponses

GégéLAMBERT Messages postés 616 Date d'inscription   Statut Membre Dernière intervention   10
 
Bonjour,

Lorsque ça ne marche pas, c'est que C3 contient une valeur non numérique, ou qu'elle contient rien du tout ?

Gégé
0
juliet
 
Bonjour,

En fait c'est quand la cellule est vide, mais le probléme c'est que je vais avoir plein de cellule vide.

Merci
0
GégéLAMBERT Messages postés 616 Date d'inscription   Statut Membre Dernière intervention   10
 
C'est donc logique que ta boucle s'arrête, puisque ta condition c'est :
Do While Worksheets("Cu").Cells(3, I) <> ""

Avec cette configuration, tu sors de ta boucle dès qu'une cellule vide est rencontrée sur ta ligne 3.

Si tu sais d'avance le nombre de colonnes de ton tableau, et que ce nombre est figé, tu peux remplacer le Do While par une boucle For...Next:

Private Sub CommandButton1_Click()
I = 3
J = 15 '(tu mets ici à la place de 15 le numéro correspondant à la dernière colonne de ton tableau)
If ComboBox1.Value = "SIL9" Then
For It = I to J
If IsNumeric(Worksheets("Cu").Cells(3, It).Value) Then
ListBox1.AddItem Worksheets("Cu").Cells(2, It).Value
End If
Next It
End If


End Sub

Ainsi, ta boucle parcours la ligne 3 de toutes tes colonnes, même si elle rencontre une cellule vide...

Gégé
0
juliet
 
Merci, mais le probléme, c'est que je ne peux pas connaitre le nombre de colonne à l'avance, j'ai justement reflechi pour que se soit fixe mais je ne peux pas.

Est ce que je ne peux pas changer le Isnumeric car en fait je n'ai plus que soit des cellules vides soit du numeric. Sachant que mes cellules vides sont d'une autre couleur que les cellules vides.

Merci beaucoup
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
GégéLAMBERT Messages postés 616 Date d'inscription   Statut Membre Dernière intervention   10
 
Le problème n'est pas le IsNumeric ou non. Le problème est de délimiter ton tableau pour que la boucle ne traite que le nécessaire.

Y a-t-il dans ton tableau une ligne qui contient systématiquement quelque chose, et sur laquelle on pourrait faire le test pour savoir quand arrêter la boucle ?

Sinon, Excel mettant généreusement à ta disposition 256 colonnes, tu boucles direct sur les 256, sachant que ta ListBox ne se remplira que si la valeur en ligne 3 est numérique.

Bien sûr, ce type de méthode est à proscrire dans des procédures complexes, mais sur des boucles simples, ça ne devrait pas trop se voir au niveau du temps d'exécution.

Gégé
0
juliet
 
merci beaucoup pour ces explications précises

C'est bon ca marche comme je veux
0
GégéLAMBERT Messages postés 616 Date d'inscription   Statut Membre Dernière intervention   10
 
Impec !

Bonne journée

Gégé
0