Boucle vb

juliet -  
GégéLAMBERT Messages postés 537 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

6 réponses

  1. GégéLAMBERT Messages postés 537 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
  2. 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
  3. GégéLAMBERT Messages postés 537 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
  4. 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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. GégéLAMBERT Messages postés 537 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
  7. juliet
     
    merci beaucoup pour ces explications précises

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

      Bonne journée

      Gégé
      0