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

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

  • Classeur1.xls
    21.5 KB · Affichages: 83
  • Classeur1.xls
    21.5 KB · Affichages: 88
  • Classeur1.xls
    21.5 KB · Affichages: 91

JHA

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

Bonjour à tous,

Un essai assez simpliste par formule et en mode tableau pour ne pas retaper les formules en "B"

JHA
 

Pièces jointes

  • filtre substitue.xls
    38.5 KB · Affichages: 69

job75

XLDnaute Barbatruc
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

  • Tri alphanumérique(1).xls
    48 KB · Affichages: 53
Dernière édition:

alexcle

XLDnaute Nouveau
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
 

job75

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

Re,

Oui mais s'il y a des lignes avec seulement des nombres, mettre la colonne A au format Texte.

Voir fichier (2).

A+
 

Pièces jointes

  • Tri alphanumérique(2).xls
    48.5 KB · Affichages: 47

alexcle

XLDnaute Nouveau
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. :D. Je vais maintenant l'essayer sur excel 2007.
A+
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
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

  • TriAlphaNum2.xls
    39 KB · Affichages: 57
  • TriAlphaNum3.xls
    36.5 KB · Affichages: 54
Dernière édition:

job75

XLDnaute Barbatruc
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

  • Tri alphanumérique(3).xls
    47.5 KB · Affichages: 52

Discussions similaires

Statistiques des forums

Discussions
312 839
Messages
2 092 695
Membres
105 511
dernier inscrit
karimdauphins