Boucle vb

Fermé
juliet - 23 juin 2010 à 10:21
GégéLAMBERT Messages postés 620 Date d'inscription lundi 21 juin 2010 Statut Membre Dernière intervention 24 octobre 2014 - 23 juin 2010 à 11:40
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

6 réponses

GégéLAMBERT Messages postés 620 Date d'inscription lundi 21 juin 2010 Statut Membre Dernière intervention 24 octobre 2014 10
23 juin 2010 à 10:33
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
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 620 Date d'inscription lundi 21 juin 2010 Statut Membre Dernière intervention 24 octobre 2014 10
23 juin 2010 à 11:00
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
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 620 Date d'inscription lundi 21 juin 2010 Statut Membre Dernière intervention 24 octobre 2014 10
23 juin 2010 à 11:22
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
merci beaucoup pour ces explications précises

C'est bon ca marche comme je veux
0
GégéLAMBERT Messages postés 620 Date d'inscription lundi 21 juin 2010 Statut Membre Dernière intervention 24 octobre 2014 10
23 juin 2010 à 11:40
Impec !

Bonne journée

Gégé
0