Boucle avec 2 conditions

Bonjour,

Je cherche ici a afficher dans la Combobox1 de mon Userfrom la liste des réfs à produire, celles-ci se trouvent sur mon planning (Cells(ligne, 12)...)

Sauf que je ne veux pas afficher les vide ("") ou encore les entêtes de tableau ("Ref")

Et (linge,151) j'ai mis un x qui ne bougera pas pour pas que la boucle tourne a l'infini.

mais voila la combobox n'affiche rien ou fait planté excel

Dim ligne As Integer: ligne = 5

While (ThisWorkbook.Worksheets("Production").Cells(ligne, 12).Value <> "x")
If Not (ThisWorkbook.Worksheets("Production").Cells(ligne, 12).Value = "") Or (ThisWorkbook.Worksheets("Production").Cells(ligne, 12).Value = "ref") Then
ComboBox1.AddItem (ThisWorkbook.Worksheets("Production").Cells(ligne, 12).Value)
ligne = ligne + 1
End If
Wend

Merci de votre aide

Bonne journée

Bonjour,

peut-être comme ceci en modifiant les parenthèses du test :

Dim ligne As Integer: ligne = 5

With ThisWorkbook.Worksheets("Production") 'pour plus de lisibilité
While .Cells(ligne, 12).Value <> "x"
    If Not (.Cells(ligne, 12).Value = "" Or .Cells(ligne, 12).Value = "ref") Then
         ComboBox1.AddItem  .Cells(ligne, 12).Value
         ligne = ligne + 1
    End If
Wend
End With

A+

Merci pour le with,je l'utilise pas assez ...

mais sinon malheureusement mon excel ne répond pas et crash encore

Pouvez vous joindre votre classeur ?

Ce sera plus simple pour tenter d' évaluer ce qui fait planter.

A+

J'ai isolé le problème dans un fichier que j'ajoute ci-joint

!!!!! ATTENTION !!!!! La marco ne marche pas. Excel va crash !!!!

Sauvegarder vos fichiers ouvert

Je suis preneur de tout autre code qui répondrai a mon besoin

En espèrent que cela vous aidera à m'aider.

Merci

Bonne journée

Ben ça parait évident une fois qu'on a le nez dessus :

avec While .Cells(ligne, 5).Value <> "x", on teste Cells(ligne, 5)

avec

   If Not (.Cells(ligne, 12).Value = "" Or .Cells(ligne, 12).Value = "ref") Then
         ComboBox1.AddItem  .Cells(ligne, 12).Value
         ligne = ligne + 1
    End If

on incrémente la variable ligne si Cells(ligne, 5) n'est pas vide et n'est pas ="ref".

Donc si Cells(ligne, 5) est vide on n'incrémente pas la variable ligne, on poursuit en exécutant le while

Cells(ligne, 5) est toujours vide donc on n'incrémente pas ligne , on repasse par while etc de manière infinie jusqu'à saturer le système...

La solution : sortir l'incrémentation de la variable ligne du test. Correction (avec le code du classeur) :

Dim ligne As Integer
ligne = 3

With Worksheets("Feuil1") 'pour plus de lisibilité
While .Cells(ligne, 5).Value <> "x"
    If Not (.Cells(ligne, 5).Value = "" Or .Cells(ligne, 5).Value = "ref") Then
         ComboBox1.AddItem .Cells(ligne, 5).Value
   End If
         ligne = ligne + 1
Wend
End With

A+

Effectivement cela fonctionne de remettre

ligne = ligne +1

à la bonne place.

Cependant dans mes 1ers tests moins complets, le VBA buger sur cette ligne en la mettant en jaune

ligne = ligne +1

Je ne sais pas trop pourquoi... (si jamais tu sais le pourquoi en général)

donc ma solution a était de le mettre dans le IF.

Mais je comprends maintenant que, une fois que IF NOT n'est pas valide alors ça tourne en boucle...

Merci pour ton aide et ton explication

Encore une fois j'apprends de mes erreurs grâce a vous

Rechercher des sujets similaires à "boucle conditions"