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 suffit que faire une copie anonymisée de 50/60 lignes de données

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éé :

testpng

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

ALOR

Ligne = Target.Row soit prend toujours la valeur =0 ou nulle "" ou appele une bug

SVP ajouter :

Option Explicit

Au dessu de tous les codes dans chaque modue

puis declarer "Target"

pour la photo

cest pour changer quelques options

render la declaration des variable obligatoire

et1

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.

testpng

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

Rechercher des sujets similaires à "ajouter modifier valeurs bdd partir listbox"