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 trier 2 colonnes en VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de jeff1494
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 108
    Par défaut Comment trier 2 colonnes en VBA
    Bonjour à toutes et tous;
    J'aimerais savoir comment trier deux colonnes liées, à savoir que dans la colonne A j'ai des catégories d'objets, et pour chaque catégorie j'ai plusieurs type d'objets.

    • La colonne A est nommée "Categorie" et définie avec DECALER.
    • La colonne B est nommée "Typ" et définie avec DECALER.


    Je voudrais en VBA pouvoir trier les colonnes de la manière suivante :
    Tri sur la colonne A (Ascendant) PUIS sur la colonne B Ascendant également.

    Ces deux colonnes sont utilisées dans un formulaire et bien sûr il y a la possibilité d'ajouter de nouvelles valeurs soit dans la catégorie soit dans le type. Ajout nouvelle catégorie, soit ajout nouveau type objet dans une catégorie existante. A la fermeture du formulaire si la catégorie ou le type n'existent pas dans la liste alors on l'ajoute. Et donc je veut trier l'ensemble, une fois l'ajout fait.

    Je joins un fichier exemple à toutes fins utiles.
    D'avance un grand merci à tous ceux et celles qui voudront bien m'aider.

    Bonne journée à vous.

    Voici le fichier en question JFCtri.xlsm

  2. #2
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    993
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 993
    Par défaut
    Bonjour, pas sûr de bien comprendre. Tu veux trier la colonne A puis la colonne B indépendamment l'une de l'autre ?
    Si avant le tri tu as par exemple Sacs en A et Besace en B, après le tri ça pourrait être Sacs en A et Ras du cou en B ?

  3. #3
    Membre confirmé Avatar de jeff1494
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 108
    Par défaut
    Bonsoir Franc, et merci pour ta réponse.

    En fait je veux regrouper tous les éléments d'une même catégorie (triée en ordre ascendant) et pour cette catégorie tous les types d'objets (triés en ordre ascendant).

    Par exemple :

    ColA ColB
    Bijoux Autres
    Bijoux Bague
    Bijoux Boucles oreilles
    Bijoux Bracelet
    Bijoux Collier
    Bijoux Montre
    Bijoux Ras de Cou
    Chaussures Autres
    Chaussures Sport-Randonnée
    Chaussures Ville talons bas
    Chaussures Ville Talons hauts
    Déco Divers
    Déco Lampes
    Déco Statuettes


    J'espère que j'ai mieux expliqué ce que je veux.
    Merci d'avance.

  4. #4
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    993
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 993
    Par défaut
    Voilà qui devrait faire l'affaire:

    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
    Sub TrierCatEtType()
        Dim ws As Worksheet
        Dim lastRow As Long
        Dim sortRange As Range
     
        Set ws = ThisWorkbook.Worksheets("BDCAT")
     
        ' Trouver la dernière ligne avec des données dans la colonne A
        lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
     
        ' Définir la plage à trier (colonnes A et B)
        Set sortRange = ws.Range("A2:B" & lastRow)
     
        ' Trier d'abord par les catégories (colonne A) puis par les produits (colonne B)
        With ws.Sort
            .SortFields.Clear
            .SortFields.Add2 Key:=sortRange.Columns(1), _
                SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
            .SortFields.Add2 Key:=sortRange.Columns(2), _
                SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
            .SetRange sortRange
            .Header = xlYes ' Si la première ligne contient des en-têtes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .Apply
        End With
    End Sub

  5. #5
    Membre confirmé Avatar de jeff1494
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 108
    Par défaut
    Merci Franc;
    Je regarde ta solution et te tiens au courant.

  6. #6
    Membre confirmé Avatar de jeff1494
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 108
    Par défaut
    Franc;
    C'est parfait. il ne me reste plus qu'à éplucher ton code pour le comprendre.
    Un grand merci.
    Bonne soirée à toi.

Discussions similaires

  1. Réponses: 2
    Dernier message: 16/08/2011, 10h13
  2. Réponses: 7
    Dernier message: 31/10/2007, 16h42
  3. comment trier les colonnes de mon datagrid
    Par imsse dans le forum C#
    Réponses: 21
    Dernier message: 08/06/2007, 15h01

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