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

TooFatBoy

XLDnaute Barbatruc
Bonjour,

Regarde si ceci peut te mettre sur la voie :

Ou peut-être ceci, qui est plus précis :
 
Dernière édition:

NONO14

XLDnaute Impliqué
Voilà j'ai fais ça et ça fonctionne
VB:
Private Sub UserForm_Initialize()
Dim Ws As Worksheet
Dim Tbl As ListObject
Dim I As Integer
Application.ScreenUpdating = False

'On définie la feuille de calcul
   Set Ws = Sheets("Liste_agents")
'On définie le tableau
    Set Tbl = Ws.ListObjects("t_Noms")

'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 Me.Cbx_Salarié
        For I = 1 To Tbl.ListRows.Count
            .AddItem Tbl.ListColumns(1).DataBodyRange(I, 1).Value
            .List(.ListCount - 1, 1) = Tbl.ListColumns(2).DataBodyRange(I, 1).Value
            .List(.ListCount - 1, 2) = Tbl.ListColumns(3).DataBodyRange(I, 1).Value
        Next I
    End With
 

TooFatBoy

XLDnaute Barbatruc
Voilà j'ai fais ça et ça fonctionne
👍👍👍

Et ça ne marche pas avec la RowSource comme dans mon deuxième lien ?


ps : il est inutile de commencer ta macro par Application.ScreenUpdating = False si ta macro n'écrit pas dans une feuille.



Quelqu'un a-t-il remarqué un problème d'affichage des messages au niveau du forum ???
Quand j'ai lu la question il n'y avait aucune réponse affichée donc j'ai posté mon premier message mais en réalité il y avait déjà deux réponses, qui ne sont apparues qu'après l'envoi de ma réponse.
 
Dernière édition:

NONO14

XLDnaute Impliqué
👍👍👍

Et ça ne marche pas avec la RowSource comme dans mon deuxième lien ?


ps : il est inutile de commencer ta macro par Application.ScreenUpdating = False si ta macro n'écrit pas dans une feuille.



Quelqu'un a-t-il remarqué un problème d'affichage des messages au niveau du forum ???
Quand j'ai lu la question il n'y avait aucune réponse affichée donc j'ai posté mon premier message mais en réalité il y avait déjà deux réponses, qui ne sont apparues qu'après l'envoi de ma réponse.
Oui ça m'arrive souvent
 

NONO14

XLDnaute Impliqué
Bonjour,

Regarde si ceci peut te mettre sur la voie :

Ou peut-être ceci, qui est plus précis :
Je n'ai pas encore testé vos propositions
 

vgendron

XLDnaute Barbatruc
Sheets.name => C'est le nom que tu donnes à ton onglet dans le classeur Excel
CodeName==> C'est le nom de la feuille dans le projet VBA: regarde dans l'explorateur vba de ton projet (à gauche): tu as "Sheets1(nomdelafeuille)"
l'avantage du codename, c'est qu'il ne change pas meme si tu changes le nom de ton onglet==> les macro vba n"ont donc pas besoin d'être modifiées

l'inconvénient.. c'est que Sheet1, sheet2... bah.. c'est pas du tout explicite...
 

NONO14

XLDnaute Impliqué
Sheets.name => C'est le nom que tu donnes à ton onglet dans le classeur Excel
CodeName==> C'est le nom de la feuille dans le projet VBA: regarde dans l'explorateur vba de ton projet (à gauche): tu as "Sheets1(nomdelafeuille)"
l'avantage du codename, c'est qu'il ne change pas meme si tu changes le nom de ton onglet==> les macro vba n"ont donc pas besoin d'être modifiées

l'inconvénient.. c'est que Sheet1, sheet2... bah.. c'est pas du tout explicite...
Merci pour ces explications. L'avantage du code de Valtrase c'est qu'il est très court par rapport au mien.
 

Discussions similaires

Statistiques des forums

Discussions
315 087
Messages
2 116 083
Membres
112 654
dernier inscrit
SADIKA