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 :

Combobox en cascade problème [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Apprenti Ingénieur
    Inscrit en
    Septembre 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti Ingénieur

    Informations forums :
    Inscription : Septembre 2012
    Messages : 13
    Par défaut Combobox en cascade problème
    Bonjour tout le monde,

    J'ai créé un projet qui consiste à faire un moteur de recherche. Ce moteur permet de rechercher des fichiers Excel dans un dossier spécifique.

    Je remplis mes combobox avec un tableau qui se situe dans une feuille. Quand on sélectionne un item dans le combobox 1, ça rempli la deuxième automatiquement, et un si de suite pour les autres.

    Mon problème est que certaines combobox ne se remplissent pas quand il y a des chiffres dedans.

    J'ai essayé en mettant "blabla" et ça fonctionne.

    Je suis bloqué depuis quelques jours, et cela m'aiderai énormément si quelqu'un connait la solution.

    Le fichier est dans les pièces jointes.

    Pour information, le problème est dans le Userform4, le Userform 1 étant un essai au début du projet.

    Merci d'avance
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Au lieu d'un fichier, il serait mieux de poster le code.

    Peut être, tu ne compare pas un String à un Nombre?

  3. #3
    Membre averti
    Homme Profil pro
    Apprenti Ingénieur
    Inscrit en
    Septembre 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti Ingénieur

    Informations forums :
    Inscription : Septembre 2012
    Messages : 13
    Par défaut
    Ah oui excusez moi, voici le morceau de code en question qui me permet d'alimenter une combobox, c'est le même pour toute, juste les colonnes qui changent :

    les variables sont inscrites en amont de mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Option Explicit
     
    Dim Ws As Worksheet
    Dim NbLignes As Integer
    Dim a As Integer
    Dim b As Integer
    Dim c As Integer
    Dim mat_fonct As String
    Dim mat_comp As String
    Dim x As Variant
    Et voici le code d'une 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
    Private Sub liste1_2_Change()
    Dim cell As Range
     
    UserForm4.liste1_3.Clear
    Sheets("Listes").Columns(22).Clear
    With Sheets("Listes")
        For x = 2 To .Range("A65536").End(xlUp).Row
            If .Range("B" & x) = liste1_2.Value Then
                 Sheets("Listes").Cells(x, 22).Value = Sheets("Listes").Range("C" & x).Value
            End If
        Next
    End With
     
    For Each cell In Worksheets("Listes").Range("V2:V300")
        UserForm4.liste1_3 = cell
        If UserForm4.liste1_3.ListIndex = -1 And cell <> "" Then UserForm4.liste1_3.AddItem cell
    Next
     
    End Sub

  4. #4
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Pour les 3 première combos, pas besoin d'utiliser la colonne Z, ensuite effectivement il faudra comparer des string à l'aide de Cstr

    Exemple fait autrement à adapter pour les autres

    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
    Option Explicit
     
    Private Sub UserForm_Initialize()
    Dim LastLig As Long
    Dim c As Range
     
    With Worksheets("Listes")
        LastLig = .Cells(.Rows.Count, 1).End(xlUp).Row
        For Each c In .Range("A2:A" & LastLig)
            If c <> "" Then
                Me.liste1 = c
                If Me.liste1.ListIndex = -1 Then Me.liste1.AddItem c
            End If
        Next c
    End With
    Me.liste1.ListIndex = -1
    End Sub
     
    Private Sub liste1_Change()
    Dim LastLig As Long
    Dim c As Range
     
    Me.liste1_2.Clear
    If Me.liste1.ListIndex > -1 Then
        With Worksheets("Listes")
            LastLig = .Cells(.Rows.Count, 1).End(xlUp).Row
            For Each c In .Range("A2:A" & LastLig)
                If c.Offset(, 1) <> "" Then
                    If CStr(c.Value) = Me.liste1.Value Then
                        Me.liste1_2 = c.Offset(, 1)
                        If Me.liste1_2.ListIndex = -1 Then Me.liste1_2.AddItem c.Offset(, 1)
                    End If
                End If
            Next
        End With
    End If
    Me.liste1_2.ListIndex = -1
    End Sub
     
    Private Sub liste1_2_Change()
    Dim LastLig As Long
    Dim c As Range
     
    Me.liste1_3.Clear
    If Me.liste1_2.ListIndex > -1 Then
        With Worksheets("Listes")
            LastLig = .Cells(.Rows.Count, 1).End(xlUp).Row
            For Each c In .Range("B2:B" & LastLig)
                If c.Offset(, 1) <> "" Then
                    If CStr(c) = Me.liste1_2.Value Then
                        Me.liste1_3 = c.Offset(, 1)
                        If Me.liste1_3.ListIndex = -1 Then Me.liste1_3.AddItem c.Offset(, 1)
                    End If
                End If
            Next
        End With
    End If
    Me.liste1_3.ListIndex = -1
    End Sub

  5. #5
    Membre averti
    Homme Profil pro
    Apprenti Ingénieur
    Inscrit en
    Septembre 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti Ingénieur

    Informations forums :
    Inscription : Septembre 2012
    Messages : 13
    Par défaut
    Je ne comprends pas ta réponse, je veux dire, mes combobox fonctionnent très bien, sauf quand la cellule comporte des numéros.

    Quand j'ai testé avec "blabla", toutes mes combobox sont remplis pour faire la recherche.

  6. #6
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    La ligne 8 de ton code #3, il fallait faire ce test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If cstr(.Range("B" & x)) = liste1_2.Value Then
    Sinon, pas besoin d'utiliser la colonne temporaire Z, il suffit de tester directement

    Je ferai comme ceci à la place de tes codes (tu n'est pas obligé)

    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
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    Option Explicit
     
    Private Sub UserForm_Initialize()
    Dim LastLig As Long
    Dim c As Range
     
    With Worksheets("Listes")
        LastLig = .Cells(.Rows.Count, 1).End(xlUp).Row
        For Each c In .Range("A2:A" & LastLig)
            'Remplissage de Liste1
            If c <> "" Then
                Me.liste1 = c
                If Me.liste1.ListIndex = -1 Then Me.liste1.AddItem c
            End If
            'Remplissage de Liste2
            If c.Offset(, 3) <> "" Then
                Me.liste2 = c.Offset(, 3)
                If Me.liste2.ListIndex = -1 Then Me.liste2.AddItem c.Offset(, 3)
            End If
     
            'Remplissage de Liste3
            If c.Offset(, 4) <> "" Then
                Me.liste3 = c.Offset(, 4)
                If Me.liste3.ListIndex = -1 Then Me.liste3.AddItem c.Offset(, 4)
            End If
     
            'Remplissage de Liste4
            If c.Offset(, 6) <> "" Then
                Me.liste4 = c.Offset(, 6)
                If Me.liste4.ListIndex = -1 Then Me.liste4.AddItem c.Offset(, 6)
            End If
            'Remplissage de Liste5
            If c.Offset(, 7) <> "" Then
                Me.liste5 = c.Offset(, 7)
                If Me.liste5.ListIndex = -1 Then Me.liste5.AddItem c.Offset(, 7)
            End If
     
        Next c
    End With
    Me.liste1.ListIndex = -1
    Me.liste2.ListIndex = -1
    Me.liste3.ListIndex = -1
    Me.liste4.ListIndex = -1
    Me.liste5.ListIndex = -1
    End Sub
     
    Private Sub liste1_Change()
    Dim LastLig As Long
    Dim c As Range
     
    Me.liste1_2.Clear
    If Me.liste1.ListIndex > -1 Then
        With Worksheets("Listes")
            LastLig = .Cells(.Rows.Count, 1).End(xlUp).Row
            For Each c In .Range("A2:A" & LastLig)
                If c.Offset(, 1) <> "" Then
                    If CStr(c.Value) = Me.liste1.Value Then
                        Me.liste1_2 = c.Offset(, 1)
                        If Me.liste1_2.ListIndex = -1 Then Me.liste1_2.AddItem c.Offset(, 1)
                    End If
                End If
            Next
        End With
    End If
    Me.liste1_2.ListIndex = -1
    End Sub
     
    Private Sub liste1_2_Change()
    Dim LastLig As Long
    Dim c As Range
     
    Me.liste1_3.Clear
    If Me.liste1_2.ListIndex > -1 Then
        With Worksheets("Listes")
            LastLig = .Cells(.Rows.Count, 1).End(xlUp).Row
            For Each c In .Range("B2:B" & LastLig)
                If c.Offset(, 1) <> "" Then
                    If CStr(c) = Me.liste1_2.Value Then
                        Me.liste1_3 = c.Offset(, 1)
                        If Me.liste1_3.ListIndex = -1 Then Me.liste1_3.AddItem c.Offset(, 1)
                    End If
                End If
            Next
        End With
    End If
    Me.liste1_3.ListIndex = -1
    End Sub
     
    Private Sub liste3_Change()
    Dim LastLig As Long
    Dim c As Range
     
    Me.liste3_2.Clear
    If Me.liste3.ListIndex > -1 Then
        With Worksheets("Listes")
            LastLig = .Cells(.Rows.Count, 1).End(xlUp).Row
            For Each c In .Range("E2:E" & LastLig)
                If c.Offset(, 1) <> "" Then
                    If CStr(c.Value) = Me.liste3.Value Then
                        Me.liste3_2 = c.Offset(, 1)
                        If Me.liste3_2.ListIndex = -1 Then Me.liste3_2.AddItem c.Offset(, 1)
                    End If
                End If
            Next
        End With
    End If
    Me.liste3_2.ListIndex = -1
    End Sub
    PS. Ma proposition pourra facilement être compactée vu la similitude des codes

    En utilisant un code générique
    La totalité sera

    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
    Option Explicit
     
    Private Sub Remplissage(ByVal Lst As ComboBox, ByVal Col As Integer, Optional ByVal Crit As String, Optional ColPere As Integer = 1)
    Dim LastLig As Long
    Dim c As Range
     
    If Crit = "" Then Crit = "*"
    With Worksheets("Listes")
        LastLig = .Cells(.Rows.Count, 1).End(xlUp).Row
        For Each c In .Cells(2, Col).Resize(LastLig - 2)
            If c <> "" Then
                If CStr(c.Offset(, ColPere - Col).Value) Like Crit Then
                    Lst.Value = c
                    If Lst.ListIndex = -1 Then Lst.AddItem c
                End If
            End If
        Next
    End With
    Lst.ListIndex = -1
    End Sub
     
    Private Sub UserForm_Initialize()
     
    Remplissage Me.liste1, 1
    Remplissage Me.liste2, 4
    Remplissage Me.liste3, 5
    Remplissage Me.liste4, 7
    Remplissage Me.liste5, 8
    End Sub
     
    Private Sub liste1_Change()
     
    Me.liste1_2.Clear
    If Me.liste1.ListIndex > -1 Then Remplissage Me.liste1_2, 2, Me.liste1.Value, 1
    End Sub
     
    Private Sub liste1_2_Change()
     
    Me.liste1_3.Clear
    If Me.liste1_2.ListIndex > -1 Then Remplissage Me.liste1_3, 3, Me.liste1_2.Value, 2
    End Sub
     
    Private Sub liste3_Change()
     
    Me.liste3_2.Clear
    If Me.liste3.ListIndex > -1 Then Remplissage Me.liste3_2, 6, Me.liste3.Value, 5
    End Sub

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

Discussions similaires

  1. 4 combobox en cascade:problème
    Par adriennoob dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 30/03/2010, 21h34
  2. Combobox en cascade et sans doublons
    Par humbp dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 29/11/2007, 13h54
  3. Réponses: 6
    Dernier message: 13/10/2006, 15h56
  4. [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
  5. Delete cascade --> problème de temps de traitement
    Par celine31 dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 11/01/2006, 12h03

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