Bonjour à toutes et à tous,
Voilà, j'ai une Combo ("Cbx_Salarié") dans un formulaire (UfGestTemps) et je souhaiterai l'alimenter avec les 3 premières colonnes d'un TS ("t_Noms") qui se trouve dans la feuille "Liste_agents". J'ai réussi à mettre la 1ère colonne, mais je n'arrive pas à insérer les 2 autres. La colonne 1 est le code de l'agent, la colonne 2 le NOM et la colonne 3 le Prénom.
Pouvez-vous m'aider s'il vous plaît ?
Voici le début du code et mon fichier
VB:
Private Sub UserForm_Initialize()
Application.ScreenUpdating = False
'Chargement des différents contrôles du formulaire
'On vide la ComboBox Cbx_Salarié
Me.Cbx_Salarié.Clear
'On la remplie à nouveau avec le TS "t_Noms" de la feuille "Liste_agents"
With Sheets("Liste_agents").ListObjects("t_Noms")
For I = 1 To .ListRows.Count
Me.Cbx_Salarié.AddItem .DataBodyRange(I, 1)
Next I
End With
tout ca me parait bien compliqué pour pas grand chose
un combo avec UNE colonne (utilisation originelle d'un combo==> sinon, on utilise un listbox)
VB:
'On vide la ComboBox Cbx_Salarié
Me.Cbx_Salarié.Clear
'On la remplie à nouveau avec le TS "t_Noms" de la feuille "Liste_agents"
With Me.Cbx_Salarié
.ColumnCount = 1
For I = 1 To Tbl.ListRows.Count
.AddItem Tbl.DataBodyRange(I, 2).Value & " " & Tbl.DataBodyRange(I, 3).Value & " " & Tbl.DataBodyRange(I, 1).Value 'on concatène les colonnes
Next I
End With
Reste mon problème d'affichage après un clic sur une ligne de la liste de la Combo. Ce n'est pas très important car le reste se fera à partir du code de l'agent, c'est juste pour être certain d'être sur le bon agent lors de la saisie.
je ne saisis pas bien ton problème
quand tu cliques (selectionnes) une ligne dans le combo.. à moins de faire un code sur l'évènement _click, je ne vois pas pourquoi le contenu changerait..?
Re
ce que j'ai modifié !(et qui pourrait être amélioré)
VB:
'On la remplie à nouveau avec le TS "t_Noms" de la feuille "Liste_agents"
With Me.Cbx_Salarié
.ColumnCount = 5
.ColumnWidths = "1;0;0;0;0"
For I = 1 To Tbl.ListRows.Count
.AddItem Tbl.ListColumns(1).DataBodyRange(I, 2).Value & " " & _ Tbl.ListColumns(1).DataBodyRange(I, 2).Value
.List(.ListCount - 1, 1) = Tbl.ListColumns(1).DataBodyRange(I, 1).Value
.List(.ListCount - 1, 2) = Tbl.ListColumns(2).DataBodyRange(I, 2).Value
.List(.ListCount - 1, 3) = Tbl.ListColumns(3).DataBodyRange(I, 3).Value
.List(.ListCount - 1, 4) = Tbl.ListColumns(4).DataBodyRange(I, 4).Value
Next I
End With
Ne pouvant ouvrir ton fichier jusqu'à maintenant, je m'étais basé sur la réponse #3 de Valtrase.
Mais maintenant que j'ai pu ouvrir ton fichier, je vois qu'il ne comporte pas de TS nommé "t_Nom", en revanche il y a un TS nommé "t_Noms".
Et ce TS n'a pas de colonne nommée "ID" mais "Code agent".
Donc, si javais pu ouvrir ton fichier dès le départ, ma proposition aurait été de remplacer ta boucle For ... Next par ceci :
Ah, c'est ça qui plante Excel !?! Je me demandais d'où ça venait.
Cette fonction existait déjà dans la version précédente du classeur mais ne faisait pas planter Excel.
Ceci dit, quelle idée d'aller écrire en IV1600... pourquoi pas IV65536...
En bon Alsacien je dirai que c'est sûrement à cause du 1600 qu'Excel n'est pas staple.
Ne pouvant ouvrir ton fichier jusqu'à maintenant, je m'étais basé sur la réponse #3 de Valtrase.
Mais maintenant que j'ai pu ouvrir ton fichier, je vois qu'il ne comporte pas de TS nommé "t_Nom", en revanche il y a un TS nommé "t_Noms".
Et ce TS n'a pas de colonne nommée "ID" mais "Code agent".
Donc, si javais pu ouvrir ton fichier dès le départ, ma proposition aurait été de remplacer ta boucle For ... Next par ceci :
Re
ce que j'ai modifié !(et qui pourrait être amélioré)
VB:
'On la remplie à nouveau avec le TS "t_Noms" de la feuille "Liste_agents"
With Me.Cbx_Salarié
.ColumnCount = 5
.ColumnWidths = "1;0;0;0;0"
For I = 1 To Tbl.ListRows.Count
.AddItem Tbl.ListColumns(1).DataBodyRange(I, 2).Value & " " & _ Tbl.ListColumns(1).DataBodyRange(I, 2).Value
.List(.ListCount - 1, 1) = Tbl.ListColumns(1).DataBodyRange(I, 1).Value
.List(.ListCount - 1, 2) = Tbl.ListColumns(2).DataBodyRange(I, 2).Value
.List(.ListCount - 1, 3) = Tbl.ListColumns(3).DataBodyRange(I, 3).Value
.List(.ListCount - 1, 4) = Tbl.ListColumns(4).DataBodyRange(I, 4).Value
Next I
End With
Ah, c'est ça qui plante Excel !?! Je me demandais d'où ça venait.
Cette fonction existait déjà dans la version précédente du classeur mais ne faisait pas planter Excel.
Ceci dit, quelle idée d'aller écrire en IV1600... pourquoi pas IV65536...
En bon Alsacien je dirai que c'est sûrement à cause du 1600 qu'Excel n'est pas staple.
Re
Tu peux , mais c'est pas indispensable , la macro fait le travail! ( Ne pas définir la propriété "RowSource" du Combobox ! Sinon erreur.)
Jean marie