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 multiples avec tri alphabétique et suppression des doublons


Sujet :

Macros et VBA Excel

  1. #21
    Membre habitué Avatar de goninph
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2013
    Messages : 725
    Points : 184
    Points
    184
    Par défaut
    Super, nickel et encore merci



    Citation Envoyé par Thumb down Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Combobox_civilité.List = Array("Madame","Monsieur")
    [...]

  2. #22
    Membre habitué Avatar de goninph
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2013
    Messages : 725
    Points : 184
    Points
    184
    Par défaut
    Bonjour Thumb down,

    J'avance petit à petit et je me rends compte que le tri alphabétique n'est pas nécessaire dans une base de données avec plus de 3000 lignes et que cela doit ralentir l'initialization, juste ?

    Si oui, comment supprimer le tri de cette fonction, tout en conservant la suppression des doublons et des lignes vides ?

    Merci pour votre aide
    Philippe

    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
    Function ArrayList(R As Range)
    Dim Nom As String, coll As Object
    Set coll = CreateObject("System.Collections.ArrayList")
    With R.Parent
        Nom = .Name
        For Each c In .Range(R, .Cells(.Cells.Rows.Count, R.Column).End(xlUp))
        If c.Row < R.Row Then Exit For
            If CStr(c.Text) <> "" Then
                If Not coll.contains(CStr(c.Text)) Then coll.Add CStr(c.Text)
            End If
        Next
    End With
    coll.Sort
    ArrayList = coll.toarray
    'coll.Reverse
    End Function

  3. #23
    Membre chevronné Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 419
    Points : 2 178
    Points
    2 178
    Par défaut
    Bonjour,
    je revient à la première solution que je t'avais proposé!
    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
    Private Sub UserForm_Initialize()
    Me.ComboBox1.Clear
    Me.ComboBox1.Column = Lst(Range("E3"))
    End Sub
    Function Lst(R As Range)
    Dim Nom  As String,Adds As String
    With R.Parent
        Nom = .Name
    If .Cells(.Cells.Rows.Count, R.Column).End(xlUp).Row < R.Row Then Lst = Array(""): Exit Function
        Adds = Replace(.Range(R, .Cells(.Cells.Rows.Count, R.Column).End(xlUp)).Address, "$", "")
    End With
    With CreateObject("Adodb.Connection")
        .Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0;HDR=no;"""
        Lst = .Execute("Select Distinct * from [" & Nom & "$" & Adds & "] where [F1] is not null Order By [F1]").GetRows
        .Close
    End With
    End Function

  4. #24
    Membre habitué Avatar de goninph
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2013
    Messages : 725
    Points : 184
    Points
    184
    Par défaut
    Merci

  5. #25
    Membre régulier
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mai 2020
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2020
    Messages : 150
    Points : 75
    Points
    75
    Par défaut Comment structurer le code pour plusieurs combos (même plage)
    Citation Envoyé par Thumb down Voir le message
    bonjour,

    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 UserForm_Initialize()
    Me.ComboBox1.Clear
    Me.ComboBox1.List = ArrayList(Range("E3"))
    End Sub
    Function ArrayList(R As Range)
    Dim Nom As String, coll As Object
    Set coll = CreateObject("System.Collections.ArrayList")
    With R.Parent
        Nom = .Name
        For Each c In .Range(R, .Cells(.Cells.Rows.Count, R.Column).End(xlUp))
            If CStr(c.Text) <> "" Then
                If Not coll.contains(CStr(c.Text)) Then coll.Add CStr(c.Text)
            End If
        Next
    End With
    coll.Sort
    ArrayList = coll.toarray
    'coll.Reverse
    End Function
    Bonjour, bravo et merci pour cette aide si précieuse ! Je me demandais comment répliquer ce code avec une dizaine de combos (tapant sur la même plage) sans redondances et autres inutilités : pouvez-vous me montrer avec 2/3 ? Merci en tout cas pour votre temps,

  6. #26
    Membre chevronné Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 419
    Points : 2 178
    Points
    2 178
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub UserForm_Initialize(
    dim Lst,I as integer 
    Lst=ArrayList(Range("E3"))
     
    For I 1 To 10 'pour combobox1 à combobox10
    With Me.Controls("ComboBox" & i)
               .Clear
                .List = Lst
    En With
    Next
    End Sub

  7. #27
    Membre régulier
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mai 2020
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2020
    Messages : 150
    Points : 75
    Points
    75
    Par défaut
    Citation Envoyé par Thumb down Voir le message
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub UserForm_Initialize(
    dim Lst,I as integer 
    Lst=ArrayList(Range("E3"))
     
    For I 1 To 10 'pour combobox1 à combobox10
    With Me.Controls("ComboBox" & i)
               .Clear
                .List = Lst
    En With
    Next
    End Sub
    Merci beaucoup.
    Ceci dit, j'ai dû louper une marche : que trouve-t-on en "E3" (dans mon monde merveilleux, je pensais qu'une array list comprenait par exemple les valeurs que peut prendre une combo par exemple, mais si j'ai 10 combos tapant dans 10 colonnes différentes bien sûr ?) ? J'ai bien pigé que ce E3 provient du code de Gonimph mais j'ai pas trop compris sa vocation...
    Bonne soirée ! (to everybody oeuf corse)

  8. #28
    Membre chevronné Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 419
    Points : 2 178
    Points
    2 178
    Par défaut
    Bonjour,
    Un arryliste ça n'existe pas !
    Dans notre cas c'est une fonction qui retourne un tableau trié par ordre alphabétique sans doublons basé sur une plage de celles !

    J'ai mis [E1] parceque je ne connais pas le contexte mai tu peux donner [B5:B20] si le données que tu veux travailler ce trouve dans cette plage !

    Je me demandais comment répliquer ce code avec une dizaine de combos (tapant sur la même plage

  9. #29
    Membre régulier
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mai 2020
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2020
    Messages : 150
    Points : 75
    Points
    75
    Par défaut
    Citation Envoyé par Thumb down Voir le message
    Bonjour,
    Un arryliste ça n'existe pas !
    Ok merci !
    Ceci dit, d'après wiki et krosoft : "Un ArrayList est une classe qui se comporte comme un tableau. Contrairement à un tableau, un ArrayList peut changer de taille dynamiquement et peut contenir des types de données différentes."
    Donc ça a l'air d'exister !

  10. #30
    Membre chevronné Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 419
    Points : 2 178
    Points
    2 178
    Par défaut
    Un arryliste, ce que ne précise pas wiki ,est un classe DotNet !

    Oui ça existe mais faut tenir compte du langage de programmation ici VBA!

    Dans ma fonction Arryliste justement je fais appel à cette classe DotNet . Notes que cette classe ne fonctionnera pas si le framework auquel elle ce refaire n'est pas installé sur ta machine


    CreateObject("System.Collections.ArrayList")Ce n'est pas un tableau c'est une collection.

    Je l'utilise pour filtrer le doublons et trier alphabétiquement les ranges pour te retourner un Array pour alimenter une ComboBox

    Tu peux alimenter plusieurs ComboBox grâce à cette fonction en utilisant des plages de cellules différentes. Co1, col2, etc.

  11. #31
    Membre régulier
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mai 2020
    Messages
    150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2020
    Messages : 150
    Points : 75
    Points
    75
    Par défaut
    Ha ok merci encore !

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

Discussions similaires

  1. [XL-2013] Tri alphabétique et suppression de doublons
    Par DenisHen dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 11/02/2016, 12h52
  2. [ListView] ListView personnalisée avec tri alphabétique
    Par Nuzei dans le forum Composants graphiques
    Réponses: 2
    Dernier message: 02/03/2011, 12h14
  3. [XL-2003] suppression des doublons dans une Combobox
    Par karim19 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 08/10/2009, 16h42
  4. Listes : tri, suppression des doublons,"triplons" et compte
    Par yoshik dans le forum Général Python
    Réponses: 6
    Dernier message: 06/07/2009, 23h53
  5. problème avec la suppression des doublons dans arraylsit
    Par ulysse031 dans le forum Langage
    Réponses: 13
    Dernier message: 04/03/2007, 12h52

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