Recherchev en vba
Bonjour,
Je suis en train de construire une macro en vba sur de l'excel. J'ai 2 feuilles Excel : une qui est un formulaire qui incrémente ma base de données.
Or, si un client existe sur ma base de données, je souhaite lorsque je remplis mon formulaire, que le nom soit recherch dans la base de données et rappeler la fiche client pour la modifier si nécessaire sur mon formulaire.
J'ai essayé plusieurs formules ex Sub recherche() mais je n'y arrive pas et ne sais pas comment recopier le nom du client sur le formulaire.
Merci pour votre aide.
Conseilrecherchev
Je suis en train de construire une macro en vba sur de l'excel. J'ai 2 feuilles Excel : une qui est un formulaire qui incrémente ma base de données.
Or, si un client existe sur ma base de données, je souhaite lorsque je remplis mon formulaire, que le nom soit recherch dans la base de données et rappeler la fiche client pour la modifier si nécessaire sur mon formulaire.
J'ai essayé plusieurs formules ex Sub recherche() mais je n'y arrive pas et ne sais pas comment recopier le nom du client sur le formulaire.
Merci pour votre aide.
Conseilrecherchev
Configuration: Windows XP Firefox 2.0.0.14
3 réponses
-
Bonjour,
pour voir où ton code est erroné, exécute-le (F5, ou bien F8 en pas-à-pas).
Tu verras alors que c'est cette ligne qui cloche :
Cellule.Value = Application.WorksheetFunction.VLookup(b1, wksBD!a:j, 2, False)
Je n'ai pas été assez précis dans le message précédent : les arguments de VLookUp dans VBA sont les mêmes que ceux de RECHERCHEV dans Excel, mais ne s'écrivent pas exactement pareil. Et il faut remplacer Cellule par la cellule dans laquelle tu veux écrire.Range("B2").Value = _ Application.WorksheetFunction.VLookup(Range("B1").Value, wksBD.Range("A:J"), 2, False)
Pour tester si le code client saisi existe déjà :
s'il existe, on rapelle les infos le concernant avec les .VLookUp
s'il n'existe pas, ça génère une erreur et la procédure continue à NOUVEAUCLIENT
Ci-dessous une proposition (à coller dans le code de la feuille Formulaire)
Private Sub Worksheet_Change(ByVal Target As Range) 'restreindre le déclenchement de la procédure à un changement dans B1 If Not Target.Address(False, False) = "B1" Then Exit Sub 'Déclaration des variables Dim rngFormulaire As Range Dim wksBD As Worksheet Set rngFormulaire = Worksheets("Formulaire").Range("B1:B8") Set wksBD = Worksheets("BD") ' rappeler l'UID On Error GoTo NOUVEAUCLIENT With Application.WorksheetFunction Range("B2").Value = .VLookup(Range("B1").Value, wksBD.Range("A:J"), 2, False) Range("B3").Value = .VLookup(Range("B1").Value, wksBD.Range("A:J"), 3, False) Range("B4").Value = .VLookup(Range("B1").Value, wksBD.Range("A:J"), 4, False) 'etc. End With 'message si le code client est déjà présent dans la BD MsgBox "Vous avez rappelé le client " & Range("B2").Value 'cas où le code client n'est pas présent dans la BD Exit Sub NOUVEAUCLIENT: Range("B2:B8").ClearContents MsgBox "Vous avez saisi un nouveau code client" & vbNewLine & _ "il faut renseigner les autres champs" End Sub
Après, pour valider la saisie d'un nouveau client (ou valider les modifications apportées à un client existant), tu pourrais créer un bouton et lui affecter la suite de la procédure que tu as écrite.
A suivre...