IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Remplir une combobox d'un Userform word avec une BDD Excel


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Juin 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2021
    Messages : 3
    Par défaut Remplir une combobox d'un Userform word avec une BDD Excel
    Bonjour!!!

    J'aurais besoin de votre pour des ComboBox dépendante dynamique dans un Userform Word liée à un BDD Excel (+ de 25 items).

    J'ai une Base de Donnée Excel
    Chaque feuille est répertoriée dans ma Combobox 1

    ComboBox1 :
    Feuil1 nommé -> Cat 1
    Feuil2 nommé -> Cat 2
    Feuil3 nommé -> Cat 3 etc ...

    Voila mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Private Sub Userform_initialize()
    'Déclaration des variables pour ouvrir Excel
    'Application Excel
    Dim appExcel As New Excel.Application
    'Classeur Excel
    Dim wbExcel As Excel.Workbook
    'Feuille Excel
    Dim wsExcel As Excel.Worksheet
    'Ouverture de l'application
    'Ouverture d'un fichier Excel
    Set wbExcel = appExcel.Workbooks.Open("C:\Users\stephanie.rigotti\Desktop\HABILITIS\BDD_COURRIERS-ADMINISTRATIFS V2.xlsx")
    appExcel.Visible = True
    'Choix du nom de l'enfant
    Dim sh As Worksheet
    For Each sh In ActiveWorkbook.Sheets
    UserForm1.ComboBox1.AddItem sh.Name
    Next
    appExcel.Workbooks("BDD_COURRIERS-ADMINISTRATIFS V2.xlsx").Close
    appExcel.Quit
     
    End Sub
    et là c'est le drame...

    J'aimerais que dans ma ComboBox2 s'affiche les sous catégorie (colonne A) correspondant à la ComboBox1 l'item (soit à la feuille sélectionné)
    Soit

    ComBoBox1 ComboBox2
    Cat1 Cat1.a
    Cat1.b
    Cat2 Cat2.1
    Cat2.2
    Cat2.3
    Cat2.4 etc...

    Ensuite je voudrais sur la même base récupérer les descriptifs se trouvant dans la colonne B de chaque catégorie dans la textbox1
    Soit :

    ComBoBox1 ComboBox2 TextBox1
    Cat1 Cat1.a jvslkfbkl sdkvjsd vklsd v skdl vskl
    Cat1.b dvbjsdklfbsf sdkv svsldv s vlsk vs
    Cat2 Cat2.1 dfvsfsg fbebrg ergergegbn rtheheg
    Cat2.2 fgsfgsg gzgzgzgg bgzegb z rzvss
    Cat2.3 fjzsdf z vhzljv zv svsj v vz v
    Cat2.4 etc... sdvnkdjn zklv zkjv zsv sld

    Je n'arrive pas à comprendre comment récupérer les données de la ligne en fonction du choix de la comboBox1....

    S'il vous plaît, aidez moi, j'en rêve la nuit...

    Je vous remercie par avance

  2. #2
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 432
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 432
    Par défaut
    Bonjour,

    Un exemple en attaché qui devrait vous permettre de trouver comment faire et choisir entre liste déroulante (ComboBox), liste simple (ListBox) et liste vue (ListView). Il y a des avantages et inconvénients pour chacun.

    Le code du formulaire pour ceux qui ne veulent pas tout enregistrer.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    Option Explicit
     
    Dim appExcel As New Excel.Application
    Dim wBk As Excel.Workbook
    Dim wSh As Excel.Worksheet
    Dim rng As Excel.Range
     
    '--- adapté de
    '--- https://stackoverflow.com/questions/47528558/vba-excel-populate-listbox-with-multiple-columns
     
    Private Sub ComboBox1_Change()
        Dim k As Long, LastRow As Long, rngArray, lItem As ListItem
        Set wSh = wBk.Worksheets(Me.ComboBox1.Value)
        LastRow = wSh.Range("A" & Rows.Count).End(xlUp).Row
        Set rng = wSh.Range("A1:B" & LastRow)
        rngArray = rng
        With Me.ListBox1
            .Clear
            .List = rngArray
            .TopIndex = 0
        End With
        With Me.ComboBox2
            .Clear
            .List = rngArray
            .ListIndex = 0
        End With
        With Me.ListView1
            .ListItems.Clear
            .Gridlines = True
            .HideColumnHeaders = False
            .LabelWrap = True
            .FullRowSelect = True
            .HideSelection = False
            With .ColumnHeaders     'Définit nombre de colonnes et Entêtes
                .Clear              'Supprime les anciens entêtes
                'Ajoute 2 colonnes et spécifie noms entêtes et largeur des colonnes
                .Add , , "Cat.", 20
                .Add , , "Descr.", 180
            End With
            .View = lvwReport
            For k = 1 To LastRow
                Set lItem = .ListItems.Add(Text:=rng(k, 1).Value)
                lItem.ListSubItems.Add Text:=rng(k, 2).Value
            Next k
        End With
    End Sub
     
    Private Sub ComboBox2_Change()
        Me.ListBox1.ListIndex = Me.ComboBox2.ListIndex
        On Error Resume Next    '--- erreur à l'initialisation
        Me.ListView1.ListItems(Me.ComboBox2.ListIndex + 1).Selected = True
    End Sub
     
    Private Sub ListBox1_Click()
        Me.ComboBox2.ListIndex = Me.ListBox1.ListIndex
        Me.TextBox1.Text = Me.ListBox1.List(Me.ListBox1.ListIndex, 1)
    End Sub
     
    Private Sub ListView1_Click()
        Me.TextBox2.Text = Me.ListView1.SelectedItem & vbLf & Me.ListView1.SelectedItem.SubItems(1)
        Me.ComboBox2.ListIndex = Me.ListView1.SelectedItem.Index - 1
    End Sub
     
    Private Sub Userform_initialize()
        Set wBk = appExcel.Workbooks.Open(ActiveDocument.Path & "\Catg.xlsx")
        appExcel.Visible = False
        For Each wSh In wBk.Sheets
            Me.ComboBox1.AddItem wSh.Name
        Next
        Me.ComboBox1.ListIndex = 0
    End Sub
     
    Private Sub UserForm_Terminate()
        wBk.Close
        appExcel.Quit
        Set wSh = Nothing
        Set wBk = Nothing
        Set appExcel = Nothing
    End Sub
    Les 2 fichiers, .docm et .xlsx, doivent se trouver dans le même dossier.

    Cordialement.
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. Remplir DataGridViews/Comboboxs avec une BDD Excel (et vice-versa)
    Par Masamunai dans le forum Windows Forms
    Réponses: 2
    Dernier message: 07/11/2010, 10h44
  2. [WD-2007] Publipostage word avec condition (bdd excel)
    Par zazz74 dans le forum Word
    Réponses: 1
    Dernier message: 30/06/2009, 20h09
  3. Remplir une cellule Excel avec une condition sous vb
    Par enibris dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 14/01/2008, 13h47
  4. Réponses: 1
    Dernier message: 28/11/2007, 09h31
  5. remplir une cellule excel a partir d'un combobox en userform
    Par rocofolie dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/09/2007, 15h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo