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...