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 :

Tri personnalisé VBA [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Autre
    Inscrit en
    Août 2018
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Août 2018
    Messages : 17
    Par défaut Tri personnalisé VBA
    Bonjour à tous,

    Je vous solicite à nouveau pour un petit problème que je ne parviens pas à régler.
    Dans une feuille excel "Project", j'ai une plage de données de la colonne C à la colonne R.

    C10:R11 = En tête de colonnes (il y a des cellules fusionnées)
    A partir de C12 = Données à trier.

    A partir de la ligne 12, je souhaite trier mes données de la manière suivante :

    Colonne R : Tri de Z à A
    Colonne C : Tri personnalisé, avec une liste déjà créée (General, ProgM,BP, Other)

    J'ai créé la macro ci-dessous
    Elle fonctionne sur toutes mes données, sauf pour la 1ère ligne de ma plage : la ligne 12.

    Pourriez-vous m'éclairer sur ce qui cloche svp ?

    Code (Visual Basic):

    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
     
    Sub Tri()
    'Tri personnalisé
        Range("C10:C11").Select
        ActiveWorkbook.Worksheets("Project").AutoFilter.Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("Project").AutoFilter.Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("Project").AutoFilter.Sort.SortFields.Add Key:= _
            Range("R11:R163"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption _
            :=xlSortNormal
        With ActiveWorkbook.Worksheets("Project").AutoFilter.Sort
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
        ActiveWorkbook.Worksheets("Project").AutoFilter.Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("Project").AutoFilter.Sort.SortFields.Add Key:= _
            Range("C12:C163"), SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder _
            :="General,ProgM,BP,Other", DataOption:=xlSortNormal
        With ActiveWorkbook.Worksheets("Project").AutoFilter.Sort
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    End Sub
    Mille merci par avance,

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

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Décembre 2017
    Messages : 733
    Par défaut
    Bonsoir, avez vous essayez de remplacer la ligne ci dessous:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     Range("C12:C163"), SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder _
            :="General,ProgM,BP,Other", DataOption:=xlSortNormal
    Par celle-ci et testez?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Range("C11:C163"), SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder _
            :="General,ProgM,BP,Other", DataOption:=xlSortNormal
    Cordialement

  3. #3
    Expert confirmé
    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
    Par défaut
    Bonjour,

    Pour la propriété "Header" tu indiques "xlYes" donc présence des entêtes de fait la ligne n'est pas prise en compte donc, soit tu fait comme Transitoire te le propose (prise en compte des entêtes dans la plage) soit tu utilises la valeur "xlNo" pour "Header" indiquant que toute la plage doit être triée

  4. #4
    Membre averti
    Femme Profil pro
    Autre
    Inscrit en
    Août 2018
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Août 2018
    Messages : 17
    Par défaut
    Bonjour Transitoire, Bonjour Theze,

    Merci pour votre aide respective

    j'ai essayé en modifiant la plage selectionnée pour qu'elle prenne en compte mes entêtes, avec Header =xlYes
    et également essayé en sortant les entêtes de la plage, avec Header = xlNo.

    L'un comme l'autre, cela ne fonctionnait pas. Impossible de savoir pourquoi.

  5. #5
    Membre averti
    Femme Profil pro
    Autre
    Inscrit en
    Août 2018
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Août 2018
    Messages : 17
    Par défaut
    Re,

    Parce qu'avec de l'aide, on a trouvé une solution, je la poste, car cela pourrait servir à d'autres :

    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
    Sub Tri_Perso()
    Dim LastLine&, plage As Range
        ' Macro1 Macro
        With Sheets("Project")
            LastLine = .Range("r" & Rows.Count).End(xlUp).Row
            Set plage = .Range("c12:r" & LastLine)
            .Sort.SortFields.Clear
            .Sort.SortFields.Add Key:=Range("r12:r" & LastLine), _
            SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
            .Sort.SortFields.Add Key:=Range("c12:c" & LastLine), SortOn:=xlSortOnValues, _
            Order:=xlAscending, CustomOrder:="General,ProgM,BP,Other", DataOption:=xlSortNormal
     
            With .Sort
                .SetRange plage
                .Header = xlGuess
                .MatchCase = False
                .Orientation = xlTopToBottom
                .SortMethod = xlPinYin
                .Apply
            End With
        End With
    End Sub
    En revanche, aucune idée quant au pourquoi du comment cela ne fonctionnait pas avec les Header précédents.
    Peut être le Header=xlGuess ?

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

Discussions similaires

  1. [XL-2010] Tri personnalisé VBA
    Par JechercheT dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 09/02/2017, 17h47
  2. Tri personnalisé qui se lance tout seul
    Par zert84 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 01/09/2008, 12h35
  3. tri sql/vba dans formulaire ACCESS
    Par seb_thiery dans le forum Requêtes et SQL.
    Réponses: 13
    Dernier message: 13/08/2008, 13h30
  4. Tri en VBA
    Par riny8669 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 30/08/2007, 12h07
  5. [VBA-E] tri sur VBA pour Excel
    Par mariedrouin dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 21/05/2006, 13h32

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