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 :

Poblèmes Combobox en cascade et listbox [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    comptable
    Inscrit en
    Mars 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : comptable
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2017
    Messages : 22
    Par défaut Poblèmes Combobox en cascade et listbox
    bonjour,

    J'ouvre une nouvelle discussion concernant les ComboBox en cascade et une ListBox de résultat dans un USERFORM

    Car étant assez novice en vba, j'ai consulter les tutos de SilkyRoad et les différentes discussions je n'arrive toujours pas à avancer.

    Pour pouvoir avancer pas à pas, MON FICHIER ET uSERfORM SE PR2SENTE COMME CE6CI/

    onglet source: shtDb (matrice)
    onglet pour le bouton d'accès au UserForm: shtConsult (RECHERCHE)
    données du combobox1: concerne la colonne D
    données du combobox2: concerne la colonne E
    données du combobox3: concerne la colonne F
    données à afficher dans la Listbox1: concerne la colonne C (liens hypertexte que je veux rendre actif par la suite avec un ListBox1_Click)


    ci-dessous mon code complet de l'USERFORM:
    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
    Option Explicit
    Dim f, a()
     
    Private Sub UserForm_Initialize()
      Set f = Sheets("matrice")
      Set mondico = CreateObject("Scripting.Dictionary")
      a = f.Range("C2:F" & f.[C65000].End(xlUp).Row).Value
      For i = LBound(a, 1) To UBound(a, 1)
        mondico(a(i, 1)) = ""
      Next i
      Me.ComboBox1.List = mondico.keys
    End Sub
     
    Private Sub ComboBox1_click()
      Me.ComboBox2.Clear
      Me.ComboBox3.Clear
      Me.ComboBox4.Clear
      Set mondico = CreateObject("Scripting.Dictionary")
      For i = LBound(a, 1) To UBound(a, 1)
         If a(i, 1) = Me.ComboBox1 Then mondico(a(i, 2)) = ""
      Next i
      Me.ComboBox2.List = mondico.keys
      Me.ListBox1 = Me.ComboBox1
    End Sub
     
    Private Sub ComboBox2_click()
      Me.ComboBox3.Clear
      Me.ComboBox4.Clear
      Set mondico = CreateObject("Scripting.Dictionary")
      For i = LBound(a, 1) To UBound(a, 1)
         If a(i, 1) = Me.ComboBox1 And a(i, 2) = Me.ComboBox2 Then mondico(a(i, 3)) = ""
      Next i
      Me.ComboBox3.List = mondico.keys
      Me.ListBox1 = Me.ComboBox2
    End Sub
     
     
     
    Private Sub ComboBox3_click()
       Me.TextBox1 = Me.ComboBox3
    End Sub
    Pour commencer simple mon premier problème est dès que je lance l'USERFORM, il bloque sur:

    Set mondico dans l'UserForm_Initialize

    et le message est: "erreur de compilation:variable non définie"

    merci beaucoup pour votre aide j'ai à cœur d'apprendre le vba pour me simplifier la vie

  2. #2
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Bonjour,
    En effet, tu n'as pas déclaré ta variable mondico. Regarde l'aide sur l'option explicit : https://msdn.microsoft.com/fr-fr/library/y9341s4f.aspx
    Si tu utilises cette option, il faut déclarer TOUTES les variables afin de ne pas avoir d'erreur de compilation. Ajoute donc un
    ou enlève l'option Explicit.
    Je conseille de garder l'option Explicit, ça évite les erreurs d'affectation de variables.

  3. #3
    Membre averti
    Homme Profil pro
    comptable
    Inscrit en
    Mars 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : comptable
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2017
    Messages : 22
    Par défaut [XL-2007] Poblèmes Combobox en cascade et listbox
    ok merci

    j'ai déclaré toutes mes variables

    et maintenant mon blocage provient dès l'ouverture du UserForm.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub CommandButton1_Click()
    UserForm19.Show 0
    End Sub
    UserForm19.Show 0 est en surbrillance et le message d'erreur est: erreur d'execution '70': Permission refusée

    quel est le problème?

  4. #4
    Membre averti
    Homme Profil pro
    comptable
    Inscrit en
    Mars 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : comptable
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2017
    Messages : 22
    Par défaut [XL-2007] Poblèmes Combobox en cascade et listbox
    c'est bon j'ai trouvé mon erreur!

    dans les propriétés du combobox1 j'avais inséré des données dans la partie Rowsource!

    Mon nouveau soucis est plus complexe!

    Quand je sélectionne dans mon combobox3 la donnée j'ai un message d'erreur: Erreur d'execution '380': impossible de définir la propriété value. valeur de propriété non valide

    Me.ListBox1 = Me.ComboBox3 est en surbrillance et quand je passe sur Me.ListBox1, il me met: Me.ListBox1 = Me.ComboBox3 = Null.

    pour rappel mon code complet et la donnée que je veux afficher dans la listbox se situe en colonne C:
    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
    Option Explicit
    Dim f, a()
    Dim mondico As Object
    Dim i
     
    Private Sub UserForm_Initialize()
      Set f = Sheets("matrice")
      Set mondico = CreateObject("Scripting.Dictionary")
      a = f.Range("D2:F" & f.[D65000].End(xlUp).Row).Value
      For i = LBound(a, 1) To UBound(a, 1)
        mondico(a(i, 1)) = ""
      Next i
      Me.ComboBox1.List = mondico.keys
    End Sub
     
    Private Sub ComboBox1_click()
      Me.ComboBox2.Clear
      Me.ComboBox3.Clear
      Set mondico = CreateObject("Scripting.Dictionary")
      For i = LBound(a, 1) To UBound(a, 1)
         If a(i, 1) = Me.ComboBox1 Then mondico(a(i, 2)) = ""
      Next i
      Me.ComboBox2.List = mondico.keys
    End Sub
     
    Private Sub ComboBox2_click()
      Me.ComboBox3.Clear
       Set mondico = CreateObject("Scripting.Dictionary")
      For i = LBound(a, 1) To UBound(a, 1)
         If a(i, 1) = Me.ComboBox1 And a(i, 2) = Me.ComboBox2 Then mondico(a(i, 3)) = ""
      Next i
      Me.ComboBox3.List = mondico.keys
    End Sub
     
    Private Sub ComboBox3_click()
       Me.ListBox1 = Me.ComboBox3
    End Sub
    Merci

  5. #5
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Bonjour,
    Essaie comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.ListBox1.List(ListBox1.ListIndex) = Me.ComboBox3.Value

    Controle dans un UserForm (en particulier ListBox) : http://silkyroad.developpez.com/VBA/...serForm/#LII-G

  6. #6
    Membre averti
    Homme Profil pro
    comptable
    Inscrit en
    Mars 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : comptable
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2017
    Messages : 22
    Par défaut [XL-2007] Poblèmes Combobox en cascade et listbox
    Merci pour ta réponse, mais ça ne fonctionne pas.

    Est-ce que ça ne vient pas du fait que dans les combo précédentes je ne fait jamais référence à la colonne C ?

    Donc il ne trouve pas le lien entre le résultat du click de la combobox3 et ce qu'il faut afficher en ListBox1?

    merci

  7. #7
    Membre averti
    Homme Profil pro
    comptable
    Inscrit en
    Mars 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : comptable
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2017
    Messages : 22
    Par défaut [XL-2007] Poblèmes Combobox en cascade et listbox
    bonjour,

    Après plusieurs recherches et jours d'intense réflexion j'ai réussi à me dépatouiller!

    Il me reste un dernier soucis:

    Lorsque je déplace mon bouton pour ouvrir mon UserForm, je n'ai plus aucunes données dans celui-ci quel est le problème?

    Pour info, mes données sont dans l'onglet: shtDb(matrice) et je veux mettre le bouton d'ouverture de l'UserForm dans l'onglet: shtConsult(RECHERCHE)

    Mon code d'initialisation et de tri:
    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
     
    Private Sub UserForm_Initialize()
      Set f = Sheets("matrice")
      Set mondico = CreateObject("Scripting.Dictionary")
      For Each c In Range("D2:D" & [D65000].End(xlUp).Row)
        mondico(c.Value) = ""
      Next c
      temp = mondico.keys
      Call Tri(temp, LBound(temp), UBound(temp))
      Me.ComboBox1.List = temp
    End Sub
    Sub Tri(a, gauc, droi) ' Quick sort
      ref = a((gauc + droi) \ 2)
      g = gauc: d = droi
      Do
        Do While a(g) < ref: g = g + 1: Loop
        Do While ref < a(d): d = d - 1: Loop
          If g <= d Then
            temp = a(g): a(g) = a(d): a(d) = temp
            g = g + 1: d = d - 1
          End If
        Loop While g <= d
        If g < droi Then Call Tri(a, g, droi)
        If gauc < d Then Call Tri(a, gauc, d)
    End Sub
    Mes combobox1 ,2 ,3 et listbox1:
    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
    Private Sub ComboBox1_Click()
      Me.ComboBox2.Clear
      Me.ComboBox3.Clear
      Me.ListBox1.Clear
      Set mondico = CreateObject("Scripting.Dictionary")
      For Each c In Range("D2:D" & [D65000].End(xlUp).Row)
        If c = Me.ComboBox1 Then mondico(c.Offset(0, 1).Value) = ""
      Next c
      temp = mondico.keys
      Call Tri(temp, LBound(temp), UBound(temp))
      Me.ComboBox2.List = temp
    End Sub
    Private Sub ComboBox2_click()
      Me.ComboBox3.Clear
      Me.ListBox1.Clear
      Set mondico = CreateObject("Scripting.Dictionary")
      For Each c In Range("F2:F" & [F65000].End(xlUp).Row)
        If c.Offset(, -2) = Me.ComboBox1 And c.Offset(, -1) = Me.ComboBox2 Then mondico(c.Value) = ""
      Next c
      temp = mondico.keys
      Call Tri(temp, LBound(temp), UBound(temp))
      Me.ComboBox3.List = temp
    End Sub
    Private Sub ComboBox3_click()
      Me.ListBox1.Clear
      i = 0
      For Each c In Range("C2:C" & [C65000].End(xlUp).Row)
        If c.Offset(, 1) = Me.ComboBox1 And c.Offset(, 2) = Me.ComboBox2 And c.Offset(, 3).Value = Me.ComboBox3 Then
          Me.ListBox1.AddItem c
          Me.ListBox1.List(i, 1) = c.Offset(, 1)
          i = i + 1
        End If
      Next c
    End Sub
    Merci d'avance pour vos réponse

  8. #8
    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
    Il manque f. Dans la définition de la BD

    Boisgontier
    Http:// Boisgontier question.free.fr

  9. #9
    Membre averti
    Homme Profil pro
    comptable
    Inscrit en
    Mars 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : comptable
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2017
    Messages : 22
    Par défaut lien hypertexte dans listbox
    A quel niveau manque le f. ? car je ne comprend pas trop.

    Au lieu de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    For Each c In Range("D2:D" & [D65000].End(xlUp).Row)
                     mondico(c.Value) = ""
    je dois mettre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     For Each c In f.Range("D2:D" & [D65000].End(xlUp).Row)
                          mondico(c.Value) = ""
    Et de telle manière à chaque combobox ou juste pour l'initialisation?

    Merci

  10. #10
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each c In f.Range("D2:D" & f.[D65000].End(xlUp).Row)
    Boisgontier

  11. #11
    Membre averti
    Homme Profil pro
    comptable
    Inscrit en
    Mars 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : comptable
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2017
    Messages : 22
    Par défaut [XL-2007] Poblèmes Combobox en cascade et listbox
    merci bcp

    Résolu!

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

Discussions similaires

  1. Probleme ComboBox en cascade
    Par YOP33 dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 17/01/2010, 15h08
  2. fonction pour filtrage avec des combobox en cascade
    Par Montor dans le forum Contribuez
    Réponses: 3
    Dernier message: 09/11/2009, 12h05
  3. [E-00] ComboBox en cascade + TextBox
    Par couistelle dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 20/11/2008, 10h32
  4. Combobox en cascade et sans doublons
    Par humbp dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 29/11/2007, 13h54
  5. [VBA-E] ComboBox en cascade avec correspondance dans matrice
    Par ViperSpy dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 21/06/2006, 17h01

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