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 :

Classement sur deux colonnes en mettant une certaine valeur toute à la fin [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut Classement sur deux colonnes en mettant une certaine valeur toute à la fin
    Bonjour à tous,

    J'ai des points d'examens qui permettent d'obtenir grâce à des formules un % et une mention (ajourné, satisfaction,...).

    J'ai par exemple

    Dist 72,70
    Aj 53,60
    Dist 77,5
    ....
    J'aurais voulu classer d'abord par mention (ajourné, satisfaction, distinction...) et ensuite pas pourcentage.

    Il faut que tous les ajournés se trouvent en bas du classement (il ne peut pas y avoir un ajourné qui soit au-dessus d'une distinction par exemple).

    Pour cela, j'utilisais ce 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
    Sub calcul()
     
    Dim Lign As Long
    Dim Fom As Worksheet
    Set Fom = Sheets("ordre de mérites") 'on détermine la feuille de travail
    'Range("alphabétique").Copy Range("délibé") 'on copie les données
    'Range("délibec").Sort Key1:=Range("AD11"), Order1:=xlAscending 'premier tri, pour mettre les Aj en fin de liste
        With Fom 'sur la feuille de travail
            Lign = Application.Match("Aj", .Columns(24), 0) 'on cherche la première ligne "Aj"
            .Range("A12:BD" & Lign - 1).Sort Key1:=.Range("L12"), Order1:=xlDescending, Key2:=.Range( _
                "I12"), Order2:=xlDescending, Header:=xlNo
                    'on trie les non-ajournés
            .Range("A" & Lign & ":BD" & .[A65000].End(xlUp).Row).Sort Key1:=.Range("L" & Lign), Order1:=xlDescending, _
                Key2:=.Range("I" & Lign), Order2:=xlDescending, Header:=xlNo
                    'on trie les ajournés
        End With
    End Sub
    La macro "calcul" reprend le code ci-dessus.

    J'ai une erreur ici :

    incompatibilité de type
    Je mets en attaché un fichier, cela sera plus simple.

    J'aimerais donc classer la colonne AD (en mettant les aj en dessous) et ensuite par AL (%)

    Je vous remercie d'avance pour votre aide.

    beegees

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 928
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 928
    Points : 28 922
    Points
    28 922
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Sans avoir vu ton classeur, as-tu pensé au tri personnalisé ?
    Tu as un argument nommé CustomOrder de la méthode Sort
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     .Sort.SortFields.Add _
       Key:=Range("B2:B10"), _
       SortOn:=xlSortOnValues, _
       Order:=xlAscending, _
       CustomOrder:="Grande distinction,Distinction,Grande distinction,Satisfaction,Ajourné", _
       DataOption:=xlSortNormal

  3. #3
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Bonjour,

    Merci pour ta réponse.

    Je n'arrive pas à utiliser OrderCustom (et pas CustomOrder) sur ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     Range("delibec").Resize(, Range("delibec").Columns.Count + 4).Sort _
                    Key1:=Range("AR11"), Order1:=xlDescending, _
                    Key2:=Range("AQ11"), Order2:=xlDescending, _
                    Header:=xlGuess, OrderCustom:="GD,Dist,S,Aj", MatchCase:=False, _
                    Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, _
                    DataOption2:=xlSortNormal
    J'ai ce message d'erreur :

    La méthode sort de la classe Range à échouée
    As-tu une idée ?

    Merci pour l'aide.

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 928
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 928
    Points : 28 922
    Points
    28 922
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Qu'elle version d'Excel as-tu ?
    Le code que je t'ai donné fonctionne depuis la version 2007 je pense (gestion des tableaux excel).
    OrderCustom est un argument de la méthode Sort
    CustomOrder est un argument de Sort.SortFields.add
    Un autre code que j'ai testé et qui fonctionne en 2003 et 2007 mais qui nécessite la création et destruction dynamique d'une liste perso dans la procédure. Tout au moins si elle n'existe pas sur le PC.
    La table en A1:C10, l'appréciation en B (Key1), la cote en C (Key2)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     Dim myList As String
     myList = "Grande distinction,Distinction,Satisfaction,Ajourné"
     Dim myTable() As String
     myTable = Split(myList, ",")
     Application.AddCustomList ListArray:=myTable
     Range("A1:C10").Sort _
      Header:=xlGuess, _
      Key1:=Range("B2"), Order2:=xlDescending, OrderCustom:=Application.CustomListCount + 1, _
      Key2:=Range("C2"), Order1:=xlAscending
     Application.DeleteCustomList ListNum:=Application.CustomListCount

  5. #5
    Membre éprouvé
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Points : 1 277
    Points
    1 277
    Par défaut
    Bonjour,

    Cela fonctionne parfaitement.

    Je t'avoue avoir appris quelque chose aujourd'hui grâce à toi

    N'hésite pas à rejoindre mon groupe "développeurs belges" quand tu pourras :

    http://www.developpez.net/forums/group.php?groupid=280

    Bonne soirée et merci encore pour ton aide.

    beegees

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

Discussions similaires

  1. [XL-2013] Difficultés pour la création d'une macro sur deux colonnes de nombres
    Par mr_hodor dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 08/07/2014, 12h49
  2. [2.x] une clé primaire sur deux colonnes = Notice: Undefined offset: 0
    Par symfony_dev dans le forum Symfony
    Réponses: 0
    Dernier message: 16/04/2012, 22h18
  3. Réponses: 3
    Dernier message: 13/01/2012, 11h58
  4. Faire une recherche de type "contient" sur deux colonnes
    Par Sango64 dans le forum Langage SQL
    Réponses: 8
    Dernier message: 05/08/2011, 10h20
  5. Ecrire une équation sur deux colonnes
    Par evincent dans le forum Mathématiques - Sciences
    Réponses: 1
    Dernier message: 22/03/2007, 07h55

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