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

Excel Discussion :

Trier un tableau à partir de plusieurs cases [XL-2010]


Sujet :

Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2015
    Messages : 8
    Points : 3
    Points
    3
    Par défaut Trier un tableau à partir de plusieurs cases
    Bonjours, je suis étudiant en informatique et j'aurais besoin d'aide pour trier un tableau a partir de plusieurs cases (J'utilise excel 2010), je m'expique :

    j'ai 4 colonnes : Heure / Lieu / individus / Activité et j’aimerais à partir d'autres cellules (Tri 1 / Filtre 1 / Filtre 2...) trier ce tableau.

    Tri 1 : Heure
    Filtre 1 : Bob
    Filtre 2 : Jardin

    mon tableau contient alors uniquement les actions de Bob dans le jardin trier par date la plus récente en premier.

    Question subsidiaire :

    Bob faisant parti de la colonne individus puis-je aussi utilisé le système de telle sorte que :

    Tri 1 : Activité
    Filtre 1 : Jardin

    me donne le tableau de tout ce qui c'est passer dans le jardin grouper par activité?
    La question de manière plus précise est puis-je utiliser la même cellule de filtre 1 dans plusieurs colonnes sans rien changer?

    Merci d'avance pour vos réponses, je vous met en pj un doc excel pour l'exemple.
    Ps : Je sais faire tout ça grâce au tri personnalisé mais pas en fonction d'une case en particulier.
    Fichiers attachés Fichiers attachés

  2. #2
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2015
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Solution actuel macro :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    ActiveWorkbook.Worksheets("Feuille").AutoFilter.Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("Feuille").AutoFilter.Sort.SortFields.Add Key:= _
            Range(Rang), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
            xlSortNormal
        With ActiveWorkbook.Worksheets("Feuille").AutoFilter.Sort
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    Pour le tri ou "Rang" est la plage a trier, définition en amont pour définir "Rang" en fonction du contenu de la cellule "Tri"

    Pour le filtre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ActiveSheet.Range("$D$2:$D$10").AutoFilter Field:=3, Criteria1:=Range("J3").Value
    End Sub
    avec une case supplémentaire ou l'on demande a l'utilisateur de saisir la catégorie correspondant au filtre (J3 case source)

    Je ne suis pas contre une solution un peut moins rafistoler

  3. #3
    Membre expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 869
    Points : 3 442
    Points
    3 442
    Billets dans le blog
    1
    Par défaut
    Bonjour

    pour tes questions subsidaires je te conseille d'aller voir mon billet et on en reparle après car il me semble que créer des listes de validations me parrait plus simple.

    sinon je pige pas pourquoi tu cherches a trier ton tableau ? et met ton code entre les balises code avec #

    tu dis

    A+
    Ils ne savaient pas que c'était impossible ... du coup ils l'ont fait (Mark Twain)

    n'oubliez pas de si les messages vous aide ou sont pertinents et de mettre quand cela est !

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2015
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Je ne connais pas les listes de validation je vais me renseigner.
    Je cherche a trier le tableau car pour l'exemple je n'ai qu'un tableau de 10 ligne mais derrière j’intégrerais la solution pour le tri d'un tableau de plusieurs milliers de lignes,
    c'est la que la macro sera utile, en remplissant peu de champ, on pourra récupéré toutes les infos dont on as besoin.

  5. #5
    Membre expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 869
    Points : 3 442
    Points
    3 442
    Billets dans le blog
    1
    Par défaut
    A mon avis c'est un filtre que tu as besoin pas un tri

    ou alors j'ai mal compris
    Ils ne savaient pas que c'était impossible ... du coup ils l'ont fait (Mark Twain)

    n'oubliez pas de si les messages vous aide ou sont pertinents et de mettre quand cela est !

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2015
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Ces listes de validation sont utile en effet et complètent ma solution mais ne résolvent pas mon problème.
    J'ai besoin des deux filtre et tri mais pour ce qui est du tri mon problème est résolu.

    Mon problème avec le filtre est que, en utilisant une cellule, je ne sais pas filtrer mon tableau a partir de celle-ci.

    Ps : je le fait a partir d'une macro mais je voudrait que cela ce fasse automatiquement.

  7. #7
    Membre expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 869
    Points : 3 442
    Points
    3 442
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par MrRemix Voir le message
    Ps : je le fait a partir d'une macro mais je voudrait que cela ce fasse automatiquement.
    tu peux me montrer ta macro ? On doit pouvoir la modiffier pour la rendre automatique
    Ils ne savaient pas que c'était impossible ... du coup ils l'ont fait (Mark Twain)

    n'oubliez pas de si les messages vous aide ou sont pertinents et de mettre quand cela est !

  8. #8
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2015
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
    Sub MacroTest()
    '
    ' MacroTest Macro
    ' Filtre colones en fonction de N2/N3/N4
    '
    ' Touche de raccourci du clavier: Ctrl+p
    '
        If Range("N2") = "Ferme" Then
            Rang1 = "$C$2:$C$10"
            Fie1 = "2"
            src1 = Range("J2").Value
        End If
        If Range("N2") = "Salarié" Then
            Rang1 = "$D$2:$D$10"
            Fie1 = 3
            src1 = Range("J3").Value
        End If
        If Range("N2") = "Activité" Then
            Rang1 = "$E$2:$E$10"
            Fie1 = 4
            src1 = Range("J4").Value
         End If
         'XXXXXXXXXXXXXXXXXXXXXXXX
        If Range("N3") = "Ferme" Then
            Rang2 = "$C$2:$C$10"
            Fie2 = 2
            src2 = Range("J2").Value
         End If
        If Range("N3") = "Salarié" Then
            Rang2 = "$D$2:$D$10"
            Fie2 = 3
            src2 = Range("J3").Value
         End If
        If Range("N3") = "Activité" Then
            Rang2 = "$E$2:$E$10"
            Fie2 = 4
            src2 = Range("J4").Value
         End If
        'XXXXXXXXXXXXXXXXXXXXXXXX
        If Range("N4") = "Ferme" Then
            Rang3 = "$C$2:$C$10"
            Fie3 = 2
            src3 = Range("J2").Value
         End If
        If Range("N4") = "Salarié" Then
            Rang3 = "$D$2:$D$10"
            Fie3 = 3
            src3 = Range("J3").Value
         End If
        If Range("N4") = "Activité" Then
            Rang3 = "$E$2:$E$10"
            Fie3 = 4
            src3 = Range("J4").Value
         End If
     
        If Rang1 <> "" Then ActiveSheet.Range(Rang1).AutoFilter Field:=Fie1, Criteria1:=src1
        If Rang2 <> "" Then ActiveSheet.Range(Rang2).AutoFilter Field:=Fie2, Criteria1:=src2
        If Rang3 <> "" Then ActiveSheet.Range(Rang3).AutoFilter Field:=Fie3, Criteria1:=src3
    End Sub
    Je viens de me rendre compte que cette macro serrai déjà beaucoup mieux avec des else if mais bon ca ne change pas le problème.

  9. #9
    Membre expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 869
    Points : 3 442
    Points
    3 442
    Billets dans le blog
    1
    Par défaut
    Bon alors effectivement il y a des soucis
    1) Je suis ARCHI contre les raccroucis clavier surtout quand l'appli est adressée à des utilisateurs! Tu ne peux pas savoir les raccourcis qu'ils utilisent !
    En effet il exise un certain nombre de raccourcis clavier mais si tu affectes un raccourcis a une macro c'est le raccourcis macro qui prime

    exemple1 : Ctrl + P lance normalement l'impression
    si tu mets Ctrl + P a ta macro le raccroucis lancera ta macro et pas l'impression ...

    exemple2 : Ctrl + S lance la sauvegarde du classeur imagine que tu affectes a une macro de suppression le raccourcis Ctrl + S ....
    Lorsque que l'on fait une modif par macro on ne peut pas l'annuler donc le seul moyen de s'en sortir c'est de quitter sans sauvegarder en ayant
    bien entendu perdu toutes le modifs avant l'enregistrement !!!

    Donc si tu veux éviter les foudres de tes utilisateurs oubli définitivement les raccourcis clavier !

    2) ton code ne peut pas marcher parce que tu definis une plage d'une colonnes et tu demmandes la deuxième ou troisième colonne

    vois mon classeur que je te joint il répond a ton problème.


    Filtrage.xlsm



    regardes les commentaires que j'ai mis dans le code

    tout fonctionne grace a un bouton mais avant d'automatiser plus dis moi si cela te conviens

    A+
    Ils ne savaient pas que c'était impossible ... du coup ils l'ont fait (Mark Twain)

    n'oubliez pas de si les messages vous aide ou sont pertinents et de mettre quand cela est !

  10. #10
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2015
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Merci pour cette réponse, j'avais déjà résolu mes problèmes avant mais tes commentaires dans le code m'on appris quelques trucs intéressant et utile.

    J'ai en revanche en poussant mon projet plus loins rencontré un autre problème : Je tente de filtrer mon tableau (colonne des heures) pour des valeurs comprise entre deux cellules (je veut toutes les actions s'étant dérouler entre 8h et 9h, ces deux valeurs étant ranger dans deux cellules distinctes).

    Ma macro rempli bien le filtre de la colonne mais me cache tout, et si je revalide le filtre manuellement (clic fleche -> Filtres Numériques -> Entre... -> Clic Ok) cela fonctionne.

    Comment résoudre ce problème?
    Cela viens il de la macro?
    Y as t'il une fonction permettant de validé tout les filtres du tableau?

    Je joins le fichier exemple.Cas d'usagetest2.xlsm

    Encore merci pour l'aide que tu m'apporte.
    ++

    Ps : Je suis d'accord avec toi pour les raccourcis clavier mais ne t'en fait pas cela est uniquement pour mon confort personnel, ils seront enlever a la fin du dev, j'ai rajouter des bouton si tu péfère les utilisé

  11. #11
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    voici pour ton problème d'affichage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub testtemp()
     
    Selection.AutoFilter Field:=1, Criteria1:=">=" & Format(CDate(Range("H4").Value), "hh:mm:ss"), Operator:=xlAnd, Criteria2:="<=" & Format(CDate(Range("I4").Value), "hh:mm:ss")
     
    End Sub
    petite remarque constructive (ne le prend pas mal) : tu utilises des "Selection" / "activesheet" / "Range" non rattachés à des feuilles / autres monstruosités // à tout bout de champs

    il faut vraiment de la rigueur dans ton code, et plus particulièrement quand on manipule des Objets Range / sheets etc...

  12. #12
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2015
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Merci beaucoup pour la réponse,

    Je ne le prend pas mal je te remercie meme pour ta remarque je suis débutant dans les macros excel et c'est pour cela que c'est le bazar dans mon code car je m'aide des solutions a droite a gauche
    Je part de ce pas tester ta solution, et si tu peut me donner deux trois conseils pour structurer mon code je suis preneur et avec grand plaisir.

    C'est en prenant des coup de pied au cul que l'on avance dans la bonne direction

  13. #13
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Les bases c'est :

    - mettre "option explicit" en haut de chaque module : ça t'oblige à déclarer tes variables
    - éviter de faire des "Select" sur une plage pour ensuite utiliser un "Selection.action" : on fait directement Plage.action
    - quand on manipule des objets, on essaye au maximum de le rattacher à ses parents, par exemple

    écrira toto ... dans la feuille active !

    il faut donc bien indiquer à VBA la feuille à laquelle tu fait référence
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("Feuil1").Range("A1") = "toto"
    cet exemple fonctionnera tout le temps ... sauf si tu as deux classeurs ouverts avec un "Feuil1" dans les deux classeurs : Ca écrira dans le "Feuil1" du classeur actif !
    donc la sécurité c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks("NomduClasseur").Worksheets("Feuil1").Range("A1") = "toto"
    et encore là, on peut avoir des surprises (merci Marc L )
    En effet, on a bien référencé totalement notre cellule ... mais on a juste oublié d'indiquer à quelle propriété de la cellule on affecte la valeur de "toto" ... ce qui peut encore générer des ambiguïté
    donc ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks("NomduClasseur").Worksheets("Feuil1").Range("A1").Value = "toto"

    C'est en raison de cette rigueur qu'il devient préférable de travailler avec des variables pour contenir les objets :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim MaPlage as Range
    Set MaPlage = Workbooks("NomduClasseur").Worksheets("Feuil1").Range("A1")

    et là t'es tranquille, tu utilises MaPlage sans surcharger d'écriture ton code

    Voilà les bases ... je te conseille de bien potasser les tutoriels de manipulation des variables

    y'a pleins d'autres choses !!

    - les boucles : pour ne pas écrire 200 lignes qui font la même action et qu'on peut généraliser
    - les With / End With : tu fais un "With MaPlage" pour faire référence à MaPlage sans l'écrire à nouveau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim MaPlage as Range
    Set MaPlage = Workbooks("NomduClasseur").Worksheets("Feuil1").Range("A1")
     
    With MaPlage
        .Value = "TOTO"
        .Font.Bold = True  ' on met le texte en gras
    End With

    j'espère t'avoir mis l'eau à la bouche, quand on maîtrise tout ça, coder en VBA devient artistique

  14. #14
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2015
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Un grand merci à tout ceux qui ont participé a la résolution de mon problème.
    Merci aussi pour ce petit tuto de base de code qui me permettrons de faire un travail de meilleur qualité.

    Cordialement,
    Moi

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

Discussions similaires

  1. [XL-2010] Automatisation d'un tableau à partir de plusieurs onglets
    Par diamondogs dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 05/03/2015, 14h59
  2. Réponses: 2
    Dernier message: 05/09/2008, 13h04
  3. tableau croisé à partir de plusieurs classeurs
    Par sambinapas dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 05/12/2007, 20h20
  4. Trier un tableau de plusieurs type de classes.
    Par storm_2000 dans le forum Collection et Stream
    Réponses: 8
    Dernier message: 14/01/2007, 15h50
  5. Excel : Générer un tableau a partir de plusieurs
    Par Groov dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/08/2006, 19h34

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