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 données d'une feuille


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
    Directeur de projet
    Inscrit en
    Novembre 2011
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2011
    Messages : 51
    Par défaut Tri données d'une feuille
    Bonjour,
    Je cherche à faire un module pour trier les données d'une feuille sur plusieurs critères.
    la feuille contient 20 colonnes
    Je veux trier sur dans l'odre suivant :
    col 1
    col 10
    col 7
    col 16
    col 19
    j'ai essayé de récupérer le code via "enregistrer Macro", mais je le trouve compliqué.
    D'autant que je le veux évolutif : paramétrage du fichier, de la feuille et des colonnes de tri.
    Qui peut m'aider ?
    Merci

  2. #2
    Membre Expert Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Par défaut
    Si tu sais trier sur une colonne, il suffit d'enchainer sur toutes les colonnes. Donne-nous le code que tu as généré jusqu'à présent qu'on puisse t'aiguiller vers une solution plus paramétrable.

    Un premier jet en attendant

    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
    Option Explicit
     
    Public Sub Test()
        Dim ws As Worksheet
        Set ws = Worksheets("Feuil1")
     
        Dim rg As Range
        Set rg = ws.Range(ws.Columns(1), ws.Columns(20))
     
        Dim listColonne(4) As Integer
        listColonne(0) = 1
        listColonne(1) = 10
        listColonne(2) = 7
        listColonne(3) = 16
        listColonne(4) = 19
     
        TrierListeColonne rg, listColonne, True
    End Sub
     
    Public Sub TrierListeColonne(ByRef zoneTriee As Range, ByRef listColonne() As Integer _
            , ByVal hasHeaders As Boolean)
        Dim i As Integer
        For i = 0 To UBound(listColonne)
            TrierColonne listColonne(i), zoneTriee, hasHeaders
        Next i
    End Sub
     
    Private Sub TrierColonne(ByVal numCol As Integer, ByRef rgCols As Range, ByVal hasHeaders As Boolean)
        If hasHeaders Then
            rgCols.Sort key1:=rgCols.Cells(2, numCol), order1:=xlAscending, header:=xlYes _
                , MatchCase:=False, Orientation:=xlTopToBottom
        Else
        rgCols.Sort key1:=rgCols.Cells(1, numCol), order1:=xlAscending, header:=xlNo _
            , MatchCase:=False, Orientation:=xlTopToBottom
        End If
    End Sub

  3. #3
    Membre confirmé
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Novembre 2011
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2011
    Messages : 51
    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
    Sub TriRDSI()
    '
    ' Tri_RDSI Macro
    '
     
    '
     
    Chemin = Application.ThisWorkbook.Path
    FeuilleRDSI = "RDSI"
    NomRDSI = "ExtractRDSI.xls"
    RDSI = Chemin & "\" & NomRDSI
     
    'récupération du numéro de la dernière ligne RDSI
    Workbooks(NomRDSI).Activate
    LastLigne = Sheets(FeuilleRDSI).[A65536].End(xlUp).Row ' si Excel 2007 et + ==> LastLigne = Sheets(FeuilleRDSI).[A999999].End(xlUp).Row
    Set plageext = Range("A2:A" & LastLigne) 'constitution de la plage RDSI de recherche des projets
        Sheets(FeuilleRDSI).Select
     
    ' paramétrage critères tri
    'Col1 = Range("A2:A" & LastLigne)
    'Col2 = Range("J2:J" & LastLigne)
    'Col3 = Range("G2:G" & LastLigne)
    'Col4 = Range("P2:P" & LastLigne)
    'Col5 = Range("S2:S" & LastLigne)
     
        Range("A1").Select
        ActiveWorkbook.Worksheets("RDSI").Sort. _
            SortFields.Clear
        ActiveWorkbook.Worksheets(FeuilleRDSI).Sort. _
            SortFields.Add Key:=Range("A2:A" & LastLigne), SortOn:=xlSortOnValues, Order:= _
            xlAscending, DataOption:=xlSortTextAsNumbers
        ActiveWorkbook.Worksheets(FeuilleRDSI).Sort. _
            SortFields.Add Key:=Range("J2:J" & LastLigne), SortOn:=xlSortOnValues, Order:= _
            xlAscending, DataOption:=xlSortNormal
        ActiveWorkbook.Worksheets(FeuilleRDSI).Sort. _
            SortFields.Add Key:=Range("G2:G" & LastLigne), SortOn:=xlSortOnValues, Order:= _
            xlAscending, DataOption:=xlSortNormal
        ActiveWorkbook.Worksheets(FeuilleRDSI).Sort. _
            SortFields.Add Key:=Range("P2:P" & LastLigne), SortOn:=xlSortOnValues, Order:= _
            xlAscending, DataOption:=xlSortNormal
        ActiveWorkbook.Worksheets(FeuilleRDSI).Sort. _
            SortFields.Add Key:=Range("S2:S" & LastLigne), SortOn:=xlSortOnValues, Order:= _
            xlAscending, DataOption:=xlSortNormal
        With ActiveWorkbook.Worksheets(FeuilleRDSI).Sort
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
        End With
    '    ActiveWorkbook.Save
    End Sub
    (voir [code] [/code] )

  4. #4
    Membre Expert Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Par défaut
    As-tu vu ma proposition ? Cela fonctionne ou tu as eu des soucis pour l'adapter ?
    Si tu as des questions ou des incompréhensions, n'hésite pas.

  5. #5
    Membre confirmé
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Novembre 2011
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2011
    Messages : 51
    Par défaut
    oui, j'ai eu et vu
    j'ai l'erreur suivante :
    Erreur d'execution '1004'
    La méthode sort de la classe range a échouée

    sur l'instruction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      If hasHeaders Then
            rgCols.Sort key1:=rgCols.Cells(2, numCol), order1:=xlAscending, Header:=xlYes _
                , MatchCase:=False, Orientation:=xlTopToBottom
        Else
        rgCols.Sort key1:=rgCols.Cells(1, numCol), order1:=xlAscending, Header:=xlNo _
            , MatchCase:=False, Orientation:=xlTopToBottom
        End If
    avec hasHeaders = vrai et numcol = 1

  6. #6
    Membre Expert Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Par défaut
    Il y a quoi sur ta feuille ?
    Je suis sous Excel 2003, mais je ne pense pas que ça puisse venir de là.

Discussions similaires

  1. [E-00] tri des données d'une feuille à partir d'une autre feuille
    Par gueguen dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 09/02/2009, 12h50
  2. Importer les données d'une feuille EXCEL
    Par codial dans le forum Bases de données
    Réponses: 4
    Dernier message: 05/02/2006, 10h07
  3. [VBA] Transmettre des données d'une feuille à l'autre
    Par Overflow64 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/12/2005, 10h58
  4. Réponses: 3
    Dernier message: 16/02/2005, 16h39
  5. [CR]Importer des données d'une feuille excel
    Par rolan dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 17/12/2004, 23h32

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