Microsoft 365 Remplir une ComboBox à 3 colonnes avec les données d'un TS

NONO14

XLDnaute Impliqué
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
 

Pièces jointes

  • GestPersonnnel (3).xlsm
    492.3 KB · Affichages: 9
Solution
Hello
@ChTi160 : 7 colonnes?? pourquoi faire??

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

vgendron

XLDnaute Barbatruc
ok vu
je ne sais pas.. et ce qui m'embete c'est que tu veux utiliser un combo pour faire ce qu'on fait habituellement avec une listbox.

PS: c'est quoi cette fonction cod qui met une formule au milieu de nulle part ..en IV1600
et qui fait planter l'appli quand on quitte...
 

ChTi160

XLDnaute Barbatruc
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
jean marie
 
Dernière édition:

TooFatBoy

XLDnaute Barbatruc
Ce serait plutôt un truc de ce genre (à tester) :
Code:
Me.Cbx_Salarié.rowsource = Range("t_Nom[[ID]:[Prénom]]").address
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 :
Code:
Me.Cbx_Salarié.rowsource = "'Liste_agents'!" & Range("t_Noms[[Code agent]:[Prénom]]").address
 
Dernière édition:

TooFatBoy

XLDnaute Barbatruc
PS: c'est quoi cette fonction cod qui met une formule au milieu de nulle part ..en IV1600
et qui fait planter l'appli quand on quitte...
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.
 

NONO14

XLDnaute Impliqué
ok vu
je ne sais pas.. et ce qui m'embete c'est que tu veux utiliser un combo pour faire ce qu'on fait habituellement avec une listbox.

PS: c'est quoi cette fonction cod qui met une formule au milieu de nulle part ..en IV1600
et qui fait planter l'appli quand on quitte...
Cette fonction m'a été proposé par Staple1600 et elle permet de générer un code. Chez moi, il n'y a aucun problème
 

NONO14

XLDnaute Impliqué
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 :
Code:
Me.Cbx_Salarié.rowsource = "'Liste_agents'!" & Range("t_Noms[[Code agent]:[Prénom]]").address
Oui le TS se nomme bien "t_Noms" et les colonnes se nomment Code agent, NOM, Prénom.
 

NONO14

XLDnaute Impliqué
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
jean marie
J'ai déjà mis les propriétés column dans les propriétés de la Combo. Dois-je les supprimer ?
 

NONO14

XLDnaute Impliqué
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.
C'est certainement pour que le code généré soit hors d'atteinte d'un utilisateur, bien que cela pourrait lui être facile de le retrouver.
 

Discussions similaires

Statistiques des forums

Discussions
315 133
Messages
2 116 603
Membres
112 802
dernier inscrit
Dan Marc