Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Tri alphanumerique

9 réponses
Avatar
Pierre.M
Bonjour a tous,

j'ai un petit soucis pour trier des nombres de la forme, soit "nombre
simples", soit "nombre+lettre".

Je voudrais obtenir le resultat suivant sans compliquer la saisie
1-1A-1B... 2-2A... 10-10A... 99-99A...100-100A-100B... Le tout en
colonne A (je ne veux pas utiliser 2 colonnes 1/A).

Quelqu'un saurait il m'ecrire une macro si necessaire?

Merci a tous pour votre aide.

Pierre

9 réponses

Avatar
Daniel
Bonsoir.
Essaie :

Sub tri()
Dim Plage As Range, c As Range
Set Plage = Range("A1", Range("A65536").End(xlUp))
For Each c In Plage
c.Value = CStr(c.Value) & " *"
Next c

Plage.Sort [A1]
For Each c In Plage
c.Value = Left(c.Value, Len(c.Value) - 4)
Next c
End Sub

Cordialement.
Daniel
<Pierre.M> a écrit dans le message de news:
448c4a14$0$909$
Bonjour a tous,

j'ai un petit soucis pour trier des nombres de la forme, soit "nombre
simples", soit "nombre+lettre".

Je voudrais obtenir le resultat suivant sans compliquer la saisie
1-1A-1B... 2-2A... 10-10A... 99-99A...100-100A-100B... Le tout en colonne
A (je ne veux pas utiliser 2 colonnes 1/A).

Quelqu'un saurait il m'ecrire une macro si necessaire?

Merci a tous pour votre aide.

Pierre



Avatar
Pierre.M
Merci Daniel de m'avoir propose ta macro. Helas si elle trie, l'ordre
n'est pas bon... (100B avant 10B ou 9 et 99A apres 100...).

Cordialement.

Pierre



On 2006-06-11 21:40:24 +0200, "Daniel" said:

Bonsoir.
Essaie :

Sub tri()
Dim Plage As Range, c As Range
Set Plage = Range("A1", Range("A65536").End(xlUp))
For Each c In Plage
c.Value = CStr(c.Value) & " *"
Next c

Plage.Sort [A1]
For Each c In Plage
c.Value = Left(c.Value, Len(c.Value) - 4)
Next c
End Sub

Cordialement.
Daniel
<Pierre.M> a écrit dans le message de news:
448c4a14$0$909$
Bonjour a tous,

j'ai un petit soucis pour trier des nombres de la forme, soit "nombre
simples", soit "nombre+lettre".

Je voudrais obtenir le resultat suivant sans compliquer la saisie
1-1A-1B... 2-2A... 10-10A... 99-99A...100-100A-100B... Le tout en
colonne A (je ne veux pas utiliser 2 colonnes 1/A).

Quelqu'un saurait il m'ecrire une macro si necessaire?

Merci a tous pour votre aide.

Pierre




Avatar
JB
Bonjour,

http://cjoint.com/?gmfUXbjbo3

Sub Tri()
Set champ = Range([A1], [A1].End(xlDown))
champ.ClearComments
For Each c In champ
c.AddComment
c.Comment.Text Text:=CStr(c)
If Application.IsNumber(c) Then
c.Value = String(4 - Len(c), "0") & c & "-"
Else
c.Value = String(6 - Len(c), "0") & c
End If
Next c
champ.Sort [A1]
For Each c In champ
c.Value = c.Comment.Text
Next c
champ.ClearComments
End Sub

Cordialement JB


Bonjour a tous,

j'ai un petit soucis pour trier des nombres de la forme, soit "nombre
simples", soit "nombre+lettre".

Je voudrais obtenir le resultat suivant sans compliquer la saisie
1-1A-1B... 2-2A... 10-10A... 99-99A...100-100A-100B... Le tout en
colonne A (je ne veux pas utiliser 2 colonnes 1/A).

Quelqu'un saurait il m'ecrire une macro si necessaire?

Merci a tous pour votre aide.

Pierre


Avatar
Papy Bernard
Slt,

De Pierre.M

Merci Daniel de m'avoir propose ta macro. Helas si elle trie, l'ordre
n'est pas bon... (100B avant 10B ou 9 et 99A apres 100...).

j'ai un petit soucis pour trier des nombres de la forme, soit
"nombre simples", soit "nombre+lettre".

Je voudrais obtenir le resultat suivant sans compliquer la saisie
1-1A-1B... 2-2A... 10-10A... 99-99A...100-100A-100B... Le tout en
colonne A (je ne veux pas utiliser 2 colonnes 1/A).




Ce que tu demandes est rien moins qu'impossible. Pourquoi ?

Le tri se fait sur le poids respectif et successif de chaque caractère -son
code- dans la chaîne de caractères

Code 0 ==> 48
Code 1 ==> 49
...
Code 9 ==> 57

Code A ==> 65
....
code Z ==> 90

100 ==> 49,48,48
10B ==> 49,48,66
99A ==> 57,57,65

C'est la raison pour laquelle, lorsque l'on souhaite trier des fichiers dont
le nom correspond à une date, il faut enregistrer selon le format
(aa)aammjj.

--
A+
Papy Bernard (RTCien malgré lui)



Avatar
JB
Bonjour,

Il me semble que cette solution fonctionne:

http://cjoint.com/?gmfUXbjbo3

Sub Tri()
Set champ = Range([A1], [A1].End(xlDown))
champ.ClearComments
For Each c In champ
c.AddComment
c.Comment.Text Text:=CStr(c)
If Application.IsNumber(c) Then
c.Value = String(4 - Len(c), "0") & c & "-"
Else
c.Value = String(6 - Len(c), "0") & c
End If
Next c
champ.Sort [A1]
For Each c In champ
c.Value = c.Comment.Text
Next c
champ.ClearComments
End Sub

Cordialement JB




Slt,

De Pierre.M

Merci Daniel de m'avoir propose ta macro. Helas si elle trie, l'ordre
n'est pas bon... (100B avant 10B ou 9 et 99A apres 100...).

j'ai un petit soucis pour trier des nombres de la forme, soit
"nombre simples", soit "nombre+lettre".

Je voudrais obtenir le resultat suivant sans compliquer la saisie
1-1A-1B... 2-2A... 10-10A... 99-99A...100-100A-100B... Le tout en
colonne A (je ne veux pas utiliser 2 colonnes 1/A).




Ce que tu demandes est rien moins qu'impossible. Pourquoi ?

Le tri se fait sur le poids respectif et successif de chaque caractère -son
code- dans la chaîne de caractères

Code 0 ==> 48
Code 1 ==> 49
...
Code 9 ==> 57

Code A ==> 65
....
code Z ==> 90

100 ==> 49,48,48
10B ==> 49,48,66
99A ==> 57,57,65

C'est la raison pour laquelle, lorsque l'on souhaite trier des fichiers d ont
le nom correspond à une date, il faut enregistrer selon le format
(aa)aammjj.

--
A+
Papy Bernard (RTCien malgré lui)





Avatar
Clément Marcotte
Laisse le faire. Il vient ici parce qu'il cherche des lecteurs. Il n'a
probablement jamais ouvert Excel de sa vie. Lui, la seule chose qu'il
connaisse c'est MS-DOS et Framework. (Pas le Framework .net mais l'antiquité
qui ne se trouve que chez les antiquaires sous 3 pieds de poussières.)

"JB" a écrit dans le message de news:

Bonjour,

Il me semble que cette solution fonctionne:

http://cjoint.com/?gmfUXbjbo3

Sub Tri()
Set champ = Range([A1], [A1].End(xlDown))
champ.ClearComments
For Each c In champ
c.AddComment
c.Comment.Text Text:=CStr(c)
If Application.IsNumber(c) Then
c.Value = String(4 - Len(c), "0") & c & "-"
Else
c.Value = String(6 - Len(c), "0") & c
End If
Next c
champ.Sort [A1]
For Each c In champ
c.Value = c.Comment.Text
Next c
champ.ClearComments
End Sub

Cordialement JB




Slt,

De Pierre.M

Merci Daniel de m'avoir propose ta macro. Helas si elle trie, l'ordre
n'est pas bon... (100B avant 10B ou 9 et 99A apres 100...).

j'ai un petit soucis pour trier des nombres de la forme, soit
"nombre simples", soit "nombre+lettre".

Je voudrais obtenir le resultat suivant sans compliquer la saisie
1-1A-1B... 2-2A... 10-10A... 99-99A...100-100A-100B... Le tout en
colonne A (je ne veux pas utiliser 2 colonnes 1/A).




Ce que tu demandes est rien moins qu'impossible. Pourquoi ?

Le tri se fait sur le poids respectif et successif de chaque
caractère -son
code- dans la chaîne de caractères

Code 0 ==> 48
Code 1 ==> 49
...
Code 9 ==> 57

Code A ==> 65
....
code Z ==> 90

100 ==> 49,48,48
10B ==> 49,48,66
99A ==> 57,57,65

C'est la raison pour laquelle, lorsque l'on souhaite trier des fichiers
dont
le nom correspond à une date, il faut enregistrer selon le format
(aa)aammjj.

--
A+
Papy Bernard (RTCien malgré lui)





Avatar
Clément Marcotte
"Papy Bernard" a écrit dans le message de news:

Slt,

De Pierre.M

Merci Daniel de m'avoir propose ta macro. Helas si elle trie, l'ordre
n'est pas bon... (100B avant 10B ou 9 et 99A apres 100...).

j'ai un petit soucis pour trier des nombres de la forme, soit
"nombre simples", soit "nombre+lettre".

Je voudrais obtenir le resultat suivant sans compliquer la saisie
1-1A-1B... 2-2A... 10-10A... 99-99A...100-100A-100B... Le tout en
colonne A (je ne veux pas utiliser 2 colonnes 1/A).




Ce que tu demandes est rien moins qu'impossible. Pourquoi ?

Le tri se fait sur le poids respectif et successif de chaque
caractère -son code- dans la chaîne de caractères

Code 0 ==> 48
Code 1 ==> 49
...
Code 9 ==> 57

Code A ==> 65
....
code Z ==> 90

100 ==> 49,48,48
10B ==> 49,48,66
99A ==> 57,57,65

C'est la raison pour laquelle, lorsque l'on souhaite trier des fichiers
dont le nom correspond à une date, il faut enregistrer selon le format
(aa)aammjj.

--
A+
Papy Bernard (RTCien malgré lui)






Avatar
Clément Marcotte
En passant le vieux, on attend toujours la manière facile d'imprimer des
cartes de visite dans Word. Tu sais, l'ancêtre, les 2 ou 3 pramètres à
changer et cela va tout seul...


"Papy Bernard" a écrit dans le message de news:

Slt,

De Pierre.M

Merci Daniel de m'avoir propose ta macro. Helas si elle trie, l'ordre
n'est pas bon... (100B avant 10B ou 9 et 99A apres 100...).

j'ai un petit soucis pour trier des nombres de la forme, soit
"nombre simples", soit "nombre+lettre".

Je voudrais obtenir le resultat suivant sans compliquer la saisie
1-1A-1B... 2-2A... 10-10A... 99-99A...100-100A-100B... Le tout en
colonne A (je ne veux pas utiliser 2 colonnes 1/A).




Ce que tu demandes est rien moins qu'impossible. Pourquoi ?

Le tri se fait sur le poids respectif et successif de chaque
caractère -son code- dans la chaîne de caractères

Code 0 ==> 48
Code 1 ==> 49
...
Code 9 ==> 57

Code A ==> 65
....
code Z ==> 90

100 ==> 49,48,48
10B ==> 49,48,66
99A ==> 57,57,65

C'est la raison pour laquelle, lorsque l'on souhaite trier des fichiers
dont le nom correspond à une date, il faut enregistrer selon le format
(aa)aammjj.

--
A+
Papy Bernard (RTCien malgré lui)






Avatar
Pierre.M
Bonsoir et merci a tous pour votre aide (et desole d'avoir reveille un
vieux different...).

JB ta macro fonctionne tout a fait dans le sens que je souhaitais (Ce
n'est pas la premiere fois que tu me depanne d'ailleurs).

Le seul probleme c'est que je pensais que ce serait faisable sans "-"
entre nombre et lettre. nous avons tous l'habitude de saisir ces
numeros ainsi dans tous types de documents, et il me semble complique
pour les utilisateurs de penser a mettre "-" juste dans ce tableau...
Dommage. Je vais reflechir a un autre moyen.

En tous cas, merci encore.

Pierre



On 2006-06-11 18:51:36 +0200, Pierre.M said:

Bonjour a tous,

j'ai un petit soucis pour trier des nombres de la forme, soit "nombre
simples", soit "nombre+lettre".

Je voudrais obtenir le resultat suivant sans compliquer la saisie
1-1A-1B... 2-2A... 10-10A... 99-99A...100-100A-100B... Le tout en
colonne A (je ne veux pas utiliser 2 colonnes 1/A).

Quelqu'un saurait il m'ecrire une macro si necessaire?

Merci a tous pour votre aide.

Pierre