Ajouter/modifier valeurs dans ma bdd à partir d'un listbox
Bonjour,
J'ai une base de données (confidentielle, c'est pourquoi je ne vais pas vous envoyer mon fichier).
Dans cette BDD bien remplie, j'ai plusieurs colonnes (Index, Famille produit, Nom produit, Quantités, Prix, Référence...)
J'ai réussi à créer un formulaire qui va afficher dans une listBox tous les produits rattachés à une famille produit via une requête SQL.
A partir de ce moment,
Si je clique sur un produit dans ma listbox (qui s'affiche comme un tableau avec les colonnes Nom produit, quantité, prix, références...) j'aimerai que les valeurs de mon tableau pour la ligne sélectionnée s'affichent dans des Textbox (du coup on aurait 1 textbox / colonne)
Quel est le code qui permettrait cette actions ?
Car une fois les textbox renseignées avec les informations de ma listbox, je sais comment ajouter ou modifier ces éléments à ma BDD.
Merci d'avance pour votre aide !
Saber
sabercha a écrit :Bonjour,
J'ai une base de données (confidentielle, c'est pourquoi je ne vais pas vous envoyer mon fichier).
Comment veux-tu que ton aide sur une image, un pdf, ou ...rien que des mots
Pas mon truc les formulaires mais ton argument est...
Il y a bien un spécialiste des formules qui passera ici
P.
Hello Patrick,
Je peux fournir une illustration du formulaire que j'ai créé :
Je peux également dire que le code permettant d'isoler l'information en colonne 1 (Le nom du produit) Le de la ligne sélectionnée dans la listBox est :
UserForm1.LST_Tube.List(UserForm1.LST_Tube.ListIndex, 1)
Puis :
UserForm1.LST_Tube.List(UserForm1.LST_Tube.ListIndex, 2) pour l’information en colonne 2 (la quanité) ... etc
Le but étant de remplir mes textbox à droite de ma listbox via le code :
Private Sub Listbox_Click()
CODE RECHERCHé
End Sub
J'espère que ces informations pourraient encourager/aider les spécialistes !
Merci d'avance pour votre précieuse aide.
Saber
bonjour
utiliser ca
Private Sub ListBox1_Click()
TextBox1 = ListBox1.List(ListBox1.ListIndex) 'par exemple
End Sub
Private Sub UserForm_Initialize()
ListBox1.RowSource = "a1:e4" 'par exemple
End Sub
Private Sub ComboBox1_Change() ' pour ComboBox1utiliser l evenement change
End Sub
Merci Amir !
Ca fonctionne ! Au fait, c'était le code que j'utilisais déjà. Et grâce à ta confirmation j'ai pu identifier mon problème :
J'avais entré le code dans un module ==> qui ne prenait donc pas en compte les valeurs sélectionnées (par un "click") dans ma listbox.
En essayant le code directement dans le code de mon Userform ça a bien marché !
Est-ce que quelqu'un peut maintenant m'expliquer la différence, au niveau du code entre un ajout (dans la dernière ligne de ma bdd) et une modification de la ligne (maintenant affichée dans mes textboxs) ?
Merci à tous pour votre aide,
Saber
bonjour
ListBox1.RowSource = "a1:e4" 'par exemple
'pour modifier la ligne affichée sur listbox
Range("a" & (ListBox1.ListIndex + 1)).Value = ListBox1.List(ListBox1.ListIndex)
' pour ajouter une entre
'chercher lla derniere ligne vide dans la colonne ou la ligne des entres
'Range("a" & Rows.Count).End(xlUp).Row
'puis :
nb = Range("a" & Rows.Count).End(xlUp).Row
Range("a" & (nb + 1)).Value = ListBox1.List(ListBox1.ListIndex)
Hello Amir,
Merci pour ton code, mais je n'arrive pas à l'interpréter.
Du coup j'ai essayé autre chose, mais ça ne fonctionne pas encore. Quelqu'un peut m'aider ?
- BDD est le nom de l'onglet où on peut trouver ma BDD
- TB_Produit est la textbox Produit
- TB_Ref est la textbox Référence
Voici ce que j'ai codé lorsque je clique sur le CommandButton Update :
Dim Ligne As Integer ' j'ai défini la variable Ligne qui est censée donner le numéro de ma ligne
If Sheets("BDD").[Nom produit] = TB_Produit And Sheets("BDD").[Références] = TB_Ref Then
Ligne = Target.Row ' voici le code qui devrait afficher la ligne pour laquelle mes textboxs TB_Produit et TB_Ref sont respectivement égales aux valeurs des colonnes [Nom produit] et [Références] dans la BDD et j'ai choisi ces deux colonnes comme index car elles affichent à elles deux des valeurs uniques dans ma BDD
If MsgBox("Do you confirm the data update ?", vbYesNo, "confirmation") = vbYes Then
Sheets("BDD").Cells(Ligne, 1) = TB_Famille.Value ' Le problème c'est que Ligne prend la valeur 0 et non la valeur de la ligne pour lequel le code "if....." devrait fonctionner
Sheets("BDD").Cells(Ligne, 2) = TB_Produit.Value
Sheets("BDD").Cells(Ligne, 3) = TB_Quantite.Value
Sheets("BDD").Cells(Ligne, 4) = TB_Prix.Value
Sheets("BDD").Cells(Ligne, 5) = TB_Ref.Value
End If
End If
Quelqu'un peut me guider ? M'indiquer l'erreur ?
Merci par avance !
Excellente journée
Sans le fichier exemple, encore une fois....
que donne "ligne" quand tu vas au pas à pas avec F8 ?
target.row est normalement la ligne de la cellule active dans la feuille active
si tu es dans un userform, c'est donc pas bon
P.
Hello Patrick,
Ligne renvoie la valeur 0 comme cité dans mon post.
Je comprend donc Target.row n'est pas le bon code a utiliser ?
Encore dsl de ne pas pouvoir fournir mon fichier mais tu ne devrai pas vraiment avoir besoin de mon fichier pour m'aider, je pense qu'il y a suffisamment d'informations claires pour comprendre le problème.
Au fait pour te réexpliquer, mon formulaire voici ce que j'ai déjà réussi à faire :
Lorsque je sélectionne une famille de produit dans la combobox tout en haut, une liste de produits s'affiche dans la listbox.
Lorsque je clique sur un produit (donc sur une ligne en surbrillance) dans ma listbox, les informations (de chaque colonne dans la ligne selectionnée) s'affichent alors respectivement dans les textboxs sur la droite.
J'ai également réussi à code le CommandButton "Add" qui permet d'ajouter une ligne (dernière ligne) dans ma base de données avec des informations saisies dans me textboxs.
Ce qu'il me reste à fair, c'est créer le code qui va me permettre de MODIFIER et non ajouter les informations issues de mes textboxs dans la ligne associée à ma BDD.
J'espère avoir été plus clair ?
N'hésite pas si tu as besoin de plus d'informations,
Saber
Merci pour ton aide !
Je ne fais jamais de userform mais target ne convient pas, c'est sur ...
Il faut le n° de la ligne sélectionné dans une listbox/combobox
Va voir ici tu auras ta réponse:
http://boisgontierjacques.free.fr/
P.
Bonjour
Je pense que vous avez déclaré "traget" quelque part sur tes modules et que vous avez donné une référence
Ligne = Target.Row
cette méthode veut dire que vous l’avez déclaré comme range (référence a une cellule ou plage des cellules)
Hello Amir,
Pour répondre à ta question, j'ai vérifié et je n'ai déclaré "target" dans aucun de mes modules.
Merci Patrick pour ton lien, mais la réponse ne s'y trouve pas...
bonjour
SVP essayer ca :
'Option Explicit pour vous aider a declarer les variables corectement
'#----------------------------------------#
'lancer ce code par le bouton "update"
Dim Ligne As Integer
'Range("a" & (ListBox1.ListIndex + 1)).Value = ListBox1.List(ListBox1.ListIndex)
' je pense "LST_Tube" est le nom de la listbox si non changer "LST_Tube" par ....... ,vous saviez
Ligne = (LST_Tube.ListIndex + 2) ' si le premier produit qui figure sur la listbox est sur la linge 2 "A2"
'Ligne = (LST_Tube.ListIndex + 3) ' si le premier produit qui figure sur la listbox est sur la linge 3 "A3"
'Ligne = (LST_Tube.ListIndex + 4) ' si le premier produit qui figure sur la listbox est sur la linge 4 "A4"
'Ligne = (LST_Tube.ListIndex + ...) ' si le premier produit qui figure sur la listbox est sur la linge ....,,vous saviez
If MsgBox("Do you confirm the modification of this ligne ?", vbYesNo, "confirmation") = vbYes Then
Sheets("BDD").Cells(Ligne, 1) = TB_Famille.Value ' Le problème c'est que Ligne prend la valeur 0 et non la valeur de la ligne pour lequel le code "if....." devrait fonctionner
Sheets("BDD").Cells(Ligne, 2) = TB_Produit.Value
Sheets("BDD").Cells(Ligne, 3) = TB_Quantite.Value
Sheets("BDD").Cells(Ligne, 4) = TB_Prix.Value
Sheets("BDD").Cells(Ligne, 5) = TB_Ref.Value
End If
End If
End Sub
'#----------------------------------------#
'lancer ce code par le bouton "add"
Dim nb As Integer
nb = Range("A" & Rows.Count).End(xlUp).Row + 1
' nb = derniere ligne vide dans la colonne "A"
' vous pouver le changer par "B" OU "C" .... selon ton projet
' a mon avis la colonne de la fammille doit precede le nom de produit
If MsgBox("Do you want to add this product ?", vbYesNo, "confirmation") = vbYes Then
Sheets("BDD").Cells(nb, 1) = TB_Famille.Value
Sheets("BDD").Cells(nb, 2) = TB_Produit.Value
Sheets("BDD").Cells(nb, 3) = TB_Quantite.Value
Sheets("BDD").Cells(nb, 4) = TB_Prix.Value
Sheets("BDD").Cells(nb, 5) = TB_Ref.Value
End If
End If
'#----------------------------------------#
'pour "traget" si etait seulement pour nous explique ce que vous voulez faire
' et qui vous n utiliser pas ,alors tu peut le suprimmer définitifement mais
' dans tous cas vous n avez pas besoin dans les deux code au dessus
Hello Amir,
Je me permets de te reformuler mon besoin.
Je comprend donc Target.row n'est pas le bon code a utiliser ?
Au fait pour te réexpliquer, mon formulaire voici ce que j'ai déjà réussi à faire :
Lorsque je sélectionne une famille de produit dans la combobox tout en haut, une liste de produits s'affiche dans la listbox.
Lorsque je clique sur un produit (donc sur une ligne en surbrillance) dans ma listbox, les informations (de chaque colonne dans la ligne selectionnée) s'affichent alors respectivement dans les textboxs sur la droite.
J'ai également réussi à code le CommandButton "Add" qui permet d'ajouter une ligne (dernière ligne) dans ma base de données avec des informations saisies dans me textboxs.
Ce qu'il me reste à faire, c'est créer le code qui va me permettre de MODIFIER et non ajouter (chose que j'ai déjà réalisé) les informations issues de mes textboxs (et non depuis ma listbox) dans la ligne associée à ma BDD.
J'espère avoir été plus clair ?
N'hésite pas si tu as besoin de plus d'informations,
Saber
Merci pour ton aide !
bonjour
avez vous lit ma derniere message
'Option Explicit pour vous aider a declarer les variables corectement
'#----------------------------------------#
'lancer ce code par le bouton "update"
Dim Ligne As Integer
'Range("a" & (ListBox1.ListIndex + 1)).Value = ListBox1.List(ListBox1.ListIndex)
' je pense "LST_Tube" est le nom de la listbox si non changer "LST_Tube" par ....... ,vous saviez
Ligne = (LST_Tube.ListIndex + 2) ' si le premier produit qui figure sur la listbox est sur la linge 2 "A2"
'Ligne = (LST_Tube.ListIndex + 3) ' si le premier produit qui figure sur la listbox est sur la linge 3 "A3"
'Ligne = (LST_Tube.ListIndex + 4) ' si le premier produit qui figure sur la listbox est sur la linge 4 "A4"
'Ligne = (LST_Tube.ListIndex + ...) ' si le premier produit qui figure sur la listbox est sur la linge ....,,vous saviez
If MsgBox("Do you confirm the modification of this ligne ?", vbYesNo, "confirmation") = vbYes Then
Sheets("BDD").Cells(Ligne, 1) = TB_Famille.Value ' Le problème c'est que Ligne prend la valeur 0 et non la valeur de la ligne pour lequel le code "if....." devrait fonctionner
Sheets("BDD").Cells(Ligne, 2) = TB_Produit.Value
Sheets("BDD").Cells(Ligne, 3) = TB_Quantite.Value
Sheets("BDD").Cells(Ligne, 4) = TB_Prix.Value
Sheets("BDD").Cells(Ligne, 5) = TB_Ref.Value
End If
End If
End Sub
'#----------------------------------------#
'lancer ce code par le bouton "add"
Dim nb As Integer
nb = Range("A" & Rows.Count).End(xlUp).Row + 1
' nb = derniere ligne vide dans la colonne "A"
' vous pouver le changer par "B" OU "C" .... selon ton projet
' a mon avis la colonne de la fammille doit precede le nom de produit
If MsgBox("Do you want to add this product ?", vbYesNo, "confirmation") = vbYes Then
Sheets("BDD").Cells(nb, 1) = TB_Famille.Value
Sheets("BDD").Cells(nb, 2) = TB_Produit.Value
Sheets("BDD").Cells(nb, 3) = TB_Quantite.Value
Sheets("BDD").Cells(nb, 4) = TB_Prix.Value
Sheets("BDD").Cells(nb, 5) = TB_Ref.Value
End If
End If
'#----------------------------------------#
'pour "traget" si etait seulement pour nous explique ce que vous voulez faire
' et qui vous n utiliser pas ,alors tu peut le suprimmer définitifement mais
' dans tous cas vous n avez pas besoin dans les deux code au dessus
Amir,
Oui j'ai bien lu votre dernier message !
La question est plutôt, est-ce que VOUS avez compris mon besoin ?
La ligne que je veux modifier dans ma Base de données va aller chercher les informations que j'aurai renseigné dans les TEXTBOXS (à droite de ma listbox sur l'image que je vous ai fournie) et non pas les informations qui figurent dans ma Listbox !
il n'y a aucun interêt pour moi de modifier une ligne dans ma base de données, dont les valeurs qui s'affichent dans la listbox sont identiques et non modifiées.
Relis mon dernier post...
Merci
VEUT dire
1-Lorsque je clique sur un produit dans ma listbox, les informations (de chaque colonne dans la ligne selectionnée) s'affichent alors
dans les textboxs
2-MODIFIER les informations de tes textboxs
exemple vous avvez choisissez comb = f1
vous aurez : pro1, fam1, qu1 "prix222" ,ref1
mais non "prix222" c est faux je doit avoir "prix1" sur cette textbox "prix"
alors vous rectifier directemt la texbox de prix de "prix222" a "prix1"
Moi j ai compris comme ca
mai il me faut que JE le rectifier aussi sur la feuille exel "bdd"
A oui je vai appuyer sur update
allons regardez sur la feuille ……… OUI est rectifier
Amir,
J'ai du mal à te comprendre...
Quelqu'un d'autre pour aider ?
Merci quand même pour ta bonne volonté
Saber