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 :

Alimentation d'une Combobox


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 300
    Par défaut Alimentation d'une Combobox
    Bonjour

    Je bloque sur une chose toute simple pour certain, mais je n'arrive pas à trouver la solution.
    j'ai récupéré un code qui fonctionne mais mais il me faut changer le nom de la combobox et là c'est le drame.....lol
    voici la base du code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub UserForm_Initialize()
        'Définit la feuille contenant les données
        Set Ws = Worksheets("Contacts")
        'Définit le nombre de lignes dans la colonne A
        NbLignes = Ws.Range("A65536").End(xlUp).Row
     
        'Remplissage du ComboBox1
        Alim_Combo 1
     
    End Sub
    Je ne comprend pas le Alim_Combo 1
    Effectivement si je laisse le nom de la Combobox en Combobox1 cela fonctionne mais si je change son nom en CBB_Contact, cela ne fonctionne plus. Quelqu'un peux venir à mon aide.
    Merci d'avance.

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Lorsque l'on ajoute un classeur, une feuille de classeur, un document Word, etc. l'application donne comme nom par défaut le nom de l'objet suivi d'un numéro séquencé (Exemple Classeur1, Feuil3, Document4, etc.) et il suffit de renommer l'objet par un nom explicite.
    Et bien pour les contrôles c'est pareil.
    Tu dois donc renommer le contrôle nommé ComboBox1 par Alim_Combo. Attention pas Alim_Combo 1
    On renomme un contrôle par sa propriété Name depuis la fenêtre de propriétés de l'éditeur VBE.

    A lire Vos premiers pas dans l'éditeur de macros Excel
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 300
    Par défaut
    Merci pour ta réponse, mais quand je retourne dans l'exemple que j'ai copié et qui fonctionne la propriété Name depuis la fenêtre de propriétés de l'éditeur VBE de la combobox est "Combobox1" et non Alim_Combo ?????

    Merci

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 176
    Billets dans le blog
    53
    Par défaut
    Cela m'étonnerait très fort que ton code fonctionne. Tu as certainement un message d'erreur à la ligne 8.

    Cet exemple de code fonctionnera mieux mais n'est pas parfait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub UserForm_Initialize()
        Dim ws As Worksheet, rng As Range
        Dim NbLignes As Long
        'Définit la feuille contenant les données
        Set ws = Worksheets("Contacts")
        'Définit le nombre de lignes dans la colonne A
        NbLignes = ws.Range("A65536").End(xlUp).Row
        Set rng = ws.Range("A1:A" & NbLignes)
        'Remplissage du ComboBox1
        Alim_Combo.RowSource = rng.Address
    End Sub
    Et si le contrôle ComboBox se nomme ComboBox1 la ligne 10 doit s'écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        ComboBox1.RowSource = rng.Address
    Tu sembles recopier du code sans en comprendre le sens

    Je te conseille la lecture de ces deux tutoriels
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Membre extrêmement actif
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    1 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 1 369
    Par défaut
    Bonjour,


    Une façon simple pour alimenter un ComboBox

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Dim f
    Private Sub UserForm_Initialize()
       Set f = Sheets("bd")
       Me.ChoixNom.List = f.Range("B2:B" & f.[B65000].End(xlUp).Row).Value
       Me.ChoixNom.ListIndex = 0
    End Sub
    Boisgontier
    Fichiers attachés Fichiers attachés

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 300
    Par défaut
    Merci pour vos réponses, et comme dirais Philippe effectivement je recopie des codes mais après j'essais de les comprendre, d'ou ma question......

    Le code complet me permet de remplir des combobox en cascade : le code complet est celui çi :

    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
    Option Explicit
     
    Dim Ws As Worksheet
    Dim NbLignes As Integer
     
     
    Private Sub UserForm_Initialize()
        'Définit la feuille contenant les données
        Set Ws = Worksheets("Base")
        'Définit le nombre de lignes dans la colonne A
        NbLignes = Ws.Range("A65536").End(xlUp).Row
     
        'Remplissage du ComboBox1
        Alim_Combo 1
     
    End Sub
     
     
    Private Sub ComboBox1_Change()
        'Remplissage Combo2
        Alim_Combo 2, ComboBox1.Value
    End Sub
     
     
    Private Sub ComboBox2_Change()
        'Remplissage Combo3
        Alim_Combo 3, ComboBox2.Value
    End Sub
     
    'Procédure pour alimenter les ComboBox
    Private Sub Alim_Combo(CbxIndex As Integer, Optional Cible As Variant)
        Dim j As Integer
        Dim Obj As Control
     
        'Définit le ComboBox à remplir
        Set Obj = Me.Controls("ComboBox" & CbxIndex)
        'Supprime les anciennes données
        Obj.Clear
     
        'alimente le Combobox initial (Combobox1)
        If CbxIndex = 1 Then
            'Boucle sur les lignes de la colonne A (à partir de la 2eme ligne)
            For j = 2 To NbLignes
                Obj = Ws.Range("A" & j)
                'Remplit le ComboBox sans doublons
                If Obj.ListIndex = -1 Then Obj.AddItem Ws.Range("A" & j)
            Next j
        Else
            'Alimentation conditionnelle des autres Combobox en fonction de
            'ce qui est sélectionnée dans le contrôle précédent:
            '(La sélection du ComboBox1 définit le contenu du ComboBox2,
            'La sélection du ComboBox2 définit le contenu du ComboBox3 ?etc...)
            For j = 2 To NbLignes
                If CStr(Ws.Range("A" & j).Offset(0, CbxIndex - 2)) = Cible Then
                    Obj = Ws.Range("A" & j).Offset(0, CbxIndex - 1)
                    If Obj.ListIndex = -1 Then Obj.AddItem Ws.Range("A" & j).Offset(0, CbxIndex - 1)
                End If
            Next j
       End If
     
       'Enlève la sélection dans le ComboBox
       Obj.ListIndex = -1
    End Sub
    Donc le code me convient mais effectivement les Alim_combo me posaient problème car je ne les comprenais pas et c'est pour cela que je cherche à comprendre.

    En ce qui concerne ton code Jacques, je l'avais déja vu mais je ne savais pas comment l'adapter afin qu'il remplisse mais autres Combobox en cascade.

    Merci à vous d'avoir pris le temps de me répondre.

  7. #7
    Membre extrêmement actif
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    1 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 1 369
    Par défaut
    Combobox cascade 2 niveaux

    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
     
    Dim f, BD()
    Private Sub UserForm_Initialize()
      Set f = Sheets("base")
      BD = f.Range("A2:C" & f.[B65000].End(xlUp).Row).Value   ' Array pour rapidité
      Set d = CreateObject("Scripting.Dictionary")
      For i = 1 To UBound(BD)                                 ' on explore la colonne de niveau 1
        d(BD(i, 2)) = ""                                             ' on ajoute l'élément de la famille au dictionnaire
      Next i
      Me.Famille.List = d.keys
    End Sub
     
    Private Sub Famille_click()
      Me.SousFamille.Clear
      Set d = CreateObject("Scripting.Dictionary")
      For i = 1 To UBound(BD)           ' on explore la colonne de niveau 2
         If BD(i, 2) = Me.Famille Then d(BD(i, 3)) = "" ' si famille alors on ajoute l'élément de la sous-famille au dictionnaire
      Next i
      Me.SousFamille.List = d.keys
    End Sub
     
    Private Sub SousFamille_click()
      For i = 1 To UBound(BD)       ' on explore la colonne de niveau 1
         If BD(i, 2) = Me.Famille And BD(i, 3) = Me.SousFamille Then Me.Code = BD(i, 1) ' si famille alors on ajoute l'élément de la sous-famille au dictionnaire
      Next i
    End Sub

    Boisgontier
    Fichiers attachés Fichiers attachés

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. comment alimenter une combobox à partir d'une requete
    Par joe12260 dans le forum Windows Forms
    Réponses: 8
    Dernier message: 19/02/2009, 16h21
  2. [A-03] Comment alimenter une combobox avec plusieurs tables
    Par MichaSarah dans le forum VBA Access
    Réponses: 3
    Dernier message: 15/01/2009, 11h02
  3. Réponses: 3
    Dernier message: 16/09/2008, 17h08
  4. Alimentation d'un ComboBox via une requête paramètrée par un autre ComboBox
    Par Platinium_Phoenix dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 30/06/2008, 09h56
  5. données alimentant une combobox
    Par Taillise dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/04/2008, 09h56

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