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 :

Filtre et tri d'une colonne


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
    Stagiaire Informatique
    Inscrit en
    Mars 2018
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Stagiaire Informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2018
    Messages : 69
    Par défaut Filtre et tri d'une colonne
    Bonjour à tous,

    Je voudrais réaliser une maccro dans excel pour pouvoir filtrer et ensuite trier à partir d'une colonne des nom de produit specifique que j'aurais précisé dans la maccro.

    Nom : excel.PNG
Affichages : 4853
Taille : 19,9 Ko

    Voila la colonne en question et ce que je voudrais c'est chercher dans toute la colonne par exemple, les transports. Du coup en manuel je filtre sa et je met tous les transports d'une autre couleur afin de pouvoir les trier par couleur et les separé et pouvoir voir la délimitation des produits que je dois vraiment prendre en compte dans mon compte rendu et mes calculs. Mais je voudrais maintenant pouvoir automatiser cela. A l'aide de maccro Excel pour que sa le fasse tout seul et que je puisse gagner du temps.


    1er question est ce possible d'appliquer ce que je veux en vba ??

    2eme question, si oui serait ce possible d'appliquer cette maccro via un bouton en automatique a tous les fichier d'un même dossier. Il faut savoir que ces fichiers sont tous identiques, ils ont la même trame avec les données qui change simplement.

    Merci

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Bonjour,

    Oui, c'est possible
    Ton problème en comporte plusieurs, par contre...
    • Travailler sur un fichier: filtre, tri, colorier...
    • Ouvrir plusieurs fichiers dans un répertoire
    • Autre ?



    Tu peux avoir une macro dans seul classeur qui s'occupe d'ouvrir les fichiers et y fait ce qu'il doit.
    Ça évite de devoir maintenir à jour plusieurs macros dans plusieurs fichiers...

    Une façon de faire pour travailler sur un autre fichier
    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
     
        Dim I As Long, nbLignes As Long
        Dim Wb As Workbook, Sh As Worksheet
     
        Set Wb = Workbooks.Open("C:\Temp\Classeur.xlsx")  'Déterminer le chemin et le nom du classeur
        Set Sh = Wb.Sheets("Feuil1") 'Déterminer le nom de la feuille ou utiliser son index ou CodeName
     
        nbLignes = Sh.Cells(Rows.Count, "A").End(xlUp).Row  'Recherche la dernière ligne
        Sh.AutoFilterMode = False   'Supprime les filtres
        Sh.Rows(1).AutoFilter       'Remet les filtres en ligne 1
        Sh.Rows(1).AutoFilter Field:=1, Criteria1:="Ton critère"    'Filtre la colonne A
     
        'Couleur sur les lignes visibles
        Sh.Range("A2:F" & nbLignes).SpecialCells(xlCellTypeVisible).Interior.ColorIndex = 6
        Sh.AutoFilterMode = False   'Supprime les filtres
        Sh.Rows(1).AutoFilter       'Remet les filtres en ligne 1
     
        'Ferme le classeur
    '    Wb.Close False  'ou True si on veut le sauvegarder
     
        Set Sh = Nothing
        Set Wb = Nothing
    Pour ce qui est d'ouvrir plusieurs fichiers, plusieurs options s'offrent.
    Tu peux ouvrir un explorateur dans lequel tu choisis ceux avec lesquels tu veux travailler (Application.GetOpenFilename)
    Tu peux lire systématiquement tous les fichiers d'un répertoire (Dir) avec ou sans conditions de noms, dates, ...
    À considérer si les fichiers sont dans des sous-répertoires (fonction récursive)
    ...
    Pour ça tu pourrais ouvrir un autre post ou encore faire une recherche dans le forum où il y a plusieurs messages là-dessus.

  3. #3
    Membre confirmé
    Homme Profil pro
    Stagiaire Informatique
    Inscrit en
    Mars 2018
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Stagiaire Informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2018
    Messages : 69
    Par défaut
    Bonjour, j'ai pu sortir du code fonctionnel mais il me reste un petit soucis.

    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
    61
    62
     
    Sub trie()
    '
    ' trie Macro
    '
     
    '
        Rows("1:1").Select
        Selection.AutoFilter
        ActiveSheet.Range("$A$1:$T$1064").AutoFilter Field:=6, Criteria1:=Array( _
            "FRAIS DE TRANSPORT", "TRANSPORT", "TRANSPORT EPROUVETTES", _
            "Transport SRUB V3 EMP2V3"), Operator:=xlFilterValues
        Rows("2:122").Select
        With Selection.Interior
            .PatternColorIndex = xlAutomatic
            .ThemeColor = xlThemeColorAccent2
            .TintAndShade = 0
            .PatternTintAndShade = 0
        End With
        ActiveSheet.Range("$A$1:$T$1064").AutoFilter Field:=6, Criteria1:= _
            "HM da  STI"
        Rows("3:3").Select
        With Selection.Interior
            .PatternColorIndex = xlAutomatic
            .ThemeColor = xlThemeColorAccent2
            .TintAndShade = 0
            .PatternTintAndShade = 0
        End With
        ActiveSheet.Range("$A$1:$T$1064").AutoFilter Field:=6, Criteria1:= _
            "REGULARISATION FACTURE"
        Rows("4:21").Select
        With Selection.Interior
            .PatternColorIndex = xlAutomatic
            .ThemeColor = xlThemeColorAccent2
            .TintAndShade = 0
            .PatternTintAndShade = 0
        End With
        ActiveSheet.Range("$A$1:$T$1064").AutoFilter Field:=6, Criteria1:= _
            "FRAIS DE TRANSPORT"
        ActiveSheet.Range("$A$1:$T$1064").AutoFilter Field:=6, Criteria1:= _
            "=FMEC COUVERCLE BAV AV PARTIE AV", Operator:=xlOr, Criteria2:= _
            "=FMEC FOND BAC CENT"
        Rows("816:830").Select
        With Selection.Interior
            .PatternColorIndex = xlAutomatic
            .ThemeColor = xlThemeColorAccent2
            .TintAndShade = 0
            .PatternTintAndShade = 0
        End With
        ActiveSheet.Range("$A$1:$T$1064").AutoFilter Field:=6
        ActiveWorkbook.Worksheets("Feuil1").AutoFilter.Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("Feuil1").AutoFilter.Sort.SortFields.Add(Range( _
            "F1:F1064"), xlSortOnCellColor, xlAscending, , xlSortNormal).SortOnValue.Color _
            = RGB(255, 255, 153)
        With ActiveWorkbook.Worksheets("Feuil1").AutoFilter.Sort
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    End Sub
    Je voudrais appliquer sa a tout mes autres fichiers ayant la même trame mais ce qui m'embête ce sont les "Rows("816:830").Select".
    Connaissez vous une manière de lui dire de sélectionner les cellules non vide au lieu qu'il sélectionne un plage précise à chaque fois ?

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Ça prendrait des points de repères pour déterminer la plage.
    Y en a-t-il? Est-ce qu'il y a des termes qui permettraient de savoir où commencer/finir cette plage?

    Aussi, dans
    ActiveSheet.Range("$A$1:$T$1064").AutoFilter Field:=6, Criteria1:=Array( _
    "FRAIS DE TRANSPORT", "TRANSPORT", "TRANSPORT EPROUVETTES", _
    "Transport SRUB V3 EMP2V3"), Operator:=xlFilterValues
    J'imagine que 1064 est la dernière ligne.
    Si cette valeur peut changer, aussi bien la mettre en variable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    nbLignes = Activesheet.Cells(Rows.count, "A").End(xlUp).row  'dernière ligne remplie en A
    ActiveSheet.Range("$A$1:$T$" & nbLignes).AutoFilter Field:=6,..............
    Et tu pourrais aussi bien ne spécifier que la ligne des filtres
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveSheet.Rows(1).AutoFilter.....

  5. #5
    Membre confirmé
    Homme Profil pro
    Stagiaire Informatique
    Inscrit en
    Mars 2018
    Messages
    69
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Stagiaire Informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2018
    Messages : 69
    Par défaut
    Merci cela fonctionen bien mais cependant il me reste une petite erreur au niveau du Row

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        Rows("1:1").Select
        Selection.AutoFilter
        nbLignes = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row
        ActiveSheet.Range("$A$1:$T$" & nbLignes).AutoFilter Field:=6, Criteria1:=Array( _
            "FRAIS DE TRANSPORT", "TRANSPORT", "TRANSPORT EPROUVETTES", _
            "Transport SRUB V3 EMP2V3"), Operator:=xlFilterValues
     
        Rows("2:nbLignes").Select ' Erreur à cette ligne
    Lorsque je remplace mon anciennement 9999 par nblignes dans le "Rows("2:nbLignes").Select " il me retourne une erreur d'incompatibilité

  6. #6
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    "2:nbLignes" est une chaîne de caractères
    Si nbLignes est une variable numérique (et est un nombre entier > 0) et que l'on veut remplacer par sa valeur dans la chaîne de caractères --->>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Rows("2:" & nbLignes).Select

Discussions similaires

  1. [LibreOffice][Tableur] Filtre et tri d'une colonne avec macro
    Par nicklebreton dans le forum OpenOffice & LibreOffice
    Réponses: 9
    Dernier message: 09/04/2018, 10h26
  2. tri sur une colonne
    Par cubepiege dans le forum Langage SQL
    Réponses: 11
    Dernier message: 13/07/2006, 12h16
  3. Réponses: 14
    Dernier message: 28/10/2005, 18h41
  4. [JSP] tri sur une colonne
    Par soony dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 28/07/2005, 15h02
  5. [C#] [WinForms] Evènement sur le tri d'une colonne
    Par beway dans le forum Windows Forms
    Réponses: 2
    Dernier message: 04/03/2005, 16h43

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