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. #1
    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 Combobox multiples avec tri alphabétique et suppression des doublons
    Bonjour,

    J'ai trouvé ce code qui fonctionne à merveille avec un combobox, comment répéter ce code pour charger les autres combobox lors de l'initialisation du Userform ?

    J'ai dupliqué le code en changeant la source des datas, mais le combobox2 reçoit les 2 sources de data ...

    J'ai 26 combobox à initialiser

    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
    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
    Private Sub UserForm_Initialize()
    Dim a As Variant
    Dim f As Variant
    Dim i As Variant
    Dim bd As Variant
    Dim mondico As Variant
    Dim temp As Variant
            Set f = Sheets("DATA_Interventions")
            Set mondico = CreateObject("Scripting.Dictionary")
            a = f.Range("E3:E" & f.[A65000].End(xlUp).Row)   ' tableau a(n,1) pour rapidité
            For i = LBound(a) To UBound(a)
              If a(i, 1) <> "" Then mondico(a(i, 1)) = ""
            Next i
            '--avec tri
            temp = mondico.keys
            Call Tri(temp, LBound(temp), UBound(temp))
            Me.ComboBox1.List = temp
     
             a = f.Range("F3:F" & f.[A65000].End(xlUp).Row)   ' tableau a(n,1) pour rapidité
            For i = LBound(a) To UBound(a)
              If a(i, 1) <> "" Then mondico(a(i, 1)) = ""
            Next i
            '--avec tri
            temp = mondico.keys
            Call Tri(temp, LBound(temp), UBound(temp))
            Me.ComboBox2.List = temp
    End Sub
    Private Sub BT_OK_Click()
        Sheets("Fiche_travail").Range("A2") = ComboBox1
    End Sub
    Sub Tri(a, gauc, droi) ' Quick sort
    Dim ref As Variant
    Dim g As Variant
    Dim d As Variant
    Dim temp As Variant
      ref = a((gauc + droi) \ 2)
      g = gauc: d = droi
      Do
         Do While a(g) < ref: g = g + 1: Loop
         Do While ref < a(d): d = d - 1: Loop
         If g <= d Then
            temp = a(g): a(g) = a(d): a(d) = temp
            g = g + 1: d = d - 1
         End If
       Loop While g <= d
       If g < droi Then Call Tri(a, g, droi)
       If gauc < d Then Call Tri(a, gauc, d)
    End Sub

  2. #2
    Membre expérimenté Avatar de Transitoire
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Décembre 2017
    Messages
    724
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Décembre 2017
    Messages : 724
    Points : 1 454
    Points
    1 454
    Par défaut
    Bonjour, vous nous présentez un code, c'est parfait, mais sans préciser si c'est celui qui fonctionne à merveille ou celui que vous avez modifié???
    Vous devriez nous mettre les deux, ainsi nous n'aurions pas besoin d'une boule de cristal pour deviner
    Cordialement
    On a deux vies, la deuxième commence quand on se rend compte qu'on n'en a qu'une.
    Confucius

  3. #3
    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,

    Dans le code ci-dessous, j'ai dupliqué le code en changeant la source des datas, mais le combobox2 reçoit les 2 sources de data de la colonne E et F ...

    Comment modifier ce code pour charger les 26 autres combobox lors de l'initialisation du Userform ?

    Merci

  4. #4
    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,

    Voici le code modifié pour les 26 ComboBox nommés CombBox1, ComboBox2, ..., ComboBox26.
    mais le combobox2 reçoit les 2 sources de data de la colonne E et F ...
    Il te faut vider le dictionnaire avec "RemoveAll" sinon, tu te retrouve avec toutes les données des colonnes :
    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
     
    Private Sub UserForm_Initialize()
     
        Dim f As Worksheet
        Dim MonDico As Object
        Dim a As Variant
        Dim temp As Variant
        Dim I As Long
        Dim J As Integer
     
        Set f = Sheets("DATA_Interventions")
     
        Set MonDico = CreateObject("Scripting.Dictionary")
     
        'boucle sur les 26 ComboBox
        For J = 1 To 26
     
            'déplace la source de colonne en colonne à partir de la colonne E (1 + 4 = 5)
            a = f.Range(f.Cells(3, J + 4), f.Cells(Rows.Count, J + 4).End(xlUp)) ' tableau a(n,1) pour rapidité
     
            For I = LBound(a) To UBound(a)
                If a(I, 1) <> "" Then MonDico(a(I, 1)) = ""
            Next I
     
            '--avec tri
            temp = MonDico.keys
            Call Tri(temp, LBound(temp), UBound(temp))
     
            Me.Controls("ComboBox" & J).List = temp
     
            'ici, il est impératif de vider le dictionnaire car sinon, tu te retrouves avec le problème que tu soulèves !
            MonDico.RemoveAll
     
        Next J
     
    End Sub

  5. #5
    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
    Bonsoir,
    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()
    'Lst Me.ComboBox1, Sheets("DATA_Interventions").Range("E3")
    'Lst Me.ComboBox2, Sheets("DATA_Interventions").Range("G3")
    For i = 1 To 26
       Lst Me.Controls("ComboBox" & i), Sheets("DATA_Interventions").Range("E3").Offset(, i - 1)
    Next
    End Sub
     
    Sub Lst(Ls As Object, R As Range)Dim Nom As String
    With R.Parent
        Nom = .Name
        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;"""
        Ls.Column = .Execute("Select Distinct * from [" & Nom & "$" & Adds & "] Order By [F1]").GetRows
        .Close
    End With
    End Sub

  6. #6
    Membre du Club
    Homme Profil pro
    aucune
    Inscrit en
    Août 2019
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Août 2019
    Messages : 58
    Points : 65
    Points
    65
    Par défaut
    Bonsoir le forum
    Bonsoir goninph, Transitoire, THese & Thumb down

    Tu peux essayer comme cela (Reprise d'un code de Jacques BOISGONTIER) :
    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
    Private Sub UserForm_Initialize()
      Set MonDico = CreateObject("Scripting.Dictionary")
      Set plage = Feuil1.Range("e3:e" & Feuil1.Range("e65000").End(xlUp).Row)
     
      For Each c In plage
         If Not MonDico.Exists(c.Value) Then MonDico.Add c.Value, c.Value
      Next c
      Me.ComboBox1.List = MonDico.items
     
            '--avec tri
            temp = MonDico.keys
            Call Tri(temp, LBound(temp), UBound(temp))
            Me.ComboBox1.List = temp
     
           Set MonDico = CreateObject("Scripting.Dictionary")
            Set plage = Feuil1.Range("f3:f" & Feuil1.Range("f65000").End(xlUp).Row)
      For Each c In plage
         If Not MonDico.Exists(c.Value) Then MonDico.Add c.Value, c.Value
      Next c
      Me.ComboBox2.List = MonDico.items
     
            '--avec tri
            temp = MonDico.keys
            Call Tri(temp, LBound(temp), UBound(temp))
            Me.ComboBox2.List = temp
    End Sub
    Bonne soirée à toutes & à tous
    @+ Ericcool02

  7. #7
    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 à tous et merci,

    J'ai opté pour la solution de Ericcool02.

    Les données sont triées et sans doublons, par contre si il y a une ou plusieurs lignes vides, il y aura un choix vide, est possible de le suppirmer ?
    Merci pour votre aide
    Philippe


    Citation Envoyé par Ericcool02 Voir le message
    Bonsoir le forum
    Bonsoir goninph, Transitoire, THese & Thumb down

    Tu peux essayer comme cela (Reprise d'un code de Jacques BOISGONTIER) :
    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
    Private Sub UserForm_Initialize()
      Set MonDico = CreateObject("Scripting.Dictionary")
      Set plage = Feuil1.Range("e3:e" & Feuil1.Range("e65000").End(xlUp).Row)
     
      For Each c In plage
         If Not MonDico.Exists(c.Value) Then MonDico.Add c.Value, c.Value
      Next c
      Me.ComboBox1.List = MonDico.items
     
            '--avec tri
            temp = MonDico.keys
            Call Tri(temp, LBound(temp), UBound(temp))
            Me.ComboBox1.List = temp
     
           Set MonDico = CreateObject("Scripting.Dictionary")
            Set plage = Feuil1.Range("f3:f" & Feuil1.Range("f65000").End(xlUp).Row)
      For Each c In plage
         If Not MonDico.Exists(c.Value) Then MonDico.Add c.Value, c.Value
      Next c
      Me.ComboBox2.List = MonDico.items
     
            '--avec tri
            temp = MonDico.keys
            Call Tri(temp, LBound(temp), UBound(temp))
            Me.ComboBox2.List = temp
    End Sub
    Bonne soirée à toutes & à tous
    @+ Ericcool02

  8. #8
    Membre du Club
    Homme Profil pro
    aucune
    Inscrit en
    Août 2019
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Août 2019
    Messages : 58
    Points : 65
    Points
    65
    Par défaut
    Re le forum
    Re le fil

    Essaie ceci pour retirer les "vides" :

    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
    Private Sub UserForm_Initialize()
      Set MonDico = CreateObject("Scripting.Dictionary")
      Set plage = Feuil1.Range("e3:e" & Feuil1.Range("e65000").End(xlUp).Row)
     
      For Each c In plage
      If c.Value <> "" And Not MonDico.Exists(c.Value) Then
      MonDico.Add c.Value, c.Value
       Me.ComboBox1.List = MonDico.items
     
    End If
        Next c
        '--avec tri
            temp = MonDico.keys
            Call Tri(temp, LBound(temp), UBound(temp))
            Me.ComboBox1.List = temp
     
           Set MonDico = CreateObject("Scripting.Dictionary")
           Set plage = Feuil1.Range("f3:f" & Feuil1.Range("f65000").End(xlUp).Row)
      For Each c In plage
       If c.Value <> "" And Not MonDico.Exists(c.Value) Then
       MonDico.Add c.Value, c.Value
     
      Me.ComboBox2.List = MonDico.items
    End If
      Next c
      '--avec tri
            temp = MonDico.keys
          Call Tri(temp, LBound(temp), UBound(temp))
         Me.ComboBox2.List = temp
      End Sub
    Bonne après-midi à toutes & à tous
    @+ Ericcool02

  9. #9
    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
    Hello,

    Suppression des doublons OK
    Tri de A à Z OK
    Suppression totale des cellules vides OK

    Problème lorsqu'il n'y a pas de données empêche l'initialisation de l'Userform

    Faut pas vous prendre la tête, on peut vivre avec une ligne vide

    Merci et bonne nuit
    Philippe

  10. #10
    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
    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

  11. #11
    Membre du Club
    Homme Profil pro
    aucune
    Inscrit en
    Août 2019
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Août 2019
    Messages : 58
    Points : 65
    Points
    65
    Par défaut
    Bonjour le fil
    Bonjour Thumb down

    Excellent travail. Tout y est dans un minimum de code. J'achète .... euh j'archive.
    @+ Ericcool02

  12. #12
    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
    Hello,

    Merci, comment modifier, car E3 est sur une autre feuille

    Merci
    Philippe

  13. #13
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.ComboBox1.List = ArrayList(Sheets("DATA_Interventions").Range("E3"))

  14. #14
    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
    ou si toutes les données sont sur la même feuille, c'est correct ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    With Sheets("DATA_Interventions")
                Me.ComboBox_Interv_Civilite.Clear
                Me.ComboBox_Interv_Civilite.List = ArrayList(Range("I3")) 'Voir Function ArrayList(R As Range)
                Me.ComboBox_Interv_Nom.Clear
                Me.ComboBox_Interv_Nom.List = ArrayList(Range("L3")) 'Voir Function ArrayList(R As Range)
    End With

  15. #15
    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,

    Il y a un soucis lorsque il n'y a pas de donnée dans la colonne.
    La Fonction renvoie les données de la cellule en dessus de la ligne 3, soit les titres

    Merci
    Philippe

  16. #16
    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
    désolé!
    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
    après le With il faut un [.]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    With R.Parent
        SheetName= .Name
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    With Sheets("DATA_Interventions")
                Me.ComboBox_Interv_Civilite.Clear
                Me.ComboBox_Interv_Civilite.List = ArrayList(​.Range("I3")) 'Voir Function ArrayList(R As Range)
                Me.ComboBox_Interv_Nom.Clear
                Me.ComboBox_Interv_Nom.List = ArrayList(.Range("L3")) 'Voir Function ArrayList(R As Range)
     End With

  17. #17
    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
    Un très grand merci pour cet excellent travail c'est fabuleux merci

    J'ai encore 2 questions :

    Pour la Combobox_civilité Madame Monsieur, comment le charger avec ce 2 mots écrits dans le code
    Pour la Combobox_NPA, j'aimerai la remplacer par une textbox qui serait alimentée automatiquement par le Combobox_Ville, sachant que le NPA est dans la colonne R et la ville dans la colonne S.

    Bon appétit et encore merci
    Philippe

  18. #18
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Combobox_civilité.List = Array("Madame","Monsieur")
    Combobox_NPA, j'aimerai la remplacer par une textbox Lebel qui serait alimentée automatiquement par le Combobox_Ville,


    Combobox_NPA
    Nouveau Parti Anticapitaliste?

    Numéro postal d'acheminement

    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 Combobox_Ville_Change()
    Dim inx As Long
    inx = SerchXls(Sheets("DATA_Interventions").Range("A:A"), Sheets("DATA_Interventions").Range("A2"), Combobox_Ville.Text, True) 'Colonne Ville!
    If inx > 0 Then Label1.Caption = Sheets("DATA_Interventions").Cells(inx, "R")
    End Sub
     
    Function SerchXls(MyPlage As Range, MyCellule As Range, strRecherche, EntierCell As Boolean) As Long  On Error Resume Next
    Dim CellEntrier As Integer
    If EntierCell = True Then CellEntrier = xlWhole Else CellEntrier = xlPart
    SerchXls = 0
       SerchXls = MyPlage.Cells.Find(what:=strRecherche, After:=MyCellule, LookIn:=xlFormulas, LookAt _
            :=CellEntrier, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
            False, SearchFormat:=EntierCell).Row
      If SerchXls <= MyCellule.Row Then SerchXls = 0
    End Function
    Citation Envoyé par Ericcool02 Voir le message
    Bonjour le fil
    Bonjour Thumb down

    Excellent travail. Tout y est dans un minimum de code. J'achète .... euh j'archive.
    @+ Ericcool02
    a ton service!

  19. #19
    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 infiniment, pas encore pu tester, je suis en déplacement.

    Le vba n'ayant plus aucun secret pour vous, pourriez-vous me donner un coup de main sur ce fil de discussion ?

    https://www.developpez.net/forums/d2...resse-cellule/

    J'ai hâte de pouvoir modifier mon code avec vos propositions

    Bonne soirée
    Meilleures salutations
    Philippe

  20. #20
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 951
    Points
    55 951
    Billets dans le blog
    131
    Par défaut
    Salut.

    Citation Envoyé par goninph Voir le message
    [...]

    Le vba n'ayant plus aucun secret pour vous[...]

    Il faut noter que l'astuce de Thumb Down, pour efficace qu'elle soit, n'est pas du vba, mais réside dans l'utilisation d'une bibliothèque externe, ici une partie du framework DOT.NET. Il faut donc que ce framework soit installé sur la machine de l'utilisateur (ce qui, je pense, est le cas sur toutes les machines utilisant un Windows "moderne" comme OS). Risquent d'être exclues les ordinateurs tournant sous Mac, par exemple

    Il faut donc être prudent avec l'utilisation de ces outils, comme pour toute connexion à une librairie externe (Scripting pour le File System Object ou le Dictionary, par exemple). Personellement, je privilégie toujours les outils du VBA, quitte à se créer "sa" bibliothèque d'outils génériques à réutiliser chaque fois que le besoin le nécessite.

    Qui plus est, en travaillant sur Excel, l'alimentation d'une liste devrait normalement s'appuyer sur une conception de classeur bien pensée dans laquelle les données alimentant la liste devraient se trouver dans une table de données, déjà triée et dédoublonnée, éventuellement avec les outils natifs d'Excel.

    Cette remarque rejoint celle-ci, dans une discussion du même demandeur, relative à la conception et l'architecture d'une solution pérenne avec Excel/VBA. S'évertuer à tenter de développer quelque chose de pérenne, stable et évolutif sur une conception foireuse de classeur Excel est au minimum du temps perdu. Et je persiste à dire qu'avoir besoin de trier et dédoublonner la source d'une combobox ou d'un listbox relève, dans 99% des cas, d'un problème d'analyse et de conception.

    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

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

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