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 :

[débutant] 1 combobox fonction d'une autre


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de anarchiste-mouton
    Homme Profil pro
    ceci
    Inscrit en
    Décembre 2017
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ceci
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2017
    Messages : 69
    Par défaut [débutant] 1 combobox fonction d'une autre
    Rebonjour (j'ai déjà posté ce matin...)

    Je souhaites remplir un combobox1 en fonction des valeurs de ma ligne 1 (ça c'est ok).
    Ensuite je souhaites, en fonction de la valeur de combobox1, remplir combobox2.
    Pour ça j'utilise "Feuil2" :

    Nom : DevLP3.PNG
Affichages : 222
Taille : 5,6 Ko

    Voici mon code au changement de combobox1 (l'erreur est en commentaire) :

    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
     
    Option Explicit
    Private Sub Combobox1_Change()
     
        Dim Dernligne, DernColo, i As Byte
        Dim Cellu As Range
        Dim Feuille As Worksheet
        Set Feuille = Sheets("Feuil2")
     
        DernColo = Feuille.Range("A1").End(xlToRight).Column
     
        For Each Cellu In Feuille.Range(Cells(1, 1), Cells(1, DernColo)) 'Erreur d'execution ici : la methode range de l'objet worksheet a échouer
     
            If Cellu.Value = MissionP.Text Then
     
                Dernligne = Feuille.Range(Cellu & Rows.Count).End(xlUp).Row
                For i = 1 To Dernligne
                    NomR.AddItem Feuille.Cells(i, Cellu.Column)
                Next i
     
                Exit Sub
            End If
        Next Cellu
     
    End Sub
    Quelqu'un aurait une idée? je ne comprends pas l'erreur, en plus DernColo vaut bien 4 juste après son execution.

  2. #2
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    bonsoir (avant de partir )
    un combo lors de linitialisation
    et l'autre lors de changement de combobox
    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
    Dim dernLigne As Long
    Private Sub ComboBox1_Change()
    Dim CodeR As String
    ComboBox2.Clear
    With Sheets("feuil1")
      CodeR = ComboBox1.Value
      Set rg = .range("A1:A" & dernLigne)
     For Each cell In rg
      If cell.Value = CodeR Then
       ComboBox2 = .range("B" & cell.Row)
       If ComboBox2.ListIndex = -1 Then ComboBox2.AddItem .range("B" & cell.Row)
      End If
      Next cell
    End With
    End Sub
     
    Private Sub UserForm_Initialize()
    dernLigne = Sheets("feuil1").range("A" & Rows.Count).End(xlUp).Row
    Dim i As Integer
    dernLigne = Sheets("feuil1").range("A" & Rows.Count).End(xlUp).Row
    For i = 2 To dernLigne
      ComboBox1 = Sheets("feuil1").range("A" & i)
      If ComboBox1.ListIndex = -1 Then ComboBox1.AddItem Sheets("feuil1").range("A" & i)
    Next i
    TextBox1.Value = ""
    ComboBox2.Value = ""
    End Sub

  3. #3
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour,

    C'est ce que l'on appelle des combobox en cascades.
    Si tu fais une recherche sur ces termes, tu auras beaucoup de ressources.

    Entre autres, cette discussion.

  4. #4
    Membre expérimenté
    Homme Profil pro
    chef de projet transverse MOE
    Inscrit en
    Janvier 2015
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : chef de projet transverse MOE
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2015
    Messages : 121
    Par défaut
    Si j'ai bien compris, la valeur selectionnée dans ta combo box 1 te permet de determiner quelle liste de la feuille2 tu vas mettre dans ta combo box 2.

    Je ne suis pas un spécialiste des range.

    Je te propose une methode qui peux fonctionner mais pas forcément être optimale:

    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
     
     
    i = 1
    while Application.Workbooks(1).Worksheets(2).Cells(1, i).Value <> myuserform1.combobox1.value and  Application.Workbooks(1).Worksheets(2).Cells(1, i).Value <> ""
    i=i+1
    wend
     
    'ici normalement tu as trouvé ta valeur, tu peux néanmoins rajouter une gestion d'erreur pour le cas ou tu es tombé sur une colonne vide, ce qui signifie que tu n'as pas trouvé ta valeur
     
    j=1
    while Application.Workbooks(1).Worksheets(2).Cells(j, i).Value <> "" 
    myuserform1.combobox2.additem Application.Workbooks(1).Worksheets(2).Cells(j, i).Value
    j=j+1
    wend
     
    'Ta combo box 2 est remplie
    C'est probablement pas beau, y'a probablement plus efficace, mais ca devrait marcher.

    Attention, il vaut mieux utiliser les vrais noms des classeurs / feuilles pour eviter des problèmes quand tu as plusieurs classeurs ouverts.

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

Discussions similaires

  1. [XL-2007] Valeur Combobox en fonction d'une autre Combobox
    Par citaro dans le forum Excel
    Réponses: 2
    Dernier message: 10/12/2015, 15h27
  2. [XL-2010] Alimenter une Combobox en fonction d'une autre
    Par Dragern dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 04/12/2015, 13h50
  3. Remplir une combobox en fonction d'une autre et d'une textbox
    Par celthi dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 19/12/2014, 17h45
  4. Réponses: 2
    Dernier message: 22/02/2013, 15h58
  5. Réponses: 9
    Dernier message: 06/01/2009, 17h48

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