XL 2016 Utilisation de Vlookup avec Userform

ALE37

XLDnaute Nouveau
Bonsoir à tous, je me lance sur la réalisation d'un Userform pour récupérer les données d'un parc auto engins à partir d'immat.
La condition fonctionne bien quand on utilise du numérique (et encore il semblerait que celà dépende du format) mais dés que je rentre
de l'alphanumérique j'ai un bug...Bref, je galère!

Ma TextBox1 correspond aux Immat recherchées.
TEST est le nom de ma feuille
DONNEES (le nom est défini) ma matrice de recherche

Private Sub TextBox1_AfterUpdate()

If WorksheetFunction.CountIf(Sheets("TEST").Range("A:A"), Me.TextBox1.Value) = 0 Then
MsgBox "Ce numéro d'immat. n'existe pas. Merci de vérifier la correspondance", vbInformation + vbOKOnly, "Immat non trouvée!"
End If
'si la condition est respectée (donc immat trouvée) alors..
With Me
.TextBox2 = Application.WorksheetFunction.VLookup(CLng(Me.TextBox1), Sheets("TEST").Range("DONNEES"), 2, 0)

End With

End Sub

D'avance merci pour votre éclairage.
 

Pièces jointes

  • PARC AUTO VLOOKUP.xlsm
    28.4 KB · Affichages: 13

_Thierry

XLDnaute Barbatruc
Bonsoit @ALE37 , le Forum

Essaies plutôt comme ceci :

VB:
Private Sub TextBox1_AfterUpdate()
'afterupdate correspond à l'événement pour la recherche
If WorksheetFunction.CountIf(Sheets("TEST").Range("A:A"), Me.TextBox1.Value) = 0 Then
    MsgBox "Ce numéro d'immat. n'existe pas. Merci de vérifier la correspondance", vbInformation + vbOKOnly, "Immat non trouvée!"
    
    '>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    Exit Sub '<<<<<<<<<<<<<<<<<<  On doit sortir si pas trouvé
    '<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    
End If
'si la condition est respectée (donc immat trouvée) alors..

With Me
 .TextBox2 = Application.WorksheetFunction.VLookup(CStr(Me.TextBox1.Text), Sheets("TEST").Range("DONNEES"), 2, 0)
End With

End Sub

Bonne nuit
@+Thierry
 

ALE37

XLDnaute Nouveau
Bonsoit @ALE37 , le Forum

Essaies plutôt comme ceci :

VB:
Private Sub TextBox1_AfterUpdate()
'afterupdate correspond à l'événement pour la recherche
If WorksheetFunction.CountIf(Sheets("TEST").Range("A:A"), Me.TextBox1.Value) = 0 Then
    MsgBox "Ce numéro d'immat. n'existe pas. Merci de vérifier la correspondance", vbInformation + vbOKOnly, "Immat non trouvée!"
   
    '>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    Exit Sub '<<<<<<<<<<<<<<<<<<  On doit sortir si pas trouvé
    '<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
   
End If
'si la condition est respectée (donc immat trouvée) alors..

With Me
.TextBox2 = Application.WorksheetFunction.VLookup(CStr(Me.TextBox1.Text), Sheets("TEST").Range("DONNEES"), 2, 0)
End With

End Sub

Bonne nuit
@+Thierry
Bonjour Thierry, je viens de tester mais celà ne fonctionne pas. Ce qui est étonnant c'est que si je supprime les espaces (blancs) de la colonne des Immats (données cherchées) l'instruction initiale CLng fonctionne pour le numérique sauf pour l'Alpha Numérique. S'agit il d'une histoire de format ? Ma matrice est issue d'un export de tableau.
 

Chris24

XLDnaute Impliqué
Supporter XLD
Bonjour ALE37, _Thierry

Un essai avec FIND

VB:
NbLig = Sheets("TEST").[A65000].End(xlUp).Row

Set Plg = Sheets("TEST").Range(Sheets("TEST").Cells(2, 1), Sheets("TEST").Cells(NbLig, 1))
With Plg
    Set R = .Find(TextBox1.Value, LookIn:=xlValues, LookAt:=xlWhole)
        If Not (R Is Nothing) Then
              ligr = Mid(R.Address, 4, Len(R.Address))        'N° ligne
    Else
    MsgBox "Ce numéro d'immat. n'existe pas. Merci de vérifier la correspondance", vbInformation + vbOKOnly, "Immat non trouvée!"
    Exit Sub
    End If
  End With
Me.TextBox2 = Sheets("TEST").Range("B" & ligr)
 

Pièces jointes

  • PARC AUTO VLOOKUP.xlsm
    29 KB · Affichages: 8

ALE37

XLDnaute Nouveau
Bonjour ALE37, _Thierry

Un essai avec FIND

VB:
NbLig = Sheets("TEST").[A65000].End(xlUp).Row

Set Plg = Sheets("TEST").Range(Sheets("TEST").Cells(2, 1), Sheets("TEST").Cells(NbLig, 1))
With Plg
    Set R = .Find(TextBox1.Value, LookIn:=xlValues, LookAt:=xlWhole)
        If Not (R Is Nothing) Then
              ligr = Mid(R.Address, 4, Len(R.Address))        'N° ligne
    Else
    MsgBox "Ce numéro d'immat. n'existe pas. Merci de vérifier la correspondance", vbInformation + vbOKOnly, "Immat non trouvée!"
    Exit Sub
    End If
  End With
Me.TextBox2 = Sheets("TEST").Range("B" & ligr)
Bonjour Chris24, la solution marche nickel! Je n'ai pas tout compris dans le code pour être trés honnête. Pourrais tu me le "traduire" pour que je puisse comprendre ce qui se passe ? Merci.
 

Chris24

XLDnaute Impliqué
Supporter XLD
RE:

VB:
NbLig = Sheets("TEST").[A65000].End(xlUp).Row     'Nombre de lignes colonne "A"

Set Plg = Sheets("TEST").Range(Sheets("TEST").Cells(2, 1), Sheets("TEST").Cells(NbLig, 1))      'détermine la plage de recherche
With Plg
    Set R = .Find(TextBox1.Value, LookIn:=xlValues, LookAt:=xlWhole)       'cherche dans la plage la valeur de TextBox1 ( xlWole = valeur exacte)
        If Not (R Is Nothing) Then         ' si le résultat n'est pas rien (si trouve)
              ligr = Mid(R.Address, 4, Len(R.Address))   ' on récupère le N° ligne
    Else
    MsgBox "Ce numéro d'immat. n'existe pas. Merci de vérifier la correspondance", vbInformation + vbOKOnly, "Immat non trouvée!"
    Exit Sub
    End If
  End With
Me.TextBox2 = Sheets("TEST").Range("B" & ligr)
Code:
 

ALE37

XLDnaute Nouveau
Un petit complément (histoire de passer le temps)

Je n'ai pas tout regardé mais en lignes 4 et 5 il y a doublon
Merci pour ce retour. Questions subsidiaires, faut il que la colonne de recherche (Immat dans mon cas) se trouve nécessairement en colonne A ? J'ai voulu adapter ce formulaire sur un départ en colonne G pour voir en lui modifiant bien entendu les colonnes à rapatrier mais celà semble lui poser un problème.
 

ALE37

XLDnaute Nouveau
Merci pour ce retour. Questions subsidiaires, faut il que la colonne de recherche (Immat dans mon cas) se trouve nécessairement en colonne A ? J'ai voulu adapter ce formulaire sur un départ en colonne G pour voir en lui modifiant bien entendu les colonnes à rapatrier mais celà semble lui poser un problème.
En fait je viens de voir mon erreur. Tout est OK. J'avais oublié de modifier une valeur. C'est parfait! Encore merci de ton aide. Je vais investiguer un peu plus loin sur le sujet.
 

patricktoulon

XLDnaute Barbatruc
bonjour à tous
L'ART et la manière de faire compliqué alors que c'est simple
est si difficile de remplacer ce textbox1 par un combobox
et de taper le texte et de la laisser intuitive nativement en réglant le matchentry et la laisser faire le reste pour chopper la ligne et donc récupérer les données correspondantes
sérieux il n'y a personne qui va le dire?? :rolleyes:
 

patricktoulon

XLDnaute Barbatruc
ou tout simplement dans ton textbox1
VB:
Private Sub TextBox1_Change()
TextBox1 = UCase(TextBox1)
x = Evaluate("=MATCH(""" & TextBox1.Text & """,TEST!A2:A1000,0)")
If Not IsError(x) Then MsgBox "cette imat se trouve en ligne " & x + 1
End Sub

ps: j'ai ouvert ton fichier et a mon avis il y a déjà des soucis avec tes activx
je suis pas étonné 2007 est très fragile avec ça la moindre cochonnerie et il est bousillé
bref chez moi les combobox déconnent avec ton fichier le matchentrycomplete et le matchrequired n'ont pas l'effet voulue
donc oublie
et refait un fichier propre
 
Dernière édition:

ALE37

XLDnaute Nouveau
ou tout simplement dans ton textbox1
VB:
Private Sub TextBox1_Change()
TextBox1 = UCase(TextBox1)
x = Evaluate("=MATCH(""" & TextBox1.Text & """,TEST!A2:A1000,0)")
If Not IsError(x) Then MsgBox "cette imat se trouve en ligne " & x + 1
End Sub

ps: j'ai ouvert ton fichier et a mon avis il y a déjà des soucis avec tes activx
je suis pas étonné 2007 est très fragile avec ça la moindre cochonnerie et il est bousillé
bref chez moi les combobox déconnent avec ton fichier le matchentrycomplete et le matchrequired n'ont pas l'effet voulue
donc oublie
et refait un fichier propre
Je n'ai pas suivi tout le raisonnement. Je n'ai pas de version 2007. Je viens de finaliser mon formulaire sur le fichier complet et tout fonctionne parfaitement.
1588439722482.png


Il me reste juste à valider un format personnalisé dans une Textbox.
 
Haut Bas