XL 2019 appel formulaire depuis ListBox contenue dans un userform

youpi457032

XLDnaute Occasionnel
bonjour,
Je voudrais appeler un formulaire (Formulaire_élève) et les données qu'il doit contenir, depuis une listBox (Résultat_Filtre) qui contient des entrées en ligne...
L'idée de base serait la suivant :
Ma listbox m'affiche des résultats élèves... élève1 à élèveX....
si je double click sur elève 1 dans cette listBox (Résultat_filtre) alors ouvrir Formulaire_élève et afficher les données de l'élève1.
si je double click sur élève 200 dans cette ListBox (Résultat_filtre) alors ouvrir Formulaire élève et afficher les données de l'élève 200
etc....
Ma base de données qui contient les données est nommée BD. Les données appelées dans le formulaire elèves importent depuis colonne A à colonne BO, ligne après ligne
toutes mes textbox du formulaire élève sont nommés T1, T2, T3....etc..... (T1 appelle colonne A, T2 appelle colonne B, etc....)
voici mon code que j'ai écris... mais rien ne se passe
[CODE\] :
'MODULE USERFORM FILTRE
private sub Résultat_Filtre_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
if me.Résultat_filtre.listindex > -1 then Formulaire_élève.show
End sub
'MODULE DE L'USERFORM Formulaire_élève
private sub formulaire_élève_initialize()
with Filtre.Résultat_filtre
pos = application.match(.list(.Listindex, 0), range("BD[A2:BO]"), 0) ' le 0 du listindex correspond à colonne A
end with
with range("BD")
for k = 1 to .columns.count
me.controls("T" & k) = .cells(pos, k)
next k
end with
end sub
[CODE/]:
Je joins un fichier test anonymisé....
Si quelqu'un peut m'aider à faire fonctionner tout cela ...;
Merci
 

Pièces jointes

  • test1.xlsm
    660.8 KB · Affichages: 10
C

Compte Supprimé 979

Guest
Bonjour Youpi457032

C'est quoi cette référence 🤔
1638532129720.png


A+
 

Dranreb

XLDnaute Barbatruc
Si quelqu'un peut m'aider à faire fonctionner tout cela ...;
Point de salut sans commencer avant toute chose par remplacer tout ces TNuméroDépourvuDeLogique en des noms mnémonique clairs commençant par TBx, quitte à les terminer par un numéro de 1 à 8 s'ils correspondent à des colonnes aussi ainsi numérotées, TBxSiteCours1 à TBxSiteCours8 par exemple, et à spécifier les intitulés de colonnes en guise de spécifications de colonnes aux CA.Add afin de garantir la correspondance de ces TextBox avec les ListColumn du tableau. Une simplification préalable des titres avec des abréviations ne serait pas de trop: on sait que c'est un tableau d'élèves, alors ça n'apporte rien d'ajouter …de l'élève derrière Nom et Prénom.
Si de plus il était déclaré … WithEvents CA As ControlsAssociés, … une assez probable simplification pourrait s'en suivre du fait que ça ouvrirait la porte à une possible Private Sub CA_Change(ByVal CAM As CLsCAs.CAsso), surtout si un code Mode:=, récupérable comme CAM.Mode était spécifié aux Add pour orienter le traitement à y mettre. Le numéro de colonne dans TVL, lui, est connu comme CAM.Col
 
Dernière édition:

youpi457032

XLDnaute Occasionnel
Point de salut sans commencer avant toute chose par remplacer tout ces TNuméroDépourvuDeLogique en des noms mnémonique clairs commençant par TBx, quitte à les terminer par un numéro de 1 à 8 s'ils correspondent à des colonnes aussi ainsi numérotées, TBxSiteCours1 à TBxSiteCours8 par exemple, et à spécifier les intitulés de colonnes en guise de spécifications de colonnes aux CA.Add afin de garantir la correspondance de ces TextBox avec les ListColumn du tableau. Une simplification préalable des titres avec des abréviations ne serait pas de trop: on sait que c'est un tableau d'élèves, alors ça n'apporte rien d'ajouter …de l'élève derrière Nom et Prénom.
Si de plus il était déclaré … WithEvents CA As ControlsAssociés, … une assez probable simplification pourrait s'en suivre du fait que ça ouvrirait la porte à une possible Private Sub CA_Change(ByVal CAM As CLsCAs.CAsso), surtout si un code Mode:=, récupérable comme CAM.Mode était spécifié aux Add pour orienter le traitement à y mettre. Le numéro de colonne dans TVL, lui, est connu comme CAM.Col
Bonjour à tous !
Merci de vous pencher en nombre sur mon fichier !
Ca fait plaisir !!
Du coup pour vous il faudrait que je renomme tous mes contrôles CA.add...
du style passer de T1 à TxtBDNom.... TxtBDprénom....
C'est bien cela ? 😏😥....du boulot en perspective alors.... ert mettre en colonne les mêmes intitulés..
quelle serait alors la racine TxtBD ? .... pour me permettre d'appeler me.controls("T" & k) = .cells(pos, k)
Qu'est-ce qui pourrait me permettre à la place du "T" d'appeler tous mes contrôles txtbox de mon formulaire ??
 

Dranreb

XLDnaute Barbatruc
Préférez ma règle simple pour les trigrammes préfixes de types d'objets :
Lorsqu'un nom de type comporte plusieurs majuscules, il prend la 1ère majuscule, la dernière majuscule et la dernière lettre.
Exemples: CBn pour CommandButton, CBx pour ComboBox, TBx pour TextBox
Lorsqu'il n'y en a qu'une il prend dans l'ordre 3 lettres du début sauf les "a".
Exemples: Frm pour Frame, Img pour Image, Rng pour Range
J'ai cependant 9 exceptions: Cht pour Chart, Ckx pour CheckBox, Cln pour Collection, Ctr ou Ctl pour Control, Fle pour File, Fdr pour Folder, Lab pour Label, Wbk pour Workbook et Wsh pour Worksheet.
La pluspart des traitement que vous faites au changement auraient intérêt à être faits dans une Private Sub CA_Change en passant par le TVL. Vous pouvez obtenir un numéro de colonne soit par CA.Items(TBxSiteCours1).Col soit par CA.Colonnes("Site cours 1").Index
 
Dernière édition:

youpi457032

XLDnaute Occasionnel
Préférez ma règle simple pour les trigrammes préfixes de types d'objets :
Lorsqu'un nom de type comporte plusieurs majuscules, il prend la 1ère majuscule, la dernière majuscule et la dernière lettre.
Exemples: CBn pour CommandButton, CBx pour ComboBox, TBx pour TextBox
Lorsqu'il n'y en a qu'une il prend dans l'ordre 3 lettres du début sauf les "a".
Exemples: Frm pour Frame, Img pour Image, Rng pour Range
J'ai cependant 9 exceptions: Cht pour Chart, Ckx pour CheckBox, Cln pour Collection, Ctr ou Ctl pour Control, Fle pour File, Fdr pour Folder, Lab pour Label, Wbk pour Workbook et Wsh pour Worksheet.
Re, ....
je vais renommer tous mes contrôles comme indiqué... et du coup reprendre toute ma programmation
... je me posais une question dans mon code que je vais ai soumis...
Est-ce que je devrais nommer les colonnes de ma base en nom tableau
celles (les colonnes qui contiennent les données de champ de formulaire ) style nom du tableau : FORMELEVE
afin d'appeler mon Range comme cela : pos = application.match(.list(.Listindex, 0), range("BD[FORMELEVE]"), 0)
 

Dranreb

XLDnaute Barbatruc
Non, court et clair ça suffit. Dans l'UserForm vous n'avez pas besoin d'accéder aux plages, voir mon édition du poste précédent. Les objets ComboBoxLiées et ContrôlesAssociés connaissent les numéros de colonnes auxquels correspondent les contrôles qu'on leur a confiés, et sont capables de vous le redonner.
 

youpi457032

XLDnaute Occasionnel
je suis en train de renommer toutes mes Txtbox... passant de T1 à TXtNom)....etc, pour tous les champs..;
de fait je me retrouve avec un problème pour mes control
For i = 14 To 19 'contrôle références cours
Controls("T" & i).List = Feuil3.Range("A2:A" & Feuil3.Range("A" & Rows.Count).End(3).Row).Value
Next i
dois-je récrire Controls"TXt" & i ????? pour tous les controls ??
 

Dranreb

XLDnaute Barbatruc
Et bien indiquez simplement pour le 1er: CBxSonDébut1.List = Feul3.Range etc…
et pour les suivant: For N = 2 to 6: Me("CBxSonDébut" & N).List = CBxSonDébut1.List: Next N
Vous pouvez aussi faire des boucles pour les CA.Add, vous savez, si ça s'y prête bien sûr.
Pour absolument tous les Controls vous avez les méthodes ValeursDepuis TVL et ValeursVers TVL.
 
Dernière édition:

youpi457032

XLDnaute Occasionnel
Et bien indiquez simplement pour le 1er: CBxSonDébut1.List = Feul3.Range etc…
et pour les suivant: For N = 2 to 6: Me("CBxSonDébut" & N).List = CBxSonDébut1.List: Next N
je ne comprends pas....😥😥😥😥
[CODE\]

Private Sub userform_initialize()
Set CL = CLsCAs.Création.ComboBoxLiées
Set CA = CLsCAs.Création.ControlsAssociés
CL.Plage Feuil1
Set CA.Colonnes = CL.Colonnes
CL.Add Me.CBxNom, "Nom de l'élève"
CL.Add Me.CBxPrénom, "Prénom de l'élève"
CA.Add Me.Txtdtenaiss, 3 'date de naissance
CA.Add Me.TXtadresse, 4 'adresse postale
CA.Add Me.TXtCP, 5 'code postal
CA.Add Me.TXtville, 6 'ville
CA.Add Me.TXtmailélève, 7 'mail élève
CA.Add Me.TXtmailresp1, 8 'mail responable 1
CA.Add Me.TXtmailresp2, 9 'mail responsable2
CA.Add Me.TXttelélève, 10 'tel élève
CA.Add Me.TXttelresp1, 11 'tel responsable1
CA.Add Me.TXttelresp2, 12 'tel responsable 2
CA.Add Me.TXtcours1, 13 'premier cours
CA.Add Me.TXtcours2, 14 'second cours
CA.Add Me.TXtcours3, 15 'troisième cours
CA.Add Me.TXtcours4, 16 'quatrième cours
CA.Add Me.TXtcours5, 17 'cinquième cours
CA.Add Me.TXtcours6, 18 'sixième cours
CA.Add Me.TXtevnt1, 25 'évènement1
CA.Add Me.TXtevnt2, 26 'évènement2
CA.Add Me.TXtevnt3, 27 'évènement3
CA.Add Me.TXtevnt4, 28 'évènement4
CA.Add Me.TXtevnt5, 29 'évènement5
CA.Add Me.TXtevnt6, 30 'évènement6
CA.Add Me.TXtrglt1, 31 'règlement1
CA.Add Me.TXtrglt2, 32 'règlement2
CA.Add Me.TXtrglt3, 33 'règlement3
CA.Add Me.TXtrglt4, 34 'règlement4
CA.Add Me.TXtrglt5, 35 'règlement5
CA.Add Me.TXtrglt6, 36 'règlement6
CA.Add Me.TXtrglt7, 37 'règlement7
CA.Add Me.Txtrglt8, 38 'règlement8
CA.Add Me.Txtrglt9, 39 'règlement9
CA.Add Me.TXtMod1, 40 'mode_reglement_1
CA.Add Me.TXtMod2, 41 'mode_reglement_2
CA.Add Me.TXtMod3, 42 'mode_reglement_3
CA.Add Me.TxtMod4, 43 'mode_reglement_4
CA.Add Me.TXtMod5, 44 'mode_reglement_5
CA.Add Me.TxtMod6, 45 'mode_reglement_6
CA.Add Me.TXtMod7, 46 'mode_reglement_7
CA.Add Me.TXtMod8, 47 'mode_reglement_8
CA.Add Me.TXtMod9, 48 'mode_reglement_9
CA.Add Me.TXtinscription, 49 'frais_inscription
CA.Add Me.TXtModinscri, 50 'mode_reglement_inscription
CA.Add Me.TXtlicence, 51 'licence_FDD
CA.Add Me.TXtprixlic, 52 'frais_licence_FDD
CA.Add Me.TXtModlic, 53 'mode_reglement_licence_FFD
CA.Add Me.TXttcéveil, 54 'total_cours_éveil
CA.Add Me.Txttcenf, 55 'total_cours_enfant
CA.Add Me.Txttcadu, 56 'total_cours_adulte
CA.Add Me.Txttcenf, 57 'total_cours_mensuel
CA.Add Me.TXttcems, 58 'total_EMS
CA.Add Me.TXtpercu, 59 'déjà_perçu
CA.Add Me.TXtdû, 60 'à_percevoir
CA.Add Me.TXtsolde, 61 'solde
CA.Add Me.TXtCm, 62 'certificat_médical_OUI/NON
CA.Add Me.TXtDateCm, 63 'date_certificat_médical
CA.Add Me.TXtimage, 64 'droit_image_OUI/NON
CA.Add Me.photo, 65 '"lien_photo"
CA.Add Me.Statut_CM, 66
CA.Add Me.TXt100, 67 ' ici je mettrai un nom.... le moment venu (oublié a quoi ca corrrespond...)
' Ajout ici les CA.Add pour tous les autres contrôles
CL.CouleurSympa
CL.Actualiser
Dim i&

T48.List = Feuil3.Range("N2:N" & Feuil3.Range("N" & Rows.Count).End(3).Row).Value
T57.List = Feuil3.Range("F2:F" & Feuil3.Range("F" & Rows.Count).End(3).Row).Value
T59.List = Feuil3.Range("G2:G" & Feuil3.Range("G" & Rows.Count).End(3).Row).Value
T100.List = Feuil3.Range("Q2:Q" & Feuil3.Range("Q" & Rows.Count).End(3).Row).Value
For i = 14 To 19 'contrôle références cours
Controls("T" & i).List = Feuil3.Range("A2:A" & Feuil3.Range("A" & Rows.Count).End(3).Row).Value
Next i
For i = 35 To 43 'contrôle référence mode reglement
Controls("T" & i).List = Feuil3.Range("N2:N" & Feuil3.Range("N" & Rows.Count).End(3).Row).Value
Next i
For i = 20 To 25 'contrôle références cours
Controls("T" & i).List = Feuil3.Range("M2:M" & Feuil3.Range("M" & Rows.Count).End(3).Row).Value
Next i

End sub
 

Dranreb

XLDnaute Barbatruc
Utilisez TBx pour les TextBox, et CBx pour les ComboBox, avec une suite mnémonique commençant par une majuscule, s'il vous plait, et plus de numéros de colonnes mais leurs intitulés.
VB:
CBxCours1.List = Feuil3.[A2].Resize(Feuil3.[A1000000].End(xlUp).Row - 1).Value
For N = 2 to 6: Me("CBxCours" & N).List = CBxCours1.List: Next N
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
315 098
Messages
2 116 189
Membres
112 679
dernier inscrit
Yupanki