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 :

Liste déroulante avec filtre et tri sans doublon [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 116
    Points : 31
    Points
    31
    Par défaut Liste déroulante avec filtre et tri sans doublon
    Bonjour à tous

    J'ai besoin de vos lumières.

    J'ai un classeur Excel avec sur la feuil1 en colonne A une liste de numéro de commande de type numérique. A1 se trouve l'intitulé de la colonne et de A2 à la dernière ligne remplie se trouve un numéro.
    Se numéro peut se retrouver sur plusieurs lignes (mais toujours voisines) et il ne fait que d'augmenter.

    Exemple:

    Numéro de commande
    1
    1
    2
    3
    3
    3
    3
    4
    4
    5
    6
    7
    8
    8
    8


    J'aimerais savoir s'il est possible de réaliser une macro qui filtre sans doublons et qui tri les données de la colonne A. Si oui quel est le code à utiliser.

    Si cela est possible, puis(je mettre cette macro sur un selection change avec une liste déroulante dans une cellule ou dois-je affecter cette macro dans une liste déroulante type formulaire?

    Merci pour votre aide précieuse!

  2. #2
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonjour,

    Déjà, pour la liste sans doublon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Option Explicit
     
    Sub Test()
    Dim dl As Long
    With ActiveSheet
       dl = .Range("A" & .Rows.Count).End(xlUp).Row
    End With
    Creer_Liste_SansDoublons Range("A2:A" & dl)
    End Sub
    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
    Sub Creer_Liste_SansDoublons(Plage As Range)
    Dim Cell As Range
    Dim Un As Collection, i As Long
    Dim ssdoublon()
    Set Un = New Collection
    On Error Resume Next
     
    For Each Cell In Plage
       If Cell <> "" Then Un.Add Cell, CStr(Cell)
    Next Cell
     
    On Error GoTo 0
     
    For i = 1 To Un.Count
       ReDim Preserve ssdoublon(i - 1)
       ssdoublon(i - 1) = Un.Item(i)
    Next i
    For i = 0 To UBound(ssdoublon)
       MsgBox ssdoublon(i)' à la place remplis ta listbox
    Next i
    Set Un = Nothing
    End Sub
    ref : http://silkyroad.developpez.com/excel/doublons/#LIV-A

    il ne te reste qu'à ajouter un filtre

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 116
    Points : 31
    Points
    31
    Par défaut
    Merci j'ai regardé les deux parties de code et la référence que tu m'as donné mais je ne comprends pas bien le fonctionnement.

    Est-il possible d'voir des explications sur les deux parties de codes? Et sur l'utilisation car ce que je veux c'est remplacer l'utilisation d'une validation de type liste.

    Merci

  4. #4
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    lae premier code est à mettre dans l'évènement de ton choix, soit un bouton de commande, un évènementdans la feuille, etc. le second code est la procédure appelée, il ne reste à changer ta destination comme je l'avais dit :

    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
    Sub Creer_Liste_SansDoublons(Plage As Range)
    Dim Cell As Range
    Dim Un As Collection, i As Long
    Dim ssdoublon()
    Set Un = New Collection
    On Error Resume Next
     
    For Each Cell In Plage
       If Cell <> "" Then Un.Add Cell, CStr(Cell)
    Next Cell
     
    On Error GoTo 0
     
    For i = 1 To Un.Count
       ReDim Preserve ssdoublon(i - 1)
       ssdoublon(i - 1) = Un.Item(i)
    Next i
    For i = 0 To UBound(ssdoublon)
       MsgBox ssdoublon(i) ' à la place remplis ta listbox
    Next i
    Set Un = Nothing
    End Sub
    exemple, si la destination est une listbox appelée "listbox1"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i = 0 To UBound(ssdoublon)
      userform1.listbox1.list = ssdoublon()' si l'USF se nomme userform1
    Next i
    si ta listbox est dans la feuille
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i = 0 To UBound(ssdoublon)
      sheets("feuil1").listbox1.list = ssdoublon()' si ta feuille se nomme "feuil1"
    Next i

  5. #5
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Si j'ai bien compris ce que tu veux.
    Le code ci-dessous est à mettre dans le module de la feuille où se trouve ta plage. Ce code crée un ComboBox et le positionne sur la cellule B1 (à adapter), récupère les valeurs sans doublons, tri ces valeurs en odre croissant (à adapter) et rempli la liste du combo. Le combo est ajouté sut l'évennement Change de la feuille et plus particulièrement sur la colonne A (à adapter) de façon à avoir toujours sa liste à jour.
    Les explications sont dans le code :
    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
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
     
    Private Sub Worksheet_Change(ByVal Target As Range)
     
        Dim CmbListe As OLEObject
        Dim Combo As MSForms.ComboBox
        Dim Tbl()
        Dim Plage As Range
        Dim I As Long
     
        'si une valeur change dans la colonne A
        If Not Intersect(Target, [A:A]) Is Nothing Then
     
            'défini la plage des valeurs à dédoublonner et trier
            With ActiveSheet
                Set Plage = .Range(.[A1], .Range("A" & Rows.Count).End(xlUp))
            End With
     
            'rempli le tableau avec la plage
            For I = 1 To Plage.Count
                ReDim Preserve Tbl(1 To I)
                Tbl(I) = Plage(I)
            Next I
     
            'supprime les doublons
            Tbl = SupprimerDoublons(Tbl)
     
            'tri le tableau (voir la proc pour sens du tri)
            Tri Tbl
     
            'supprime le combo si il existe
            On Error Resume Next
                ActiveSheet.OLEObjects("CmbListe").Delete
            On Error GoTo 0
     
            'le rajoute en position et dimensions de la cellule B1
            With Range("B1")
                Set CmbListe = Me.OLEObjects.Add(ClassType:="Forms.ComboBox.1", _
                Link:=False, DisplayAsIcon:=False, Left:=.Left, Top:=.Top, _
                Width:=.Width, Height:=.Height)
            End With
     
            'un combobox OLEObject n'a pas de méthode AddItem
            'on affecte alors sa propriété Object à un objet "MSForms.ComboBox"
            'qui lui à bien une méthode AddItem (ComboBox mis sur UserForm)
            With CmbListe
                .Name = "CmbListe"
                Set Combo = .Object
            End With
     
            'le remplissage de sa liste est maintenant possible
            'avec les valeurs unique et triées
            For I = 1 To UBound(Tbl)
                Combo.AddItem Tbl(I)
            Next I
     
        End If
     
    End Sub
     
     
    Function SupprimerDoublons(Tbl()) As Variant()
     
        Dim Dico As Object
        Dim Cle
        Dim T()
        Dim I As Long
     
        'crée l'objet
        Set Dico = CreateObject("Scripting.Dictionary")
     
        'inscrit les valeurs dans le dictionnaire
        'en affectant aussi cette valeur à la clé
        'une clé devant être unique, si on ne contrôle pas
        'son existance dans la collection, un erreur est générée
        For I = 1 To UBound(Tbl)
            If Dico.Exists(Tbl(I)) = False Then
                Dico.Add Tbl(I), Tbl(I)
            End If
        Next I
     
        I = 0
     
        'tranfert des valeurs uniques dans un tableau
        For Each Cle In Dico.keys
            I = I + 1
            ReDim Preserve T(1 To I)
            T(I) = Cle
        Next
     
        'passage de ce tableau à la fonction
        SupprimerDoublons = T
     
        'libère la mémoire
        Set Dico = Nothing
     
    End Function
     
    Sub Tri(Tbl())
     
        Dim Tempo
        Dim I As Integer
        Dim J As Integer
     
        Do While I < UBound(Tbl) - 1
            I = I + 1
            Do While J < UBound(Tbl)
                J = J + 1
     
                'tri décroissant "<"
                'tri croissant ">"
                If Tbl(I) > Tbl(J) Then
                    Tempo = Tbl(J)
                    Tbl(J) = Tbl(I)
                    Tbl(I) = Tempo
                End If
            Loop
            J = I
        Loop
     
    End Sub
     
    Private Sub CmbListe_Click()
     
        'ici on récupère le choix fait dans la liste
        'à adapter aux bessoins...!
        MsgBox CmbListe.Text
     
    End Sub
    Hervé.

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 116
    Points : 31
    Points
    31
    Par défaut
    merci à vous deux pour vos deux propositions.

    Pour le moment j'essaye de comprendre tout le code et je dois dire que c'est pas gagné (je ne connaissais pas ces possibilités et ces parties de code).

    Le problème est que j'ai du mal à utiliser du code que je ne maîtrise pas .

    Est-il possible que la liste déroulante soit dans une autre feuille?

    Pour être plus clair voilà ce que j'utilise actuellement:

    - les données se trouve dans une feuille appelée "Base".

    - j'effectue à chaque fermeture de la feuille "Base" un filtre élaboré (par macro) dans une feuille "Calcul". Pour la partie de code j'ai juste fait un enregistrement (je ne connaissais pas le code...).

    - dans une troisième feuille "Bulletin" je créé dans une cellule une liste déroulante (données/validation/liste) avec la fonction décaler qui permet de pointer une liste présente sur une autre feuille.

    Donc le but c'est de simplifier le tout et de ne plus utiliser une feuille annexe ou j'effectue des tris et autres opérations.

    Tout ça dans un but de réduire le poids de mon fichier (mais je ne sais pas si cela aura un impact).

    Enfin le dernier point est aussi de supprimer les formules contenu dans tout le classeur et passer par des macros.

    D'ailleurs sur ce dernier point j'aimerais savoir, entre les macros et formules (pour une même utilisation) lequel est le plus léger et lequel est le plus rapide?

    Merci pour votre aide.

  7. #7
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonsoir,

    Je te reposte le code modifié qui permet de récupérer les valeurs sur une feuille (Base) et de créer la liste déroulante sur une autre (Belletin).
    Il est possible de ne créer la liste qu'une seule fois (la créer la première fois que le code est exécuté et ensuite, tester sa présence) et de vider et re-remplir sa liste à chaque changement ou rajout de valeurs.
    Pour la compréhension du code, les commentaires sont là pour ça :
    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
     
    'ce code doit être placé dans la feuille qui va générer
    'la création de la liste déroulante (ComboBox) et le code
    'évennementiel >"Private Sub CmbListe_Click()"< doit être
    'placé dans le module de la feuille recevant le ComboBox
    Private Sub Worksheet_Change(ByVal Target As Range)
     
        Dim FeBase As Worksheet
        Dim FeBulletin As Worksheet
        Dim CmbListe As OLEObject
        Dim Combo As MSForms.ComboBox
        Dim Tbl()
        Dim Plage As Range
        Dim I As Long
     
        'si une valeur change dans la colonne A
        If Not Intersect(Target, [A:A]) Is Nothing Then
     
            'défini les feuilles de travail (à adapter) :
            'feuille "Base" où sont récupérées les valeurs
            Set FeBase = Worksheets("Base")
            'feuille "Bulletin" où va se trouver le ComboBox
            Set FeBulletin = Worksheets("Bulletin")
     
            'défini la plage des valeurs à dédoublonner et trier
            With FeBase
                Set Plage = .Range(.[A1], .Range("A" & Rows.Count).End(xlUp))
            End With
     
            'rempli le tableau avec la plage
            For I = 1 To Plage.Count
                ReDim Preserve Tbl(1 To I)
                Tbl(I) = Plage(I)
            Next I
     
            'supprime les doublons
            Tbl = SupprimerDoublons(Tbl)
     
            'tri le tableau (voir la proc pour sens du tri)
            Tri Tbl
     
            'supprime le combo si il existe dans la feuille "Calcul" (à adapter)
            On Error Resume Next
                FeBulletin.OLEObjects("CmbListe").Delete
            On Error GoTo 0
     
            'le rajoute en position et dimensions de la cellule B1 de la feuille "Calcul"
            With FeBulletin.Range("B1")
                Set CmbListe = Me.OLEObjects.Add(ClassType:="Forms.ComboBox.1", _
                Link:=False, DisplayAsIcon:=False, Left:=.Left, Top:=.Top, _
                Width:=.Width, Height:=.Height)
            End With
     
            'un combobox OLEObject n'a pas de méthode AddItem
            'on affecte alors sa propriété Object à un objet "MSForms.ComboBox"
            'qui lui à bien une méthode AddItem (ComboBox mis sur UserForm)
            With CmbListe
                .Name = "CmbListe"
                Set Combo = .Object
            End With
     
            'le remplissage de sa liste est maintenant possible
            'avec les valeurs unique et triées
            For I = 1 To UBound(Tbl)
                Combo.AddItem Tbl(I)
            Next I
     
        End If
     
    End Sub
    Hervé.

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 116
    Points : 31
    Points
    31
    Par défaut
    Avec cette méthode la liste est-elle stockée quelque part? Si oui où?

    Merci

  9. #9
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Dans le code proposé en dernier, la liste se trouve sur la feuille "Base" en colonne A mais il suffit de modifier le nom de la feuille et de la colonne si tu veux récupérer cette liste ailleurs. Cette liste peut être récupérée n'importe où, dans un autre classeur (fermé ou ouvert), un fichier texte, la base de registre, etc...

    Hervé.

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 116
    Points : 31
    Points
    31
    Par défaut
    Coucou je reviens vers vous!

    Tout d'abord pour vous remercier tous les deux pour votre aide, c'est vraiment sympa de pouvoir trouver de l'aide afin de progresser!

    Pour finir sur ce sujet j'ai une dernière question, j'ai décidé d'utiliser la solution de casefayere. Ca marche bien, je vais l'utiliser par exemple sur une userform et sur cette userform j'ai plusieurs listes déroulante (indépendante entre elles).

    Donc ma question est:

    - est-il possible d'optimiser le code pour plusieurs sélection et plusieurs combobox ou dois-je réécrire pour chaque solution le code en changeant l'affectation et le nom des macro et procédure?

    - comment ajouter un filtre pour la liste?

    Si l'optimisation est possible quel serait le code?

    Je demande cela pour rendre le code plus lisible, le fichier moins lourd et avoir un code propre.

    Merci!

  11. #11
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonsoir,
    exemple que tu devras adapter
    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
    Option Explicit
     
    Public cbox As String' variable "public"
     
    Private Sub UserForm_Initialize() 'à l'initialisation de l'USF
    cbox = "combobox1"
    Creer_Liste_SansDoublons Range("A1:A20")' pour la 1ere plage
    cbox = "combobox2"
    Creer_Liste_SansDoublons Range("B1:B20")'pour la 2eme plage
     
    End Sub
    Sub Creer_Liste_SansDoublons(Plage As Range)
    Dim Cell As Range
    Dim Un As Collection, i As Long
    Dim ssdoublon()
    Set Un = New Collection
    On Error Resume Next
     
    For Each Cell In Plage
       If Cell <> "" Then Un.Add Cell, CStr(Cell)
    Next Cell
     
    On Error GoTo 0
     
    For i = 1 To Un.Count
       ReDim Preserve ssdoublon(i - 1)
       ssdoublon(i - 1) = Un.Item(i)
    Next i
    For i = 0 To UBound(ssdoublon)
      Me.Controls(cbox).List = ssdoublon()
    Next i
    Set Un = Nothing
    End Sub

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 116
    Points : 31
    Points
    31
    Par défaut
    Ca me donne une erreur avec Me.controls

  13. #13
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Je ne comprends pas, je l'ai essayé et n'ai pas eu d'erreur, quelle erreur est stipulée ?

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 116
    Points : 31
    Points
    31
    Par défaut
    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
    Option Explicit
     
    Sub Test()
    Dim dl As Long
    With ActiveSheet
       dl = .Range("A" & .Rows.Count).End(xlUp).Row
    End With
    cbox = "combobox1"
    Creer_Liste_SansDoublons Range("A1:A" & dl) ' pour la 1ere plage
    cbox = "combobox2"
    Creer_Liste_SansDoublons Range("B1:B" & dl) 'pour la 2eme plage
    End Sub
     
    Sub Creer_Liste_SansDoublons(Plage As Range)
    Dim Cell As Range
    Dim Un As Collection, i As Long
    Dim ssdoublon()
    Set Un = New Collection
    On Error Resume Next
     
    For Each Cell In Plage
       If Cell <> "" Then Un.Add Cell, CStr(Cell)
    Next Cell
     
    On Error GoTo 0
     
    For i = 1 To Un.Count
       ReDim Preserve ssdoublon(i - 1)
       ssdoublon(i - 1) = Un.Item(i)
    Next i
    For i = 0 To UBound(ssdoublon)
      Me.Controls(cbox).List = ssdoublon()
    Next i
    Set Un = Nothing
    End Sub
    Voilà le code que j'ai modifié et j'ai une erreur avec le cbox au niveau de Me.Controls(cbox).List = ssdoublon()

    Il me dit variable non définie

  15. #15
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    C'est normal, tu n'as pas copier ma premiere ligne apres option explicit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public cbox As String' variable "public"

  16. #16
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 116
    Points : 31
    Points
    31
    Par défaut
    Cela sert a quoi je ne connais pas option explicit?

    j'ai une erreur avec ce code:

    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
    Option Explicit
    Public cbox As String ' variable "public"
    Sub Test()
    Dim dl As Long
    With ActiveSheet
       dl = .Range("A" & .Rows.Count).End(xlUp).Row
    End With
    cbox = "ComboBox1"
    Creer_Liste_SansDoublons Range("A1:A" & dl) ' pour la 1ere plage
    cbox = "ComboBox2"
    Creer_Liste_SansDoublons Range("B1:B" & dl) 'pour la 2eme plage
    End Sub
     
    Sub Creer_Liste_SansDoublons(Plage As Range)
    Dim Cell As Range
    Dim Un As Collection, i As Long
    Dim ssdoublon()
    Set Un = New Collection
    On Error Resume Next
     
    For Each Cell In Plage
       If Cell <> "" Then Un.Add Cell, CStr(Cell)
    Next Cell
     
    On Error GoTo 0
     
    For i = 1 To Un.Count
       ReDim Preserve ssdoublon(i - 1)
       ssdoublon(i - 1) = Un.Item(i)
    Next i
    For i = 0 To UBound(ssdoublon)
      Me.Controls(cbox).List = ssdoublon()
    Next i
    Set Un = Nothing
    End Sub
    Je n'utilise pas la partie avec l'initialisation de la USF. Je fais démarrer la macro "Test" à l'activation de la USF et j'obtiens une erreur "utilisation incorrecte du mot clé Me"

  17. #17
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    en début de module oblige à déclarer clairement les variables afin d'éviter de grosses erreurs
    donc tu le précises bien en haut du module et juste en dessous, tu écris pour que cette variable soit reconnue dans l'intégralité du module et puisse garder sa valeur,

    Je pense qu'il va te falloir un peu de lecture et d'initiatiation, le site est bien fait pour ça

  18. #18
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 116
    Points : 31
    Points
    31
    Par défaut
    Je viens de me rendre compte que j'ai posé la question trop vite

    Bon sinon j'ai toujours un soucis avec le "Me" et je vois pas pourquoi...

  19. #19
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Peux-tu envoyer le fichier ?, il s'agit peu-être du nom de tes combos !

    ou un fichier bidon, je regarderai et corrigerai.

  20. #20
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 116
    Points : 31
    Points
    31
    Par défaut
    Voilà

    http://www.cijoint.fr/cjlink.php?fil...cijwN6UtiQ.xls

    As tu aussi une idée de comment je pourrais intégrer un filtre?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [Vxi3] Liste déroulante avec filtre
    Par nawal59 dans le forum Webi
    Réponses: 8
    Dernier message: 03/12/2010, 16h43
  2. [MySQL] Liste déroulante avec doublon
    Par sheira dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 21/09/2010, 10h23
  3. PERL: Problème avec Tri sans doublon
    Par Sethenssen dans le forum Langage
    Réponses: 4
    Dernier message: 12/11/2009, 16h37
  4. Réponses: 2
    Dernier message: 30/07/2009, 18h25
  5. Comment remplir une liste déroulante avec une macro sans doublons
    Par alex.a dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 14/06/2007, 18h34

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