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 :

Comment remplir une liste déroulante avec une macro sans doublons


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    175
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 175
    Points : 91
    Points
    91
    Par défaut Comment remplir une liste déroulante avec une macro sans doublons
    Bonjour a tous,

    Je voudrais remplir une liste déroulante avec une plage de cellule d'un classeur, mais je n'ai aucun résultat. Je voudrais également que ma liste n'affiche pas les doublons.

    voilà mon code qui ne fonctionne pas!


    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
    Private Sub ListeFonction()
        Dim Plage1 As Range
        Dim FL1 As Worksheet
     
        NomProjet = FenetrePrincipale.LblProjet.Value
     
        Set FL1 = Workbooks("FMES-" & NomProjet & ".xls").Worksheets("FMES Equipement")
        Set Plage1 = FL1.Range("A4:A" & FL1.UsedRange.Rows.Count)
     
        CmbListeFonction.Clear
        For Each Cell1 In Plage1
        CmbListeFonction.AddItem Cell1.Value
        Next
     
    End Sub
    Merci d'avance pour votre aide.

  2. #2
    Membre éclairé
    Inscrit en
    Avril 2007
    Messages
    667
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2007
    Messages : 667
    Points : 870
    Points
    870
    Par défaut
    Bonjour,
    L'erreur se situe ou ? Tu as essaye le pas a pas pour voir ou il va ?

  3. #3
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    175
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 175
    Points : 91
    Points
    91
    Par défaut
    Bonjour tonton fred,

    je n'ai pas d'erreur qui apparaît et ma liste déroulante reste vide. Comment faire pour faire le mode pas a pas? (espion) je sais que NomProjet est lu car je l'ai affiché. Après la partie en Gras ne doit pas passée

    J'ai placé le code suivant dans mon formulaire :

    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
    Private Sub UserForm_Initialize()
        
        Dim hWnd As Long
        Dim Plage1 As Range
        Dim FL1 As Worksheet
      
        'Récupération window de l'userform et ajoute 'Réduire/Agrandir'
        hWnd = FindWindowA(vbNullString, Me.Caption)
        SetWindowLongA hWnd, -16, GetWindowLongA(hWnd, -16) Or &H20000
        'Ici pour éliminer la fermeture
        'SetWindowLongA hWnd, -16, GetWindowLongA(hWnd, -16) And &HFFF7FFFF
         
        FenetreFMESUser.LblMargeDetecF.Value = FenetrePrincipale.LblMargeDetec.Value
        FenetreFMESUser.LblMargeIndetecF.Value = FenetrePrincipale.LblMargeIndetec.Value
        
        NomProjet = FenetrePrincipale.LblProjet.Value
            
        Set FL1 = Workbooks("FMES-" & NomProjet & ".xls").Worksheets("FMES Equipement")
        Set Plage1 = FL1.Range("A4:A" & FL1.UsedRange.Rows.Count)
        
        FenetreFMESUser.CmbListeFonction.Clear
        For Each Cell1 In Plage1
            FenetreFMESUser.CmbListeFonction.AddItem Cell1.Value
        Next
    End Sub
    merci pour votre aide et vos conseils.

  4. #4
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    175
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 175
    Points : 91
    Points
    91
    Par défaut
    C'est bon ca marche, j'ai pas tout compris mais il semble que le code ci dessus marche.
    Par contre, comment ne pas faire apparaitre les doublons de la plage, dans la liste déroulante?

  5. #5
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    175
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 175
    Points : 91
    Points
    91
    Par défaut
    J'ai modifier mon code en rajoutant la ligne de code en gras. Je n'ai pas d'erreur mais les données de la plage sont rangées par doublons, mais ils sont toujours là

    quelqu'un a t-il une idée?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    For Each Cell1 In Plage1
            FenetreFMESUser.CmbListeFonction.AddItem Cell1.Value
            If FenetreFMESUser.CmbListeFonction.ListIndex = -1 Then FenetreFMESUser.CmbListeFonction.AddItem Cell1.Value
        Next

  6. #6
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 144
    Points
    20 144
    Par défaut
    bonjour

    tu peux tester

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For Each Cell1 In Plage1
        FenetreFMESUser.CmbListeFonction = Cell1.Value
        If FenetreFMESUser.CmbListeFonction.ListIndex = -1 Then _
            FenetreFMESUser.CmbListeFonction.AddItem Cell1.Value
    Next

    michel

  7. #7
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    175
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 175
    Points : 91
    Points
    91
    Par défaut
    Bonjour Michel, merci pour ta réponse

    ton code marche
    j'ai juste rajouté une ligne pour enlever les cellules vides.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    For Each Cell1 In Plage1
        If Cell1 <> "" Then
        FenetreFMESUser.CmbListeFonction = Cell1.Value
        End If
        If FenetreFMESUser.CmbListeFonction.ListIndex = -1 Then _
            FenetreFMESUser.CmbListeFonction.AddItem Cell1.Value
        Next
    encore merci

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

Discussions similaires

  1. [XL-2003] Menu déroulant avec une liste principale et une liste secondaire
    Par bbcancer dans le forum Excel
    Réponses: 2
    Dernier message: 03/05/2011, 13h50
  2. Création d'une liste déroulante avec une variable
    Par lou87 dans le forum ASP.NET Ajax
    Réponses: 1
    Dernier message: 12/01/2011, 15h18
  3. Réponses: 0
    Dernier message: 07/07/2010, 14h51
  4. liste déroulante avec une case à cocher et une image
    Par kurul1 dans le forum C++Builder
    Réponses: 4
    Dernier message: 08/03/2007, 09h54
  5. [Oracle] Remplir une liste déroulante avec une table
    Par CYCLOPE91440 dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 26/12/2006, 15h26

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