Trier sous excel 2007 ou excel 2003 de lettres suivi de chiffres

  • Initiateur de la discussion Initiateur de la discussion alexcle
  • 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 !

alexcle

XLDnaute Nouveau
Bonsoir,
Je me permet de vous contacter car je n'arrive pas à résoudre un problème. Je souhaite comme indiqué dans l'exemple trier des données constituées de lettres et de chiffres. J'arrive effectivement à trier sur les lettres mais ensuite je n'arrive pas à le faire sur les chiffres .

CD1
CD11
CD2
CD22

alors que je voudrai avoir : CD1, CD2, CD11, CD22.

D'avance merci pour votre aide
 

Pièces jointes

Re : Trier sous excel 2007 ou excel 2003 de lettres suivi de chiffres

Bonjour alexcle, JHA,

Cette macro insère des zéros devant les nombres pour qu'il y ait toujours 10 chiffres pour le tri :

Code:
Sub Trier()
Dim tablo, zero(), i&, t, n As Byte, j As Byte
tablo = [A1].CurrentRegion.Columns(1)
ReDim zero(1 To UBound(tablo), 1 To 2)
For i = 1 To UBound(tablo)
  t = tablo(i, 1)
  n = 0
  For j = 1 To Len(t) 'repérage des nombres
    If IsNumeric(Mid(t, j, 1)) Then
      While IsNumeric(Mid(t, n + j, 1))
        n = n + 1
      Wend
      Exit For
    End If
  Next
  zero(i, 1) = j: zero(i, 2) = 10 - n 'caractéristiques des zéros insérés
  tablo(i, 1) = Application.Replace(t, j, 0, String(10 - n, "0")) 'insertion des zéros
Next
Application.ScreenUpdating = False
[A1].CurrentRegion.Columns(1) = tablo
[A:A].Insert '2 colonnes auxiliaires
[A:A].Insert
[A1].Resize(UBound(zero), 2) = zero
[A1].CurrentRegion.Sort [C1], Header:=xlYes 'tri
tablo = [A1].CurrentRegion
For i = 1 To UBound(tablo) 'suppression des zéros
  tablo(i, 3) = Application.Replace(tablo(i, 3), tablo(i, 1), tablo(i, 2), "")
Next
[A1].CurrentRegion = tablo
[A:B].Delete
End Sub
Fichier joint.

Edit : bien sûr, s'il est possible que le tableau soit vide, ajouter en début de macro :

Code:
If [A1].CurrentRegion.Rows.Count = 1 Then Exit Sub 'sécurité
A+
 

Pièces jointes

Dernière édition:
Re : Trier sous excel 2007 ou excel 2003 de lettres suivi de chiffres

Bonjour à tous,
merci pour vos réponses, je vais les essayer toutes et je reviens vers vous pour vous indiquer ce que je vais choisir. La première soluce de job75 est basé sur des chiffres, je vais voir si cela marche avec des lettres en premier mais je ne suis pas sûr. Dans tous les cas, la solution est proche.
Merci encore
 
Re : Trier sous excel 2007 ou excel 2003 de lettres suivi de chiffres

Bonjour Job75,
Je viens d'essayer ta dernière macro et cela marche bien sur excel 2003. C'est exactement ce que je cherchais. 😀. Je vais maintenant l'essayer sur excel 2007.
A+
 
Re : Trier sous excel 2007 ou excel 2003 de lettres suivi de chiffres

Bonjour,

Voir PJ

Code:
Sub triAlphANum()
  [b:b].Insert
  For Each c In Range([A2], [a65000].End(xlUp))
    n = Num(c, 1)
    c.Offset(, 1) = Replace(c, n, Format(n, "00000"))
  Next c
  Range("A2").CurrentRegion.Select
  Selection.Offset(1).Resize(Selection.Rows.Count - 1).Select
  Selection.Sort Key1:=[B2]
  [b:b].Delete
End Sub

Function Num(chaine, n)
  Set obj = CreateObject("vbscript.regexp")
  obj.Global = True
  obj.Pattern = "\d+"
  Set a = obj.Execute(chaine)
  If a.Count > 0 Then Num = a(n - 1) Else Num = ""
End Function

-Si plusieurs séquences numériques.

Code:
Sub triAlphANumV2()
  [B:B].Insert
  For Each c In Range([A2], [a65000].End(xlUp))
    i = 1
    P = 1
    tmp = c.Value
    Do
       n = Num(c.Value, i)
       If n <> "" Then
         P = InStr(P, tmp, n)
         tmp = Left(tmp, P - 1) & Format(n, "00000") & Mid(tmp, P + Len(n))
         P = P + 6
         i = i + 1
       End If
    Loop Until n = ""
    c.Offset(, 1) = tmp
  Next c
  Range("A2").CurrentRegion.Sort Key1:=[B2], Header:=xlYes
  [B:B].Delete
End Sub

Function Num(chaine, n)
  Set obj = CreateObject("vbscript.regexp")
  obj.Global = True
  obj.Pattern = "\d+"
  Set a = obj.Execute(chaine)
  If a.Count > n - 1 Then Num = a(n - 1) Else Num = ""
End Function

JB
 

Pièces jointes

Dernière édition:
Re : Trier sous excel 2007 ou excel 2003 de lettres suivi de chiffres

Bonjour JB,

Bien vu l'utilisation des expressions régulières, Jean-Noël et Jean-Marie vont être contents.

Et merci car tu m'as permis de me rendre compte que je compliquais inutilement.

Voici avec une bonne utilisation de la colonne auxiliaire :

Code:
Sub Trier()
Dim tablo, i&, t, n As Byte, j As Byte
Application.ScreenUpdating = False
[B:B].Insert 'colonne auxiliaire
tablo = [A1].CurrentRegion.Columns("A:B")
For i = 1 To UBound(tablo)
  t = tablo(i, 1)
  n = 0
  For j = 1 To Len(t) 'repérage des nombres
    If IsNumeric(Mid(t, j, 1)) Then
      While IsNumeric(Mid(t, n + j, 1))
        n = n + 1
      Wend
      Exit For
    End If
  Next
  tablo(i, 2) = Application.Replace(t, j, 0, String(10 - n, 0)) 'insertion des zéros
Next
[A1].CurrentRegion.Columns("A:B") = tablo
[A1].CurrentRegion.Sort [B1], Header:=xlYes 'tri
[B:B].Delete
End Sub
Fichier (3).

A+
 

Pièces jointes

- 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

Réponses
8
Affichages
561
Retour