Tri selon un ordre particulier

  • Initiateur de la discussion Initiateur de la discussion marie49
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

marie49

XLDnaute Occasionnel
Bonsoir à tous,

J'ai un tri particulier à faire sur un code. Je joins un exemple...

Le code se décompose en 3 parties :
La première sur 2 caractères du style E1 ou E2 ......E4
La deuxieme est un caractère du style G,B,P,O
la troisième est un numéro d'ordre sur 2 caractères 01, 02, 03....22

Je dois faire un tri bien précis : d'abord sur la première partie, ensuite la seconde et enfin la troisième.

Mon problème vient de la deuxième partie, l'ordre à prendre en compte n'est pas celui de l'alphabet mais plutôt :
G
P
B
O

Comment dois je faire pour obtenir un tri selon l'ordre ci_dessus?

merci de vos réponses
Marie
 

Pièces jointes

Re : Tri selon un ordre particulier

Bonsoir Catrice,

Merci pour ton exmple,'ai compris le principe : on indique l'ordre sur une cellule à côté.
Si je ne souhaite pas inscrire des informations sur la feuille, peut-on passer par un tableau?

Marie
 
Re : Tri selon un ordre particulier

Bonsoir marie49
Essayez ceci :
Code:
Sub Macro1()

'

'
    For Each oCel In Range("D10:D28")
        Select Case Mid$(oCel.Value, 3, 1)
        Case "G": oCel.Value = Replace(oCel.Value2, "G", "X", 1, 1)
        Case "P": oCel.Value = Replace(oCel.Value2, "P", "Y", 1, 1)
        Case "B": oCel.Value = Replace(oCel.Value2, "B", "Z", 1, 1)
        End Select
    Next oCel
    Range("D9:D28").Sort Key1:=Range("D10"), Order1:=xlAscending, Header:=xlNo, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
    For Each oCel In Range("D10:D28")
        Select Case Mid$(oCel.Value, 3, 1)
        Case "X": oCel.Value = Replace(oCel.Value2, "X", "G", 1, 1)
        Case "Y": oCel.Value = Replace(oCel.Value2, "Y", "P", 1, 1)
        Case "Z": oCel.Value = Replace(oCel.Value2, "Z", "B", 1, 1)
        End Select
    Next oCel
End Sub
Bonne nuit !
ROGER2327
 
Re : Tri selon un ordre particulier

Bonsoir,

Code:
Sub Macro1()
  Set debut = [D10]   ' à adapter
  debut.Offset(, 1).EntireColumn.Insert
  Set plage = debut.Resize(debut.CurrentRegion.Rows.Count - 1)
  For Each c In plage
    c.Offset(, 1) = Left(c, 2) & InStr("GPBO", Mid(c, 3, 1)) & Mid(c, 4)
  Next c
  plage.Resize(, 2).Sort Key1:=debut.Offset(, 1), Order1:=xlAscending, Header:=xlGuess
  debut.Offset(, 1).EntireColumn.Delete
End Sub

JB
Formation Excel VBA JB
 

Pièces jointes

Dernière édition:
Re : Tri selon un ordre particulier

Bonsoir à tous
Comme d'habitude, la solution de BOISGONTIER est concise, rapide et élégante. Elle est certainement plus rapide que la mienne sur un nombre élevé de lignes. Un limitation toutefois : elle ne fonctionnera pas si la dernière colonne de la feuille n'est pas vide. Mais c'est rarement le cas.
À vous de voir, Marie.
Un détail : préférez Header:=xlNo à Header:=xlGuess.​
ROGER2327
 
Re : Tri selon un ordre particulier

Bonsoir à tous,

Juste pour ajouter mais un peu tard, que l'on peut aussi utiliser les listes personnalisées (outils - options - listes personnalisées) très utiles pour trier des familles de produits par exemple dans un ordre précis.

Une fois la liste définie, on fait données - trier puis options et on choisit la liste souhaitée.

L'ordre de tri des listes personnalisées est valable aussi dans les TCD.

@+

Gael
 
Re : Tri selon un ordre particulier

Bonsoir,

>Juste pour ajouter mais un peu tard, que l'on peut aussi utiliser les listes personnalisées (outils - options - listes personnalisées)

Les listes perso ne peuvent pas s'appliquer pour des parties de chaîne comme c'est le cas ici.

JB
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

M
Réponses
5
Affichages
1 K
Membre supprimé 341069
M
L
Réponses
5
Affichages
1 K
louloubru
L
P
  • Question Question
Réponses
3
Affichages
1 K
A
Réponses
0
Affichages
8 K
Arpopa
A
K
Réponses
4
Affichages
2 K
K
P
Réponses
2
Affichages
1 K
P
Retour