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

NONO14

XLDnaute Occasionnel
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

NONO14

XLDnaute Occasionnel
Je vais tester demain
Merci et bonne soirée
 

NONO14

XLDnaute Occasionnel
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
 

vgendron

XLDnaute Barbatruc
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))
 

vgendron

XLDnaute Barbatruc
Re

@vgendron
Elle "choisit" les colonnes 1,2 et 3 de mon TS qui en avait 5

L'avantage c'est qu'on peut choisir des colonnes contiguës et/ou discontigues et le tout sans boucle

PS: c'était histoire de varier les plaisirs syntaxiques
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..
 

ChTi160

XLDnaute Barbatruc
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:

vgendron

XLDnaute Barbatruc
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
 

NONO14

XLDnaute Occasionnel
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
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…