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 :

Problème de tri alphabétique listbox à double colonne [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Mécanicien avion
    Inscrit en
    Février 2018
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Mécanicien avion

    Informations forums :
    Inscription : Février 2018
    Messages : 196
    Par défaut Problème de tri alphabétique listbox à double colonne
    Bonjour à tous,

    J'ai fait une listbox qui cherche par rapport a ce qui est trouvé dans une textbox.
    J'ai essayé de faire un tri alphabétique mais 2 erreurs se fait.

    Quand je tape un mot qui n'existe pas dans ma recherche mon with bug. (exemple: si je tape frein c'est oki mais si je tape freon cela me fait un bogage sur For I = 0 To .ListCount - 1)
    De plus, mes 2 colonnes de ma listbox se mettent par ordre alphabétique alors que j'aimerais que seul ma colonne 1 le fasse avec en colonne 2 la ligne correspondante.

    Voici mon 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
    Private Sub DonnéesF_Change()
        Dim NbLigne As Integer
        Dim Ligne As Integer
        Dim I As Byte
        Dim J As Byte
        Dim strTemp As String
     
        TraductionF.Clear
        TraductionF.ColumnCount = 2
     
        NbLigne = WorksheetFunction.CountA(Worksheets("Donnéex").Range("A:A"))
     
        If DonnéesF <> "" Then
     
            For Ligne = 2 To NbLigne
                If SupprimerAccents(Feuil6.Cells(Ligne, 1)) Like SupprimerAccents(DonnéesF) & "*" Then
                    TraductionF.AddItem Feuil6.Cells(Ligne, 1)
                    TraductionF.List(TraductionF.ListCount - 1, 1) = Feuil6.Cells(Ligne, 2)
                End If
            Next
     
            With TraductionF
                For I = 0 To .ListCount - 1
                    For J = 0 To .ListCount - 1
                        If .List(I) < .List(J) Then
                            strTemp = .List(I)
                            .List(I) = .List(J)
                            .List(J) = strTemp
                        End If
                    Next J
                Next I
            End With
     
        End If
    End Sub
    J'en profite aussi pour savoir si les doublons peuvent être écris d'une autre couleur ? En gros faire WorksheetFunction.CountIF <> 1 = Font.ColorIndex = 4

    Bonne soirée et encore merci pour votre aide.

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 540
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 540
    Par défaut
    Pourquoi réinventer la roue ?

    Avec Excel, il faut être malin.
    Met tes données dans un tableau structuré, et trie ce dernier.
    Les données de la listbox se synchroniseront automatiquement.

    PS: Ta fonction viole le SRP (https://en.wikipedia.org/wiki/Single...lity_principle).
    Divise la en plusieurs sous-fonctions

  3. #3
    Membre confirmé
    Homme Profil pro
    Mécanicien avion
    Inscrit en
    Février 2018
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Mécanicien avion

    Informations forums :
    Inscription : Février 2018
    Messages : 196
    Par défaut
    Bonjour,

    Si je comprend bien, il faut que je trouve une function qui tri ma colonne de mon tableau que j'appelle et exécute dans mon code ?
    Car j'ai deux recherche avec deux textbox. Je voudrait qu'avec la première la colonne 1 soit en ordre alphabétique et avec la 2eme la colonne 2 soit en ordre alphabétique....
    Mon tableau est sur la feuille 6 et s'appelle recherche

  4. #4
    Membre confirmé
    Homme Profil pro
    Mécanicien avion
    Inscrit en
    Février 2018
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Mécanicien avion

    Informations forums :
    Inscription : Février 2018
    Messages : 196
    Par défaut
    Citation Envoyé par deedolith Voir le message
    Pourquoi réinventer la roue ?

    Avec Excel, il faut être malin.
    Met tes données dans un tableau structuré, et trie ce dernier.
    Les données de la listbox se synchroniseront automatiquement.

    PS: Ta fonction viole le SRP (https://en.wikipedia.org/wiki/Single...lity_principle).
    Divise la en plusieurs sous-fonctions
    J'ai donc essayer de partir sur ta solution. Cela fonctionne avec une function tri et un appel à cette function.
    Le problème maintenant est que cette solution me ralenti énormément ma recherche. De plus cela me fait une sélection en B1 que je ne comprend pas.

    voici ma function :

    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 TrierFrancais()
     
        ActiveWorkbook.Worksheets("Donnéex").ListObjects("recherche").Sort.SortFields.Clear
     
        ActiveWorkbook.Worksheets("Donnéex").ListObjects("recherche").Sort.SortFields.Add2 Key:=Range("recherche[FRANÇAIS]"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
     
        With ActiveWorkbook.Worksheets("Donnéex").ListObjects("recherche").Sort
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
     
        Worksheets("En-tête").DonnéesF.Verb
    End Function
    et mon code avec appel :

    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
    Private Sub DonnéesF_Change()
        Dim NbLigne As Integer
        Dim Ligne As Integer
        Dim I As Byte
        Dim J As Byte
        Dim strTemp As String
     
        Application.Run TrierFrancais
        TraductionF.Clear
        TraductionF.ColumnCount = 2
     
        NbLigne = WorksheetFunction.CountA(Worksheets("Donnéex").Range("recherche[FRANÇAIS]"))
     
        If DonnéesF <> "" Then
     
            For Ligne = 2 To NbLigne
                If SupprimerAccents(Feuil6.Cells(Ligne, 1)) Like SupprimerAccents(DonnéesF) & "*" Then
                    TraductionF.AddItem Feuil6.Cells(Ligne, 1)
                    TraductionF.List(TraductionF.ListCount - 1, 1) = Feuil6.Cells(Ligne, 2)
                End If
            Next
     
        End If
    End Sub

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 540
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 540
    Par défaut
    Appelle directement TrierFrancais.
    Application.Run est inutile.

    Utiliser des reférences (ou With) de façon plus judicieuse ne sera pas superflu, histoire de simplifier ton code.

    A part ca, je ne voit pas ce qui peut ralentir, et si oui, dans quelles proportions ?
    Il doit y avoir un loup ailleur.

    Peux-tu joindre un fichier ?

  6. #6
    Membre confirmé
    Homme Profil pro
    Mécanicien avion
    Inscrit en
    Février 2018
    Messages
    196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Mécanicien avion

    Informations forums :
    Inscription : Février 2018
    Messages : 196
    Par défaut
    Citation Envoyé par deedolith Voir le message
    Appelle directement TrierFrancais.
    Application.Run est inutile.

    Utiliser des reférences (ou With) de façon plus judicieuse ne sera pas superflu, histoire de simplifier ton code.

    A part ca, je ne voit pas ce qui peut ralentir, et si oui, dans quelles proportions ?
    Il doit y avoir un loup ailleur.

    Peux-tu joindre un fichier ?
    J'avoue que ca commence à sortir de mes petites compétences...
    Je n'arrive pas à faire avec with.

    Comment puis-je te joindre mon fichier ? Il fait 6,22 Mo et je suis limiter à 2Mo.

  7. #7
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 540
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 540
    Par défaut
    Réduit la quantité de données ?

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

Discussions similaires

  1. [XL-2007] Tri alphabétique de trois colonnes sur une page
    Par lapaixbordel dans le forum Excel
    Réponses: 2
    Dernier message: 18/06/2018, 21h44
  2. Listbox à double colonne
    Par katoyi dans le forum VB.NET
    Réponses: 2
    Dernier message: 09/05/2008, 14h47
  3. Tri Alphabétique Listbox avec Boutons Radios
    Par ljuboja78 dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 01/05/2008, 10h55
  4. Réponses: 8
    Dernier message: 26/07/2007, 12h46
  5. Problème ListBox et colonnes
    Par Fishes83 dans le forum IHM
    Réponses: 1
    Dernier message: 08/05/2007, 09h25

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