Trier 3 colonnes et choisir celle qui est prioritaire

lcoulon

XLDnaute Occasionnel
Bonsoir,


Je cherche a effectuer un tri ( via userform ) de 3 colonnes : A, B , G.

A :contient les références , B : contient les n° de serie et G : l'emplacement
d'articles.


les lignes ne doivent pas être dissociées car sinon tout serait mélangé

je voudrai pouvoir effectuer un tri par ordre croissant mais en laissant le choix de la colonne qui serait "maitre", les 2 autres colonnes suivraient alors sans être triées.

Par exemple :

1) tri selon les N° de serie du plus petit au plus grand : A serait donc la colonne "maitre"

2) tri selon les références

ou encore ( et surtout ) :

3) tri selon l'emplacement : G serait la colonne prioritaire.

Est ce possible de faire cela via userform ( 3 boutons, 1 choix de tri / bouton )


Je ne vois pas trop comment m'y prendre car les colonnes ne sont pas adjacentes : A, B et G


Je vous remercie de votre aide,
 

Pièces jointes

  • exemple choix_tri.zip
    8.9 KB · Affichages: 22

skoobi

XLDnaute Barbatruc
Re : Trier 3 colonnes et choisir celle qui est prioritaire

Bonsoir,

Pas sur d'avoir compris entre "les 2 autres colonnes suivraient alors sans être triées.", le "maitre" et "prioritaire" mais bon, voici le code des 3 boutons à mettre dans le code de l'USF:

Code:
Private Sub CommandButton1_Click()
Range("A2:G21").Sort Key1:=Range("A3"), Order1:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal

End Sub

Private Sub CommandButton3_Click()
Range("A2:G21").Sort Key1:=Range("B3"), Order1:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal

End Sub

Private Sub CommandButton4_Click()
Range("A2:G21").Sort Key1:=Range("G3"), Order1:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal

End Sub
 

lcoulon

XLDnaute Occasionnel
Re : Trier 3 colonnes et choisir celle qui est prioritaire

Merci à tous les 2.

Robert, ça fonctionne parfaitement

Aussi, peux tu me dire comment fonctionne ce code stp ?

Code:
Private Sub UserForm_Initialize()
Set p = Sheets("Feuil1").UsedRange
Set p = p.Offset(1, 0).Resize(p.Rows.Count - 1)
End Sub

J'ai compris qu'il s'agit de décalage, mais je ne saisi pas bien le fonctionnement.

Skoobi,

tu proposes d'effectuer un range de A à G, mais comment se fait il que les colonnes C,D,E,F ne gênent pas le tri avec le code que tu proposes ?
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Trier 3 colonnes et choisir celle qui est prioritaire

Bonsoir le fil, bonsoir le forum,

la méthode ActiveSheet.UsedRange permet de sélectionner, sans aucune autre référence, les cellules utilisées d'un onglet. (Ce n'est d'ailleurs peut-être pas la mieux adaptée à ton cas si tu dois, par exemple, éditer des cellules hors tableau... mais j'ai pensé que non...)

on définit une première fois la variable p :
Code:
Set p = Sheets("Feuil1").UsedRange

Mais on veut se débarasser de la première ligne qui, étant fusionnée, aurait posé problème. On va redéfinir la variable p en se servant d'elle même. D'abord décalage d'une ligne vers le bas
Code:
Set p = p.Offset(1, 0)
et redimensionnement de la plage avec :
Code:
.Resize(nombre de lignes, nombre de colonne)
ce qui donne :
Code:
nombre de lignes = p.Rows.Count-1
si pas précisé = identique donc pas de virgule ni de valeur après puisqu'on garde le même nombre de colonnes

Sinon, en règle générale, tu obtiens un aide de qualité en sélectionnant le mot clé (ici : Resize) dans VBE et en appuyant sur la touche [F1].
 

Discussions similaires

Réponses
15
Affichages
802
Réponses
36
Affichages
2 K

Statistiques des forums

Discussions
312 176
Messages
2 085 961
Membres
103 066
dernier inscrit
bobfils