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

  • Initiateur de la discussion Initiateur de la discussion NONO14
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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
Bonjour,

Regarde si ceci peut te mettre sur la voie :

Ou peut-être ceci, qui est plus précis :
 
Dernière édition:
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
 
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:
👍👍👍

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
 
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
 
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...
 
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.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
2
Affichages
1 K
Réponses
8
Affichages
894
Retour