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'un combobox [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2008
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 50
    Par défaut Alimentation d'un combobox
    Bonjour à tous,

    j'aimerais alimenter un combobox2 en fonction du combobox1 sachant que le combobox2 change en fonction de chaque résultat du premier.

    le problème que je rencontre est juste en dernière partie. il ne veut pas prendre ma ligne avec derlign etc. et je ne comprend pourquoi

    Si besoin je peux aussi mettre mon fichier excel

    voilà mon code

    Merci de votre aide

    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
    Option Explicit
     
    Dim ws As Worksheet
    Dim NbLignes As Integer
    Dim derlign As Integer
     
     
    Private Sub UserForm_Initialize()
     
        'Définit la feuille contenant les données
        Set ws = Worksheets("Feuil3")
        '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
     
     
    '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 = 1 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
       End If
     
       'Enlève la sélection dans le ComboBox
       Obj.ListIndex = -1
    End Sub
     
    Private Sub ComboBox1_Change()
     
        Me.ComboBox2.Value = ""
        derlign = ws.Range(65536, Me.ComboBox1.ListIndex + 4).End(xlUp).Row
        Range(Cells(2, Me.ComboBox1.ListIndex + 4), Cells(derlign, Me.ComboBox1.ListIndex + 4)).Name = "leNom"
        Me.ComboBox2.RowSource = [lenom].Address
     
    End Sub
    Fichiers attachés Fichiers attachés

  2. #2
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut
    Salut,
    Si tu parles de cette ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    derlign = ws.Range(65536, Me.ComboBox1.ListIndex + 4).End(xlUp).Row
    C'est normal, Range est théoriquement une plage et pour une seule celulle attend une info de type "adresse" comme dans ta première ligne faisant utilisant derlign "A65536".
    Donc dans ton cas, un peu compliqué.
    C'est pourquoi il faut t'habituer à travailler avec Cells, qui attend le numéro de ligne et le numéro de colonne.
    Utilise cette ligne et ça devrait fonctionner (j'ai pas testé sur ton fichier):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    derlign = ws.cells(65536, Me.ComboBox1.ListIndex + 4).End(xlUp).Row
    A+

    P.S. Fait attention qu'en indiquant 65536, ça te limite à un fichier xls, à partir de 2007 il y a plus d'un million de lignes, tu peux rendre la définition de la dernière ligne remplie complètement dynamique en utilisant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DerLig=ws.cells(ws.columns(1).cells.count,1).end(xlup).row
    ou pour ton cas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DerLig=ws.cells(ws.columns(1).cells.count,Me.ComboBox1.ListIndex + 4
    ).end(xlup).row

  3. #3
    Membre averti
    Inscrit en
    Juillet 2008
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 50
    Par défaut
    Je te remercie de ta réponse.

    Mais j'ai encore un souci, mon combobox1 est alimenté par le feuil3 et normalement ma combobox2 aussi.
    Je ne sais pas pourquoi elle s'alimente avec ma feuil1 ce qui complétement ridicule.

    Merci

  4. #4
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut
    VBA fait ce que tu lui dit...

    Tu affecte Sheets3 à ta variable Ws, la même variable que tu utilise pour alimenter ta combo1 et 2.
    Si tes sources sont différentes, tu n'as pas le choix que de créer deux variables pour tes feuilles ou alors de modifier ta variable juste avant l'alimentation de la combo2

    En espérant avoir été clair

  5. #5
    Membre averti
    Inscrit en
    Juillet 2008
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 50
    Par défaut
    oui tu as été très clair mais moi je le configure avec feuil3 et ça ne marche pas.

    Enfin je pense que cela vient de mon code forcement mais je le triture dans tout les sens et je n'y arrive pas

  6. #6
    Membre Expert Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Par défaut
    bonjour, une idée que je ne peux vérifier mais pour remplir ta combo2 tu ne fais pais référence à une feuille précise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Range(Cells(2, Me.ComboBox1.ListIndex + 4), Cells(derlign, Me.ComboBox1.ListIndex + 4)).Name = "leNom"
        Me.ComboBox2.RowSource = [lenom].Address
    ici tu n'indique pas dans quelle feuille tu nommes ta plage.
    en mettant ws.range etc.... tu indiqueras dans quelle feuille tu veux travailler :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ws.Range(Cells(2, Me.ComboBox1.ListIndex + 4), Cells(derlign, Me.ComboBox1.ListIndex + 4)).Name = "leNom"
        Me.ComboBox2.RowSource = [lenom].Address

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

Discussions similaires

  1. [XL-2007] Alimentation de la ComboBox d'un UserForm à partir d'une plage de donnée
    Par Loukassit0 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/02/2012, 18h22
  2. Alimenter une ListBox/ComboBox depuis un fichier
    Par AlexTaz dans le forum Débuter
    Réponses: 4
    Dernier message: 03/06/2009, 10h39
  3. C# alimentation d'un combobox
    Par opeo dans le forum Windows Forms
    Réponses: 2
    Dernier message: 09/01/2009, 08h51
  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. [VBA-E] Combobox alimenté que de samedi
    Par Aazouf dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 01/05/2006, 21h17

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