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. #21
    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
    Voilà,
    comme tu as mis l'exploitation du remplissage des combos dans un module, j'ai changé le code du module
    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
    Option Explicit
    'la variable public est déclarée ici
    Public cbox As String ' variable "public"
    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
    'ci-dessous, comme on est dans un module, le "me" ne passe plus, il faut préciser le nom de l'USF
    UserForm1.Controls(cbox).List = ssdoublon()
    Set Un = Nothing
    End Sub
    et dans ton USF, j'ai enlevé la déclaration de cbox
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Option Explicit
     
    Private Sub UserForm_Initialize() 'à l'initialisation de l'USF
    Dim dl As Long
    With ActiveSheet
       dl = .Range("A" & .Rows.Count).End(xlUp).Row
       cbox = "ComboBox1"
       Creer_Liste_SansDoublons .Range("A1:A" & dl) ' pour la 1ere plage
       cbox = "ComboBox2"
       dl = .Range("B" & .Rows.Count).End(xlUp).Row 'parce que moins de cellules en B
       Creer_Liste_SansDoublons .Range("B1:B" & dl) 'pour la 2eme plage
    End With
    End Sub
    maintenant pour les filtres c'est simple si tu m'en dis plus, filtrer sur quoi ?

  2. #22
    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
    J'aimerais que les listes soient filtrées par ordre croissant par exemple.

    Le fait d'avoir mis une partie dans un module est-elle moins efficace ou moins rigoureuse?

  3. #23
    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
    J'aimerais que les listes soient filtrées par ordre croissant par exemple.

    Le fait d'avoir mis une partie dans un module est-elle moins efficace ou moins rigoureuse?
    pour ta seconde question, ça ne change pas grand-chose sinon qu'il faut préciser sur quoi on travaille, dans notre exemple, on ne peut plus mettre "me.controls" mais préciser le nom de l'USF.
    pour ta 1ere question, ce n'est pas un filtre que tu veux mais un tri ?

  4. #24
    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
    oui désolé j'ai tapé un peu vite je pensais à deux choses en même temps. Un tri croissant (sachant que cela peut être soit des valeurs numériques, soit des numériques, mais toujours le même type pour une même liste).

  5. #25
    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
    rectifies comme ç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
    Option Explicit
    Public cbox As String ' variable "public"
    Sub Creer_Liste_SansDoublons(Plage As Range)
    Dim Cell As Range, cible
    Dim Un As Collection, i As Long
    Dim ssdoublon(), valeur As Long
    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
    Do 'tri croissant
       valeur = 0
       For i = UBound(ssdoublon) - 1 To 0 Step -1
          If ssdoublon(i) > ssdoublon(i + 1) Then
             cible = ssdoublon(i)
                ssdoublon(i) = ssdoublon(i + 1)
                ssdoublon(i + 1) = cible
                valeur = 1
             End If
       Next i
    Loop While valeur = 1
    UserForm1.Controls(cbox).List = ssdoublon()
    Set Un = Nothing
    End Sub

  6. #26
    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 marche impeccable je te remercie beaucoup!

    Sais tu où je pourrais trouver les commentaires qui explique cette méthode de tri sans doublons et de filtre croissant? Je suis en train de lire les tuto vba du site mais j'ai pas fini et comme j'aime bien connaître les étapes du code et aussi détaillé le ode que j'utilise (pour une maintenance future).

    Merci encore avec ça je vais pouvoir me focaliser sur d'autres points

  7. #27
    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
    Content que tu t'en sortes,
    ouvres ce lien, très bonne base :
    http://silkyroad.developpez.com/vba/tableaux/#LXIV-D

  8. #28
    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
    Ok je regarderai ça.

    Dans quelques temps, je reviendrai sûrement pour trouver de l'aide pour un gros point, j'espère que tu seras toujours dans les parages

  9. #29
    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
    Dans quelques temps, je reviendrais sûrement pour trouver de l'aide pour un gros point,
    là, tu me fais peur
    mais ne t'en fais pas, il y a du monde sur le site, ô combien plus compétent que moi et aussi disponoble, sinon plus

    Bonne nuit

  10. #30
    Membre à l'essai
    Inscrit en
    Septembre 2007
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 26
    Points : 18
    Points
    18
    Par défaut
    Bonjour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.Controls("cbox"& i).List = ssdoublon()
    Et en essayant ceci ?

    Edit : Je viens de voir en postant que la solution a été trouvée ! Désolé

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

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