VBA - recuperer une entrée de formulaire depuis un listbox click

Bonjour,

Je possede un fichier dans lequel depuis un userform j'alimente une base de données.

J'ai un second userform Filtre qui me permet de travailler sur ma base ainsi constituée....

J'obtiens alors mes résultats de filtre dans une listbox. Tout fonctionne.

Seulement, je voudrais depuis la ListBox où s'affichent mes résultats de filtre, pouvoir en cliquant sur une entée ouvrir le formulaire de saisie à la ligne qui contient les données saisies. Exemple, dans la listbox je prends l'élève 1, je voudrais en cliquant sur la ligne élève un ouvrir le formulaire de saisie et récupérer les données de l'élève1 depuis ma bade de données. Je voudrais faire ça pour quez ca fonctionne sur l'ensemble de la base, en fonction de la liste sélectionnée.

En clair : si double click sur elève 1 -> ouvre le formulaire élève et affiche l'élève 1 depuis la base de données

si double click sur élève 282 -> ouvre le formulaire élève et affiche l'élève 282 depuis la base de données

Quelqu'un(e) saurait il faire cela ?

Je joins une fichier anonymisé...

Merci

51test1.zip (270.00 Ko)

Bonjour,

Voici une idée à adapter (références et noms des objets) :

'MODULE DE LA FEUILLE CONTENANT LA LISTBOX
private sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
if me.listbox1.listindex > -1 then userform1.show
end sub

'MODULE DE L'USERFORM
private sub userform_initialize()
with activesheet.listbox1
    pos = application.match(.list(.Listindex, 0), range("BASE[Eleves]"), 0)
end with
with range("BASE")
    for k = 1 to .columns.count
        me.controls("TextBox" & k) = .cells(pos, k)
    next k
end with
end sub

sachant que ce code suppose que vous ayez autant de textbox à alimenter (et toutes nommées TextboxN) qu'il n'y a de colonnes dans votre base.

C'est ce point qu'il faudra sûrement revoir.

Cdlt,

Bonjour,

Merci pour cette solution VBa...

Bon je nage un peu beaucoup....

toutes mes textbox sont nommées T1 à Tx

je ne sais pas comment integrer votre code dans ma feuille...

où je place le code MODULE DE LA FEUILLE CONTENANT LA LISTBOX, parce que ma liste box apparaît dans un Userform nommer Filtre ?

Et vous écrivez .....range("BASE[Eleves]"), 0). Dois-je donc réécrire range("BD[Tableau1]"), 0) chez moi ?

enfin sachant que mes textbox dans mon userform Formulaire_élève sont toutes nommées T (T1, T2, T3....etc)

dois-je ou puis-je écrire me.controls("T" & k) = .cells(pos, k) ?

Je vous avouerai que le code dans mon fichier intégré m'irait mieux ! parce que sur cette partie VBA je nage un peu....🙄😮

Bonjour,

Oui, vous avez compris, c'est plus ou moins ça. BASE[Eleves] correspond à la colonne hypothétique Eleves du tableau BASE. Il faut juste remplacer BASE par le nom de votre tableau et Eleves par le nom de la colonne (du tableau en question) avec la liste des élèves, sachant que je doute qu'elle se nomme Tableau1.

Désolé, je n'ouvre pas les fichiers...

J'avais supposé que votre ListBox était directement sur une feuille Excel.

Voici le code adapté :

'MODULE USERFORM FILTRE
private sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
if me.listbox1.listindex > -1 then Formulaire_élève.show
end sub

'MODULE DE L'USERFORM Formulaire_élève
private sub userform_initialize()
with Filtre.listbox1
    pos = application.match(.list(.Listindex, 0), range("BASE[Eleves]"), 0) 'adapter plage BASE[Eleves]
end with
with range("BASE") 'adapter BASE
    for k = 1 to .columns.count
        me.controls("T" & k) = .cells(pos, k)
    next k
end with
end sub

Aussi, j'ai oublié de le préciser mais je suppose que la colonne Eleves est la première colonne de la ListBox Filtre. Le 0 de .list(.listindex, 0) signifie 1ère colonne.

Cdlt,

Merci, je vais essayer d'adapter tout cela !

Un grand merci !

Rechercher des sujets similaires à "vba recuperer entree formulaire listbox click"