Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/11/2011, 10h55   #1
Invité de passage
 
Homme
Directeur de projet
Inscription : novembre 2011
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

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

Informations forums :
Inscription : novembre 2011
Messages : 6
Points : 0
Points : 0
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
cdurep est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2011, 10h58   #2
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

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

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
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 :
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
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2011, 11h45   #3
Invité de passage
 
Homme
Directeur de projet
Inscription : novembre 2011
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

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

Informations forums :
Inscription : novembre 2011
Messages : 6
Points : 0
Points : 0
Code :
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] )
cdurep est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2011, 13h34   #4
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

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

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
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.
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2011, 11h11   #5
Invité de passage
 
Homme
Directeur de projet
Inscription : novembre 2011
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

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

Informations forums :
Inscription : novembre 2011
Messages : 6
Points : 0
Points : 0
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 :
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
cdurep est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2011, 11h17   #6
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

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

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
Il y a quoi sur ta feuille ?
Je suis sous Excel 2003, mais je ne pense pas que ça puisse venir de là.
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2011, 11h29   #7
Invité de passage
 
Homme
Directeur de projet
Inscription : novembre 2011
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

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

Informations forums :
Inscription : novembre 2011
Messages : 6
Points : 0
Points : 0
rien d'extraordinaire
ce sont des données extraitent d'un référentiel share point sous excel
au format tableau
il ya 15000 lignes
je suis effectivement sous excel 2010
cdurep est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2011, 11h34   #8
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

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

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
L'utilisation de Sort, ne doit pas être exactement la même (on s'en rend compte d'ailleurs en regardant ta macro créée par l'enregistreur). Il faudrait adapter ma procédure TrierColonne, mais je n'ai pas de 2010 sous la main.
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2011, 15h42   #9
Invité de passage
 
Homme
Directeur de projet
Inscription : novembre 2011
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

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

Informations forums :
Inscription : novembre 2011
Messages : 6
Points : 0
Points : 0
J'ai modifié, mais tout comme la macro générée, elle se déroule sans bug, mais le trin'a pas lieu !

Code :
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
Option Explicit
 
Public Sub Test()
    Dim ws As Worksheet
    Set ws = Worksheets(1)
    Dim FeuilleRDSI As String
    FeuilleRDSI = Worksheets(1).Name
 
    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
 
    ActiveWorkbook.Worksheets("RDSI").Sort. _
        SortFields.Clear
 
    TrierListeColonne rg, listColonne, True, FeuilleRDSI
 
    With ActiveWorkbook.Worksheets("RDSI").Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
    End With
End Sub
 
Public Sub TrierListeColonne(ByRef zoneTriee As Range, ByRef listColonne() As Integer _
        , ByVal hasHeaders As Boolean, FeuilleRDSI)
    Dim i As Integer
    For i = 0 To UBound(listColonne)
        TrierColonne listColonne(i), zoneTriee, hasHeaders, FeuilleRDSI
    Next i
End Sub
 
Private Sub TrierColonne(ByVal numCol As Integer, ByRef rgCols As Range, ByVal hasHeaders As Boolean, FeuilleRDSI)
    If hasHeaders Then
    ActiveWorkbook.Worksheets(FeuilleRDSI).Sort. _
        SortFields.Add Key:=Cells(2, numCol), SortOn:=xlSortOnValues, Order:= _
        xlAscending, DataOption:=xlSortTextAsNumbers
 
    Else
    ActiveWorkbook.Worksheets(FeuilleRDSI).Sort. _
        SortFields.Add Key:=Cells(1, numCol), SortOn:=xlSortOnValues, Order:= _
        xlAscending, DataOption:=xlSortTextAsNumbers
    End If
End Sub
cdurep est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2011, 16h02   #10
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

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

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
Par défaut Avis aux utilisateurs d'Excel 2010

Je n'ai pas le 2010, je ne peux donc pas vérifier ce qui se passe mal. Il faut peut-être lancer une action après avoir défini le sortField.
J'espère que quelqu'un d'autre pourra t'aider.
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2011, 16h57   #11
Invité de passage
 
Homme
Directeur de projet
Inscription : novembre 2011
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

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

Informations forums :
Inscription : novembre 2011
Messages : 6
Points : 0
Points : 0
OK, pas de souci, j'ai une solution de contournement en attendant
je continue à chercher
Merci de ton aide, j'ai appris deux trois truc
@+
cdurep est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h40.


 
 
 
 
Partenaires

Hébergement Web