Sort Dynamique en VBA ?

ZeMygale

XLDnaute Nouveau
Hello Everybody,

J'ai encore un soucis de tri mais peut-être n'est ce pas faisable...(ça marche avec DB2 et cobol ou pl1 (pour ceux qui connaissent:D) mais Vba....

Le but du jeu est de créer un tri dynamique en fonction du choix dans une combobox. Dans cette combox, on trouve une liste de tris de 1 à 5 critères; ex. : "Urgence;Asc|Num_Demande;Asc"

Le prog. récupère cetet valeur, la décortique et voici ce qui en ressort :
OrdreTri = "Key1:=Range("C4"), Order1:=xlAscending, Key2:=Range("A4"), Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2:=xlSortNormal" ---> tout est créé en dynamique et jusqe là, ça fonctionne

Le hic (on y arrive), c'est que la ligne de code suivant ne fonctionne pas (erreur 1004) :
Selection.Sort OrdreTri
idem avec Selection.Sort (OrdreTri)
Par contre, si je colle l'ordre de tri en dur dans le prog, ça fonctionne...les coupables sont donc les "" de la string OrdreTri.

Il y a-t-il possibilité de passer cet ordre de tri dynamiquement ou dois-je me taper toutes les possibilités à la mimine ?:confused::(
d'autant qu'il y a 15 critères possibles et 2 sens pour chaque (Asc, Desc) avec possibilité de 1 à 5 critères par tri....ça commence à faire du monde:eek:

Merci pour vos solutions,

ZeMygale
 

porcinet82

XLDnaute Barbatruc
Re : Sort Dynamique en VBA ?

Salut,

Peut etre ne suis je pas encore réveillé oiu completement a coté de la plaque, mais ton code de tri devrait etre de ce type (en supposant que la palge a trier soit A1:C40) :
Range("A1:C40").Sort Key1:=Range("C4"), Order1:=xlAscending, Key2:=Range("A4"), Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2:=xlSortNormal

Donc plutot que de mettre les cellules C4 et A4 en clé de tri, pourquoi ne mets-tu pas la valeur des combo ?

Dis moi si je par dans le bon sens ou non :confused:

@+
 

Spitnolan08

XLDnaute Barbatruc
Re : Sort Dynamique en VBA ?

Bonjour,

Je ne comprends pas du tout ton problème :
Dans tous les cas tu es obligé de te
taper toutes les possibilités à la mimine
Il faut que tu les saisisse d'une façon ou d'une autre tes critères...Asc/Desc... En tout cas avec l'extrait de code que tu nous sers qui est totalement déconnecté de tout support.

Cordialement

Edit : Re Porcinet : bienvenue au club des "déplaqués"...
 

ZeMygale

XLDnaute Nouveau
Re : Sort Dynamique en VBA ?

Bonjour Porcinet82, Spitnolan08, le Forum,

Apparemment, je n'ai pas été trop clair dans mon explication et vous m'en voyez désolé...

J'ai créé un Userform qui permet à l'utilisateur de choisir un tri existant ou de créer un tri suivant ses besoins (style le formulaire de "Données/Trier" d'Excel). Pour la création, il peut choisir 5 critères max parmi les 15 potentiels et choisir le sens (Asc/Desc) pour chaque critère.

Son tri est enregistré sous la forme : Urgence;Asc|Num_Demande;Asc

Losque l'utilisateur a choisi le tri qu'il voulait (dans la combobox), j'ai une routine qui découpe "Urgence;Asc|Num_Demande;Asc" en "Urgence;Asc" et "Num_Demande;Asc" puis génère automatiquement l'ordre de tri (je rapelle que je ne sais pas à l'avance quel tri va être sélectionné et qu'il peut y avoir de 1 à 5 critères).

Tout cela fonctionne.

J'ai donc OrdreTri = "Key1:=Range("C4"), Order1:=xlAscending, Key2:=Range("A4"), Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2:=xlSortNormal".

Mon problème est simplement de faire accepter OrdreTri à Selection.Sort .
Selection.Sort OrdreTri => ne fonctionne pas
Selection.Sort (OrdreTri) => ne fonctionne pas

Un ordre totalement paramétré fonctionne avec les ancêtres (Pl1, Cobol, Db2) donc je me dis qu'il devrait fonctionner en Vba...utopie de débutant ?

Merci pour votre aide

ZeMygale
 

porcinet82

XLDnaute Barbatruc
Re : Sort Dynamique en VBA ?

re,

Désolé, mais moi je ne comprends toujours rien :confused:
Je ne vois pas pourquoi tu veux passer OrdreTri à Selection.Sort ? Si tu fais ca, le tri et forcement figé nan??? Ou alors mes neurones sont trop imbibés a cause de l'anniv d'hier soir pour que je comprenne :cool:

@+
 

ZeMygale

XLDnaute Nouveau
Re : Sort Dynamique en VBA ?

Encore moi :D

Bon, j'ai fait subir une grosse cure d'amaigrissement au .xls et voici le résultat qui devrait vous permettre de mieux voir ce que je fais et ce qui coince.

Le blocage se situe dans la Sub Tri (original, non ?) au niveau du Selection.Sort.

S'il n'y a pas de solution pour faire avancer la bête tel quel, il faudra que j'envisage de limiter le paramétrage au range et order...

Dites moi ce que vous en pensez...
Merci,
ZeMygale

P.S.: je n'ai rien optimisé au niveau code donc pas d'inquiétude...
 

Pièces jointes

  • Equipe GCC Suivi des évolutions CHANGEMAN bis.zip
    41.6 KB · Affichages: 32
  • Equipe GCC Suivi des évolutions CHANGEMAN bis.zip
    41.6 KB · Affichages: 29
  • Equipe GCC Suivi des évolutions CHANGEMAN bis.zip
    41.6 KB · Affichages: 31

Spitnolan08

XLDnaute Barbatruc
Re : Sort Dynamique en VBA ?

Bonsoir,

Je te propose de modifier ton code pour l'adapter à cette formulation qui fonctionne :
Code:
Sub trif()
FunctionTri Range("C2"), Range("A2"), Range("Q2"), xlAscending, xlAscending, xlDescending, xlTopToBottom
End Sub

Private Function FunctionTri(K1 As Range, K2 As Range, K3 As Range, O1 As XlSortOrder, O2 As XlSortOrder, O3 As XlSortOrder, Orient As XlSortOrientation)
Range("A2:T12").Select
Selection.Sort Key1:=K1, Order1:=O1, Key2:=K2, Order2:=O2, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=Orient, DataOption1:=xlSortNormal, DataOption2:=xlSortNormal
End Function
Cela t'amène à repenser ton appli mais te permet des tris dynamiques...

Cordialement
 

ZeMygale

XLDnaute Nouveau
Re : Sort Dynamique en VBA ?

Bonjour Spitnolan08, Porcinet82, le Forum,

Merci pour la solution, je l'ai testée et elle fonctionne bien.

Par contre entre temps, après pls heures de grattage de tête:D, j'ai trouvé la solution suivante qui me paraît pas trop mal...

C'est très certainement perfectible mais cela fonctionne bien en l'état.

@+ et Merci,
ZeMygale
 

Pièces jointes

  • Equipe GCC Suivi des évolutions CHANGEMAN bis.zip
    41 KB · Affichages: 32
  • Equipe GCC Suivi des évolutions CHANGEMAN bis.zip
    41 KB · Affichages: 37
  • Equipe GCC Suivi des évolutions CHANGEMAN bis.zip
    41 KB · Affichages: 35

Discussions similaires

L
Réponses
0
Affichages
1 K
L
L
Réponses
3
Affichages
25 K
M
Réponses
1
Affichages
877
M
A
Réponses
10
Affichages
12 K
Anynoor
A
C
Réponses
2
Affichages
1 K
C

Statistiques des forums

Discussions
312 609
Messages
2 090 193
Membres
104 449
dernier inscrit
Miguel937