Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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
Je vais tester demain
Merci et bonne soirée
 
Je ne suis pas certain que ceux qui utiliser l'application soient tous en 365.
Ce code me permet de créer un code agent qu'ils devront utiliser pour pointer. C'est n'est pas un mot de passe.
Pour le reste je ne peux que te donner raison. Je vais revoir tout demain.
Encore merci et bonne soirée
 
Re

@vgendron (Bonjour)

Tu n'as point mis ma méthode 😉
Voir mon précédent message dans ce fil
Exact.. je ne l'avais pas vue..
pour la première ligne..
a = ActiveSheet.ListObjects(1).DataBodyRange.Value
ca ressemble à la solution list

mais cette deuxième instruction.. je ne la comprend pas... elle fait quoi?

a = Application.Index(a, Evaluate("row(1:" & UBound(a) & ")"), Array(1, 2, 3))
 
ok.. il va falloir que je creuse ca.. parce que c'est un truc dont j'ai besoin de temps en temps .. extraire des colonnes d'un tableau..
mais ce qui me perturbe c'est que je ne vois pas comment tu extrais des colonnes en mettant l'évaluate dans le paramètre "ligne" de la fonction index..
 
Bonsoir
si l'on met(j'ai corriger plusieurs erreurs dans ces Lignes)
Il manque une colonne !
VB:
With Me.Cbx_Salarié
               .ColumnCount = 3             'Ici 3 colonnes'
               .ColumnWidths = "80;100;100" 'Ici 3 colonnes
        For I = 1 To Tbl.ListRows.Count
            .AddItem Tbl.ListRows(I).Range(2).Value & " " & Tbl.ListRows(I).Range(3).Value   '1 eme Colonne
            .List(.ListCount - 1, 1) = Tbl.ListRows(I).Range(1).Value '2 eme Colonne
            .List(.ListCount - 1, 2) = Tbl.ListRows(I).Range(2).Value '3 eme Colonne
            .List(.ListCount - 1, 3) = Tbl.ListRows(I).Range(3).Value '4 eme Colonne
        Next I
    End With
Pourquoi dans le Combobox Salarié afficher trois colonnes ?
moi j'utilise un tableau temporaire
Code:
' Vérifier si "t_Noms" existe
                If Range("t_Noms").ListObject Is Nothing Then
                     .Frm_Selection_Identite.Caption "La table 't_Noms' n'existe pas sur cette feuille.", vbExclamation
                    Exit Sub
                End If
               With Range("t_Noms").ListObject
                ' Vérifier si la table contient des données
                If Not .DataBodyRange Is Nothing Then
                           ' Trier la table par la colonne "NOM"
                    On Error Resume Next ' Éviter les erreurs si la colonne "NOM" n'existe pas
                         .Sort.SortFields.Clear
                         .Sort.SortFields.Add Key:=.ListColumns("NOM").Range, _
                                           SortOn:=xlSortOnValues, _
                                           Order:=xlAscending, _
                                           DataOption:=xlSortNormal
                    With .Sort
                           .Header = xlYes
                           .MatchCase = False
                           .Orientation = xlTopToBottom
                           .SortMethod = xlPinYin
                           .Apply
                    End With
                  End If
                  TabTemp = .DataBodyRange.Value
                  End With
            'Chargement des différents contrôles du formulaire
            'On vide la ComboBox Cbx_Salarié
Ok_Change = False
            With .Cbx_Salarié
                    .ColumnCount = 7
                    .ColumnWidths = "225;0;0;0;0;0;0" 'Une Visible               
               For Lgn = 1 To UBound(TabTemp, 1)
                    .AddItem TabTemp(Lgn, 2) & " " & TabTemp(Lgn, 3) & " " & TabTemp(Lgn, 4)
                    .List(.ListCount - 1, 1) = TabTemp(Lgn, 1) 'Code agent
                    .List(.ListCount - 1, 2) = TabTemp(Lgn, 2) 'Civilite
                    .List(.ListCount - 1, 3) = TabTemp(Lgn, 3) 'Nom
                    .List(.ListCount - 1, 4) = TabTemp(Lgn, 4) 'Prénom
                    .List(.ListCount - 1, 5) = TabTemp(Lgn, 5) 'Contrat
                    .List(.ListCount - 1, 6) = Lgn                     'Ligne Source
               Next Lgn
            End With

Jean marie
 
Dernière édition:
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 à toutes et à tous,
Juste en passant car n'étant pas en très bonne forme aujourd'hui.
Je viens de survoler vos nombreux commentaires, mais pour le moment je ne peux y répondre.
A la base, je ne souhaitais que 3 colonnes, il n'a jamais été question de 7 colonnes.
Je reviendrai vers vous dès que possible.
Toutes mes excuses et encore merci pour votre aide
 
- 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
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…