double filtre sur excel VBA macro

jeremiek

XLDnaute Nouveau
Salut tout le monde,

Je suis face a 2 petits problèmes qui me rongent la tête depuis quelques jours alors que je suis que la réponse est très simple.

J’ai un tableau avec plusieurs colonnes et je voudrais trier l’ensemble de ces donnes. Ce JE fais une étude sur le marche des voiture. Dans la colonne E j’ai la marque des voiture et dans la colonne G leur vitesse max.

Dans un premier temps je voudrais les trier par marque et ensuite par vitesse max.

Mon code pour trier par ordre alphabetique est le suivant :

Sheets("voiture").Columns("E:E").Select
Range("C1:E53").Sort Key1:=Range("E1"), Order1:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal

Mon code pour trier par vitesse est le suivant :

Sheets("voituret").Columns("E:E").Select
Range("C1:E53").Sort Key1:=Range("E1"), Order1:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal

1er problème :
Ces codes font partie d’une plus grande macro et bizarrement quand je les copie/ colle dans la macro il ne fonctionne pas. Par contre quand il sont seuls ils fonctionnent avez-vous une idée du problème ?

2em problème :
Comment faire pour que lorsque je trie par vitesse il garde en mémoire mon tri par ordre alphabétique afin d’avoir un classement par marque de la voiture la + rapide a la moins rapide ?

J’espère avoir été assez clair.

Je vous remercie pour votre aide
 

Pierrot93

XLDnaute Barbatruc
Re : double filtre sur excel VBA macro

Bonjour,

Ce JE fais une étude sur le marche des voiture. Dans la colonne E j’ai la marque des voiture et dans la colonne G leur vitesse max.

sauf erreur, je vois pas que tu fasses référence à la colonne G dans tes macros.... il semble que ton tri doit utiliser 2 clés (key1) sur les marques et (key2) sur les vitesses...

bonne journée
@+
 

jeremiek

XLDnaute Nouveau
Re : double filtre sur excel VBA macro

Excuse moi j'ai mis dans ma seconde macro
Sheets("voituret").Columns("g:g").Select
Range("C1:g53").Sort Key1:=Range("g1"), Order1:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal

Comment tu fais pour mettre en place des keys?
 

jeremiek

XLDnaute Nouveau
Re : double filtre sur excel VBA macro

le code marche impec merci beaucoup.

parcontre il m'arrive quelque chose d'etrange. Quand je mets ce code dans une marco simple, la macro s'applique.

Parcontre qund je copie/cole le code dans une macro qui comporte deja plusieur elements excel me donne ce message: Run time error '1004': aplication defined or object defined error..

Alors que je nomem bien ma feuille comme objet avant t'as une idee?
 

jeremiek

XLDnaute Nouveau
Re : double filtre sur excel VBA macro

le code est assez long


l'idde est la suivante j'ai donc un tableau dans l'onglet tailored accounts que je copie dans TailoredAccsSort et ensuite je traite les donnes dans tailoredaccssort. La macro s'applique parfaitement sauf pour la derniere action. Celle qui trie les donnes, mais je pense avoir bien defini tous mes objets qu'est ce que tu en penses.

Merci encore


Private Sub copy_past_TM_accounts_Click()
Dim LastRow As Long

With Worksheets("tailored accounts")
LastRow = Cells(.Rows.Count, "A").End(xlUp).Row
End With

msg = " Do you want to copy past the zone from $B$1 to I" & LastRow
ans = MsgBox(msg, vbYesNo)



Worksheets("tailored accounts").Range("B1:I" & LastRow).copy Worksheets("TailoredAccsSort").Range("C1")

Sheets("TailoredAccsSort").Select
ActiveWindow.DisplayGridlines = False

Sheets("TailoredAccsSort").Columns("A:Z").Select
Sheets("TailoredAccsSort").Columns("A:Z").EntireColumn.AutoFit




Sheets("TailoredAccsSort").Columns("B:J").Select
Application.CutCopyMode = False
With Selection.Font
.Name = "arial"
.Size = 10
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
End With

Sheets("TailoredAccsSort").Columns("B:B").Select
With Selection.Interior
.ColorIndex = 43
.Pattern = xlSolid
End With

Sheets("TailoredAccsSort").Columns("G:G").Select
Selection.NumberFormat = "0.00"

Sheets("TailoredAccsSort").Columns("G:G").Select
Range("B1:J52").Sort Key1:=Range("G1"), Order1:=xlDescending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal



Sheets("TailoredAccsSort").Select
Columns("C:J").Select
Selection.Sort Key1:=Range("E2"), Order1:=xlAscending, Key2:=Range("G2") _
, Order2:=xlDescending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2 _
:=xlSortNormal
End Sub
 

Pierrot93

XLDnaute Barbatruc
Re : double filtre sur excel VBA macro

Re,
tu ne peux selectionner directement une colonne / une cellule d'une autre feuille... il faut déjà selectionner la feuille :
Code:
Sheets("NomFeuille").Select
Columns("A:Z").Select

A noter qu'en vba, les "select" sont rarement utiles...
 

Pierrot93

XLDnaute Barbatruc
Re : double filtre sur excel VBA macro

Re,

plutôt que :
Code:
Sheets("TailoredAccsSort").Select
Columns("C:J").Select
Selection.Sort Key1:=Range("E2"), Order1:=xlAscending, Key2:=Range("G2") _
, Order2:=xlDescending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2 _
:=xlSortNormal

tu peux coder ainsi :
Code:
With Sheets("TailoredAccsSort")
    .Columns("C:J").Sort Key1:=.Range("E2"), Order1:=xlAscending, Key2:=.Range("G2") _
        , Order2:=xlDescending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
        False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2 _
        :=xlSortNormal
End With
 

jeremiek

XLDnaute Nouveau
Re : double filtre sur excel VBA macro

par contre si je remplace mes colonnes par des cases je dois faire quoi car le code suivant ne fonctionne:

With Sheets("TailoredAccsSort")
.range("a3:c6").Sort Key1:=.Range("E2"), Order1:=xlAscending, Key2:=.Range("G2") _
, Order2:=xlDescending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2 _
:=xlSortNormal
 

Discussions similaires

Réponses
5
Affichages
249
Réponses
8
Affichages
178

Statistiques des forums

Discussions
312 322
Messages
2 087 278
Membres
103 507
dernier inscrit
tapis23