Recherchev en vba [Fermé]

Signaler
Messages postés
2
Date d'inscription
vendredi 23 mai 2008
Statut
Membre
Dernière intervention
2 juin 2008
-
Messages postés
433
Date d'inscription
dimanche 17 février 2008
Statut
Membre
Dernière intervention
17 octobre 2008
-
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

3 réponses

Messages postés
433
Date d'inscription
dimanche 17 février 2008
Statut
Membre
Dernière intervention
17 octobre 2008
301
Bonjour,
utiliser une fonction RechercheV semble être la bonne solution.
En VBA, la syntaxe est la suivante :
Cellule.Value = Application.WorksheetFunction.VLookup(Valeur, Plage, Colonne, False)

Les arguments sont les mêmes que lorsque tu utilises cette fonction dans Excel.
I.
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 76687 internautes nous ont dit merci ce mois-ci

Messages postés
2
Date d'inscription
vendredi 23 mai 2008
Statut
Membre
Dernière intervention
2 juin 2008

Bonjour Ivan-hoe

Merci pour la réponse et désolée pour la réponse tardive mais j'avais un pb de connexion.

Voilà un pb, cela ne fonctionne pas : voilà tout mon langage :

' Cette macro assume que la base de donnée comporte une ligne d'entêtes
Dim rngFormulaire As range
Dim wksBD As Worksheet

Set rngFormulaire = Worksheets("Formulaire").range("B1:B8")
Set wksBD = Worksheets("BD")

' rappeler l'UID
Cellule.Value = Application.WorksheetFunction.VLookup(b1, wksBD!a:j, 2, False)



' Copier les données du formulaire
rngFormulaire.Copy
' Coller avec transposition dans la base de données
wksBD.Cells(wksBD.UsedRange.Rows.Count + 1, 1).PasteSpecial Paste:=xlPasteValues, Transpose:=True
' Enlever l'indicateur d'opération copier/coller
Application.CutCopyMode = False
' Effacer les données dans le formulaire
rngFormulaire.ClearContents

Merci de m'indiquer où cela ne fonctionne pas.
En outre, comment rajouter les conditions if : en effet, si ma cellule B1 n'est pas présente dans WksBD, il faut que je continue à entre des informations dans mon formulaire.

Merci bcp
Messages postés
433
Date d'inscription
dimanche 17 février 2008
Statut
Membre
Dernière intervention
17 octobre 2008
301
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...