Modifier une base de donnée à partir dune listebox avec la fonction Vlookup
Bonjour à tous,
J'ai une base de donnée contenant des numéros d'identifiants, prénom client, nom client, adresse etc...
Je possède une liste box aussi qui affiche dans un formulaire les informations dans différentes texbox dès que je selectionne une ligne.
Je cherche à pouvoir modifier cette base de donnée à partir de la liste box à l'aide de la fonction Vlookup. La récherche sera orientée sur l'identifiant (étant unique et propre à chaque client).
Le prénom est dans la 2ème colonne de ma base de donnée, et représente la text box 1 de mon formulaire.
Le nom est dans la 3 ème colonne de ma base de donnée, et représente la textbox 2 de mon formulaire.
A partir de ces deux informations j'ai tenté avec le code vba suivant :
Private Sub BtnModifier_Click()
Sheets("BASE DE DONNEES").Select
If TxtCode = "" Then
MsgBox "Veuillez sélectionner un client !", vbInformation, "ERREUR DE SAISIE"
Exit Sub
Else
If MsgBox("Voulez-vous vraiment modifier ?", vbOKCancel + vbQuestion, "DEMANDE DE CONFIRMATION") = vbOK Then
WorksheetFunction.VLookup(TxtCode.Value, Sheets("Feuil4").Range("A1:I300"), 2, False).Value = TxtPrenom.Value
WorksheetFunction.VLookup(TxtCode.Value, Sheets("Feuil4").Range("A1:I300"), 2, False).Value = TxtNom.Value
MsgBox "Données bien modifiées !", vbInformation, "CONFIRMATION"
Else
Exit Sub
End if
End if
End Sub
- "Feuil4" : ma base de donnée
- Range("A1:I300") : Les plages de données dans ma feuil4
- TxtCode : le numéro d'identifiant pour chaque client affiché dans mon formulaire lors de la sélection d'une ligne dans la liste box.
Désole le fichier est confidentiel je ne peux pas le joindre, j'espère avoir bien détaillé ce que je recherche.
Merci à vous pour vos retours !
Bonjour,
Si j'ai bien compris, le code suivant devrait faire l'affaire :
Private Sub BtnModifier_Click()
Dim Existence as byte
Dim Ligne%
If TxtCode.value = "" Then MsgBox "Veuillez sélectionner un client !", vbCritical, "ERREUR DE SAISIE": Exit Sub 'sortie si vide
If TxtPrenom.value = "" Then MsgBox "Le champ Prénom est vide !", vbCritical, "ERREUR DE SAISIE": Exit Sub 'idem
If TxtNom.value = "" Then MsgBox "Le champ Nom est vide !", vbCritical, "ERREUR DE SAISIE": Exit Sub 'idem
If MsgBox("Voulez-vous vraiment modifier ?" & vbcrlf & vbcrlf & TxtPrenom.value & vbcrlf & TxtNom.value, _
vbOKCancel + vbQuestion, "DEMANDE DE CONFIRMATION") = vbOK Then
Existence = application.countif(Range("BDD[Identifiant]"), TxtCode.value) 'compte occurrences de l'identifiant dans BDD
if Existence = 1 then 'ssi Identifiant apparait 1 fois
Ligne = application.match(TxtCode.value, Range("BDD[Identifiant]"), 0) 'ligne de l'identifiant
Range("BDD[Prénom]").cells(Ligne).value = TxtPrenom.Value 'modif prenom sur meme ligne
Range("BDD[Nom]").cells(Ligne).value = TxtNom.Value 'modif nom sur meme ligne
MsgBox "Données bien modifiées !", vbInformation, "CONFIRMATION"
Else 'sinon, si Existence = 0 ou > 1
Msgbox "Impossible de modifier ce client ! L'identifiant n'existe pas ou existe plusieurs fois...", vbCritical, "ANOMALIE"
end if
End if
End Sub
Il faudra cependant :
- créer un tableau structuré (la base pour une base
- adapter avec vos propres références (dans mon exemple, le tableau s'appelle BDD et les colonnes Identifiant, Prénom, Nom).
Cordialement,
Bonjour le fil, bonjour le forum,
J'imagine que tu as aussi un bouton Ajouter qui te permet d'ajouter un nouvel élément à ta base. Il va chercher la première ligne vide de la base et rajoute les informations contenues dans tes champs. Tu peux utiliser le même code pour Modifier en remplaçant la première ligne vide de la base par l'index de ta listbox +2 (à adapter selon la ligne où commence ta base). Un petit exemple en pièce jointe. La variable LR (Ligne de Référence) est modifiée si tu cliques dans la ListBox... Regarde aussi la propriété [Tag] de chaque Textbox.
Il y a momentanément un bug pour ajouter un fichier, Service indisponible... Je le mettrai dès que ce sera résolu.
[Édition]
C'est résolu ! Voici le fichier :
Merci à vous pour vos retour c'est parfait !