code vba formulaire de recherche erreur 13

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

yohan60

XLDnaute Nouveau
Bonjour,

j'ai crée un formulaire de recherche mais j'ai une erreur qui apparait, j'apprend de jour en jour mais je suis pas encore un expert en vba quelqu'un peux me dire d'ou vient l'erreur et m'aider à la corriger.

merci d'avance essai1.JPG
 

Pièces jointes

Bonjour

toute entrée dans un userform est toujours du texte
Clng(textbox1) ne fonctionnera que si l'entrée dans textbox1 ressemble à un chiffre
sinon il faut séparer le texte des chiffres
par ex:
textebox1 = 'lkjui 12356'
t=split(textbox1," ") 'va séparer textebox1 en autant d'item qu'il y a d'espaces)
ici, t(0) = 'lkjui'
t(1)= '12356'
ensuite on peut utiliser chiffre=Clng(t(0))

edit bonsoir M12
 
Bonsoir à tous


Une autre idée différente


VB:
Private Sub TextBox1_Change()

If Me.TextBox1.Value = "" Then: Me.TextBox2.Value = "": Me.TextBox3.Value = "": Me.TextBox4.Value = "": Exit Sub

Dim StartSearch As String
Dim MyLastRow As Integer
Dim i As Integer

MyLastRow = Application.ThisWorkbook.Worksheets("Nonexpedier").Cells(Application.ThisWorkbook.Worksheets("Nonexpedier").Rows.Count, "A").End(xlUp).Row

StartSearch = VBA.LCase("*" & Me.TextBox1.Text & "*")

With Application.ThisWorkbook.Worksheets("Nonexpedier")
    For i = 2 To MyLastRow
        If VBA.LCase(VBA.CStr(Cells(i, 1))) Like StartSearch Then
            Me.TextBox2.Value = .Cells(i, 2).Value
            Me.TextBox3.Value = .Cells(i, 3).Value
            Me.TextBox4.Value = .Cells(i, 4).Value
        Exit For
        End If
    Next i
End With

End Sub
 
Bonjour

toute entrée dans un userform est toujours du texte
Clng(textbox1) ne fonctionnera que si l'entrée dans textbox1 ressemble à un chiffre
sinon il faut séparer le texte des chiffres
par ex:
textebox1 = 'lkjui 12356'
t=split(textbox1," ") 'va séparer textebox1 en autant d'item qu'il y a d'espaces)
ici, t(0) = 'lkjui'
t(1)= '12356'
ensuite on peut utiliser chiffre=Clng(t(0))

edit bonsoir M12
Bonsoir à tous

je vous remercie d'avoir pris du temps pour m'expliquer.

à bientôt
 
Bonjour à tous,

Une autre vision.

J'ai considéré (c'est osé, je sais) que les codes route sont du format : 4 caractères suivis d'un espace suivi de 4 caractères.
  • si ce qu'on saisit dans textbox1 (majuscules ou minuscules) a le format qu'il faut, on procède à la recherche automatiquement
  • sinon la recherche est déclenchée par la touche Entrée ou un click sur le bouton ?
  • si on tape sur la touche Esc alors on referme la fenêtre
Le code est un peu commenté.

VB:
Private Sub btnfermer_Click()    'bouton activé aussi par ESC (propriété Cancel à True)
   Unload Me
End Sub

Private Sub TextBox1_AfterUpdate()
   Recherche      ' après une actualisation, on recherche
End Sub

Private Sub TextBox1_Change()
'  après une modif de textBox1, on recherche
   TextBox2 = "": TextBox3 = "": TextBox4 = ""     'on efface les résultats affichés dans les TextBox 2,3,4
   If TextBox1 Like "???? ????" Then Recherche     'si le code route répond au modèle, on procède à une recherche
End Sub

Private Sub CommandButton1_Click()     'bouton activé par la touche Entrée (propriété Default à True)
   Recherche
End Sub

Sub Recherche()
   'avec le tableau "tableau3" structuré de la feuille "Nonexpedier"
   With Sheets("Nonexpedier").Range("tableau3")
      '  .Columns(1) est la première colonne des valeurs de tableau3
      If WorksheetFunction.CountIf(.Columns(1), TextBox1) = 0 Then
         'on n'a pas trouvé la valeur
         MsgBox "Ce code route n'existe pas", vbInformation + vbOKOnly
      Else
         'on a trouvé la valeur. On met les valeurs dans les textbox 2,3,4
         TextBox2 = Application.VLookup(Me.TextBox1, .Cells, 2, 0)
         TextBox3 = Application.VLookup(Me.TextBox1, .Cells, 3, 0)
         TextBox4 = Application.VLookup(Me.TextBox1, .Cells, 4, 0)
      End If
   End With
End Sub
 

Pièces jointes

Dernière édition:
Bonjour à tous,

Une autre vision.

J'ai considéré (c'est osé, je sais) que les codes route sont du format : 4 caractères suivis d'un espace suivi de 4 caractères.
  • si ce qu'on saisit dans textbox1 a le format qu'il faut, on procède à la recherche automatiquement
  • sinon la recherche est déclenchée par la touche Entrée ou un click sur le bouton ?
  • si on tape sur la touche Esc alors on referme la fenêtre
Le code est un peu commenté.

VB:
Private Sub btnfermer_Click()    'bouton activé aussi par ESC (propriété Cancel à True)
   Unload Me
End Sub

Private Sub TextBox1_AfterUpdate()
   Recherche      ' après une actualisation, on recherche
End Sub

Private Sub TextBox1_Change()
'  après une modif de textBox1, on recherche
   TextBox2 = "": TextBox3 = "": TextBox4 = ""     'on efface les résultats affichés dans les TextBox 2,3,4
   If TextBox1 Like "???? ????" Then Recherche     'si le code route répond au modèle, on procède à une recherche
End Sub

Private Sub CommandButton1_Click()     'bouton activé par la touche Entrée (propriété Default à True)
   Recherche
End Sub

Sub Recherche()
   'avec le tableau "tableau3" structuré de la feuille "Nonexpedier"
   With Sheets("Nonexpedier").Range("tableau3")
      '  .Columns(1) est la première colonne des valeurs de tableau3
      If WorksheetFunction.CountIf(.Columns(1), TextBox1) = 0 Then
         'on n'a pas trouvé la valeur
         MsgBox "Ce code route n'existe pas", vbInformation + vbOKOnly
      Else
         'on a trouvé la valeur. On met les valeurs dans les textbox 2,3,4
         TextBox2 = Application.VLookup(Me.TextBox1, .Cells, 2, 0)
         TextBox3 = Application.VLookup(Me.TextBox1, .Cells, 3, 0)
         TextBox4 = Application.VLookup(Me.TextBox1, .Cells, 4, 0)
      End If
   End With
End Sub
Bonsoir,

ton code est super je vais surement m'en servir, mais le format date donne ça:
 

Pièces jointes

  • 001.JPG
    001.JPG
    12.1 KB · Affichages: 9
Bonsoir,
mais le format date donne ça:
1605128642532.png

Je n'avais même pas prêté attention au format de la date 😕
Voici la v1a corrigée (et un peu simplifiée)

VB:
Private Sub btnfermer_Click()    'bouton activé aussi par ESC (propriété Cancel à True)
   Unload Me
End Sub

Private Sub TextBox1_Change()
'  après une modif de textBox1, on recherche
   TextBox2 = "": TextBox3 = "": TextBox4 = ""     'on efface les résultats affichés dans les TextBox 2,3,4
   If TextBox1 Like "???? ????" Then Recherche     'si le code route répond au modèle, on procède à une recherche
End Sub

Private Sub CommandButton1_Click()     'bouton activé par la touche Entrée (propriété Default à True)
   Recherche
End Sub

Sub Recherche()
   'avec le tableau "tableau3" structuré de la feuille "Nonexpedier"
   With Sheets("Nonexpedier").Range("tableau3")
      '  .Columns(1) est la première colonne des valeurs de tableau3
      If WorksheetFunction.CountIf(.Columns(1), TextBox1) = 0 Then
         'on n'a pas trouvé la valeur
         MsgBox "Ce code route n'existe pas", vbInformation + vbOKOnly
      Else
         'on a trouvé la valeur. On met les valeurs dans les textbox 2,3,4
         TextBox2 = Format(Application.VLookup(Me.TextBox1, .Cells, 2, 0), "dd/mm/yyyy")
         TextBox3 = Application.VLookup(Me.TextBox1, .Cells, 3, 0)
         TextBox4 = Application.VLookup(Me.TextBox1, .Cells, 4, 0)
      End If
   End With
End Sub
 

Pièces jointes

Je n'avais même pas prêté attention au format de la date 😕
Voici la v1a corrigée (et un peu simplifiée)

VB:
Private Sub btnfermer_Click()    'bouton activé aussi par ESC (propriété Cancel à True)
   Unload Me
End Sub

Private Sub TextBox1_Change()
'  après une modif de textBox1, on recherche
   TextBox2 = "": TextBox3 = "": TextBox4 = ""     'on efface les résultats affichés dans les TextBox 2,3,4
   If TextBox1 Like "???? ????" Then Recherche     'si le code route répond au modèle, on procède à une recherche
End Sub

Private Sub CommandButton1_Click()     'bouton activé par la touche Entrée (propriété Default à True)
   Recherche
End Sub

Sub Recherche()
   'avec le tableau "tableau3" structuré de la feuille "Nonexpedier"
   With Sheets("Nonexpedier").Range("tableau3")
      '  .Columns(1) est la première colonne des valeurs de tableau3
      If WorksheetFunction.CountIf(.Columns(1), TextBox1) = 0 Then
         'on n'a pas trouvé la valeur
         MsgBox "Ce code route n'existe pas", vbInformation + vbOKOnly
      Else
         'on a trouvé la valeur. On met les valeurs dans les textbox 2,3,4
         TextBox2 = Format(Application.VLookup(Me.TextBox1, .Cells, 2, 0), "dd/mm/yyyy")
         TextBox3 = Application.VLookup(Me.TextBox1, .Cells, 3, 0)
         TextBox4 = Application.VLookup(Me.TextBox1, .Cells, 4, 0)
      End If
   End With
End Sub
encore merci c'est super tout ça beau boulot.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
16
Affichages
412
Réponses
3
Affichages
189
Réponses
4
Affichages
116
  • Question Question
Microsoft 365 Formulaire
Réponses
2
Affichages
118
Retour