Besoin d'aide Boucle For conditionnelle

salhi_haithem

XLDnaute Junior
Bonjour à tous et à toutes
je bloque et je trouve pas le syntaxe pour un boucle for

j'aimerai boucler sur la colonne A des codes articles de ma feuil3
Si mon code article existe then exit for
s'il n'existe pas msgbox "Code introuvable" + exit sub

VB:
Dim MonCodeArticle As String

MonCodeArticle = Me.CboCodeArticle.Text

For i = 2 To F3.[A65000].End(xlUp).Row

    If F3.Cells(i, 1) = MonCodeArticle Then
         Exit For
      ElseIf F3.Cells(i, 1) <> MonCodeArticle Then
        Resume Next
    Else
        MsgBox "Aucune gamme détecté", vbCritical + vbOKOnly, ""
        Exit Sub
    endif

next i

'Suite programme


je pense que le problème est au niveau de ces lignes

VB:
    ElseIf F3.Cells(i, 1) <> MonCodeArticle Then
        Resume Next
    Else
        MsgBox "Aucune gamme détecté", vbCritical + vbOKOnly, ""
        Exit Sub
 

eriiic

XLDnaute Barbatruc
Bonjour,

que vient faire Resume Next ici ???
Lire toutes les cellules va etre très lent, d'autant plus que tu ne limites pas au nécessaire.
Et qu'en plus tu le fais 2 fois. S'il n'est pas = il est forcément <> !?!
Tu ferais mieux de regarder déjà les cours pour apprendre la programmation en vba, ça ne s'improvise pas et il te manque le B.A.BA qu'on ne te fournira pas.

Regarde l'aide sur range.find pour faire une recherche directe.
Ou bien nb.si()>0 en vba. Tu saisis la formule qui te retourne le bon résultat dans la feuille, puis tu la revalides en enregistrement de macro pour l'avoir en anglais. Plus qu'à faire un Evaluate(ta_formule) pour avoir la réponse
eric
 

salhi_haithem

XLDnaute Junior
Mème si que j'enlève la deuxième condition ça marche pas

VB:
MonCodeArticle = Me.CboCodeArticle.Text

For i = 2 To F3.[A65000].End(xlUp).Row

    If F3.Cells(i, 1) = MonCodeArticle Then
         Exit For
    Else
        MsgBox "Aucune gamme détecté", vbCritical + vbOKOnly, ""
        Exit Sub
    endif

next i

'Suite programme

car le boucle lorsqu'il teste la 2ème ligne et la trouve différente de code article il sort du programme
j'aimerai qu'il fait le boucle de touts les cellules lorsque qu'il ne trouve pas le code article il sort du programme
 

eriiic

XLDnaute Barbatruc
C'est normal puisque c'est ce que tu lui demandes.
C'est après la boucle qu'il faut tester i, enlève tout ton else
Si i<= F3.[A65000].End(xlUp).Row c'est que tu l'as trouvé.
Mais j'insiste, regarde range.find qui sera 100 ou 1000 fois plus rapide.

PS : j'avaiss mal lu tout à l'heure, tu limites bien à la plage nécessaire.
 

salhi_haithem

XLDnaute Junior
merci pour ta réponse et pour ton aide ça marche

VB:
Dim MonCodeArticle As String

MonCodeArticle = Me.CboCodeArticle.Text


For i = 2 To F3.[A65000].End(xlUp).Row

    If F3.Cells(i, 1) = MonCodeArticle Then
        Exit For
    ElseIf i >= F3.[A65000].End(xlUp).Row Then
        MsgBox "Aucune gamme", vbCritical + vbOKOnly, ""
        Exit Sub
    End If


Next i

'Suite programme
 

eriiic

XLDnaute Barbatruc
merci pour ta réponse et pour ton aide ça marche
Heuuu, ce que tu as fait ne reflète pas du tout ce que j'ai dit.
Quand je dis pas de else ce n'est pas pour remplacer par un elseif.
Et quand je dis 'après la boucle et bien ça veut dire .... 'après la boucle'

En plus tu crois que ça marche ton truc, mais non. Faux si c'est le dernier de la liste.
Dans les boucles toujours controler le comportement aux extrémités, c'est souvent là que se situent les erreurs.
 

Si...

XLDnaute Barbatruc
Bonsoir

Me.CboCodeArticle.Text laisse à penser que tu as une liste déroulante.

C'est la propriété .ListIndex qui permet de savoir si le contenu saisi est dans la liste ou pas.

Les items sont toujours indicés de 0 à … nombre d'items-1

Une saisie indue (manuelle) retourne, avec cette propriété, un négatif (-1 par défaut)

Une ligne de code, sans boucle, suffit donc

If CboCodeArticle .ListIndex < 0 and CboCodeArticle<>" Tthen MsgBox "Oust"

Voir l'exemple avec un Contrôle ActiveX.
 

Pièces jointes

  • élement ou pas d'une liste déroulante.xlsm
    351.6 KB · Affichages: 48
Dernière édition:

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 105
Messages
2 085 350
Membres
102 870
dernier inscrit
Armisa