Prévenir d'une erreur dans une boucle VBA

Salut đź‘‹,

Dans un UserForm je rentre un numéro qui me renvoie différente information, le soucis c'est que si je fait une faute de frappe ou un numéro qui n'est pas dans mon tableau, absolument tout plante...

Je voudrais savoir si il existait une solution pour qu'après X boucle, si le code ne trouve rien, cela arrête la boucle avec une MsgBox "erreur de saisie". J'ai beau chercher sur le forum ou ailleurs ce ne marche pas.

Je sais que le CTRL + Pause existe mais la feuille que j'utilise dois être utilisé par plusieurs personnes donc cela doit être le plus clair possible.

Je vous laisse mon code si dessous

Private Sub Textnum_Change()

Sheets("saisie").Activate

Range("B3").Select

Do Until ActiveCell = CLng(Me.Textnum)

ActiveCell.Offset(1, 0).Select

Loop

Me.TextnomC = ActiveCell.Offset(0, 2)

Me.Textproduit = ActiveCell.Offset(0, 4)

Me.TextRépa = ActiveCell.Offset(0, 8)

Me.TextSKU = ActiveCell.Offset(0, 6)

End Sub

Bonsoir,

plutôt qu'une boucle sur toutes les possibilité, vous pouvez utiliser Find.
il y a certainement mieux et plus rapide mais ceci fonctionne :

Set Cel = Laplagederecherche.Find(lavaleurrecherchée)

Après il suffit de tester si Cel est différente de rien : If Not Cel Is Nothing Then le code à faire si on a trouvé Else si on a rien trouvé

@ bientĂ´t

LouReeD

Merci pour votre réponse rapide,

j'ai bien refait le code avec vos conseils, mais je me heurte a un nouveau problème. Si je tape une lettre j'ai bien la msgbox qui s'ouvre et me marque "erreur",mais si je tape un nombre "6" ou "8"3 la cellule sélectionner reste toujours B3 alors que cela devrait être "B:7" et "B:9" , on dirait qu'il ne recherche pas plus loin que B:3.

Je vous laissée fichier si cela peux vous aider (aucune info sensible dedans)

Private Sub Textnum_Change()

Sheets("saisie").Activate
Range("B3").Select

Set cel = Range("B2:B1000").Find(Textnum)
If Not cel Is Nothing Then

Me.TextnomC = ActiveCell.Offset(0, 2)
Me.Textproduit = ActiveCell.Offset(0, 4)
Me.TextRépa = ActiveCell.Offset(0, 8)
Me.TextSKU = ActiveCell.Offset(0, 6)

Else

MsgBox "erreur"

End If

End Sub
8fichier-test.xlsm (74.81 Ko)

Bonsoir,

essayez en enlevant le Range("B3").Select... Peut-ĂŞtre...
A savoir également qu'il y a des paramètres à la fonction Find, comme par exemple le fait de recherche une valeur exacte et non pas "un contient" je crois.

@ bientĂ´t

LouReeD

bonjur LouReed, Arthur101310,

je ne suis pas sûr de l'évent, mais ma proposition est

Private Sub Textnum_Exit(ByVal Cancel As MSForms.ReturnBoolean)

     With Textnum
          Set c = Sheets("saisie").ListObjects("Tsource").ListColumns("Numéro").DataBodyRange     'cette colonne
          r = Application.Match(CLng(Textnum), c, 0)     'rechercher comme valeur
          If Not IsNumeric(r) Then r = Application.Match(Textnum, c, 0)     'rechercher comme texte

          If IsNumeric(r) Then               'trouvé
               Set cel = c.Cells(r, 1)       'cette cellule "Numéro"
               Me.TextnomC = cel.Offset(0, 2)
               Me.Textproduit = cel.Offset(0, 4)
               Me.TextRépa = cel.Offset(0, 8)
               Me.TextSKU = cel.Offset(0, 6)
          Else
               MsgBox "erreur"
               Me.TextnomC = ""
               Me.Textproduit = ""
               Me.TextRépa = ""
               Me.TextSKU = ""
          End If
     End With
End Sub
Rechercher des sujets similaires Ă  "prevenir erreur boucle vba"