Tri alphabétique du contenu d'une cellule
Résolu
Baldurr
Messages postés
7
Statut
Membre
-
pijaku Messages postés 13513 Statut Modérateur -
pijaku Messages postés 13513 Statut Modérateur -
Bonjour à toutes et tous,
Je ne trouve pas de Topic correspondant : imaginons que j'ai dans la cellule A1 "techno", dans la A2 "francais" et dans la cellule A3 "maths" par exemple. Connaîtriez-vous une Macro ou Fonction qui me permette d'avoir en B1, B2 et B3 les lettres de ses mots, triés par ordre alphabétique ? En B1, nous auront "ECHNOT", en B2 "AACFINRS" et "AHMST" en B3.
Un grand merci par avance (j'avais pondu quelque chose qui marché il y a q années, mais je l'ai égaré et ça me saoule de recommencer).
Au plaisir !
Explorer 7.0</config>
Je ne trouve pas de Topic correspondant : imaginons que j'ai dans la cellule A1 "techno", dans la A2 "francais" et dans la cellule A3 "maths" par exemple. Connaîtriez-vous une Macro ou Fonction qui me permette d'avoir en B1, B2 et B3 les lettres de ses mots, triés par ordre alphabétique ? En B1, nous auront "ECHNOT", en B2 "AACFINRS" et "AHMST" en B3.
Un grand merci par avance (j'avais pondu quelque chose qui marché il y a q années, mais je l'ai égaré et ça me saoule de recommencer).
Au plaisir !
Explorer 7.0</config>
A voir également:
- Tri alphabétique du contenu d'une cellule
- Comment trier par ordre alphabétique sur excel - Guide
- Word a trouvé du contenu illisible - Guide
- Logiciel tri photo - Guide
- Fusionner deux cellules excel en gardant le contenu - Guide
- Excel cellule couleur si condition texte - Guide
3 réponses
Salut,
Une macro consisterait en :
Tu te places sur la cellule A1, ou tu as inscrit "techno", ALT+F8, exécute : TriAlpha. Le résultat en B1
Une macro consisterait en :
Sub TriAlpha()
Dim tablo() As String
Dim I As Integer, dern As Integer, Valeur As Integer
Dim temp As String, resultat As String
dern = Len(ActiveCell)
ReDim tablo(dern)
For I = 0 To UBound(tablo)
tablo(I) = Mid(ActiveCell, I + 1, 1)
Next
'sources du tri alpha : https://silkyroad.developpez.com/vba/tableaux/#LXIV-D
Do
Valeur = 0
For I = 0 To UBound(tablo) - 1
If tablo(I) < tablo(I + 1) Then
temp = tablo(I)
tablo(I) = tablo(I + 1)
tablo(I + 1) = temp
Valeur = 1
End If
Next I
Loop While Valeur = 1
For I = UBound(tablo) - 1 To 0 Step -1
resultat = resultat & tablo(I)
Next
ActiveCell.Offset(0, 1) = resultat
End Sub
Tu te places sur la cellule A1, ou tu as inscrit "techno", ALT+F8, exécute : TriAlpha. Le résultat en B1
OK, c'est assez proche de ce que cherchais (bien que très éloigné de ce que j'avais trouvé il y a qq temps). Je t'en remercie. Nota : j'ai créé un bouton et y ai affecté la macro, c'est + simple pour les tests.
Néanmoins, cela ne marche que cellule par cellule. Je vais zyeuter pour pouvoir sélectionner la plage A1:A3, executer la macro et hop, en B1:B3 apparaît le tri. Parce-que j'ai certains fichiers à + de 1000 lignes ... Je me vois mal me palucher la macro ligne par ligne :-)
Je cherche.
Merci encore, A+
Néanmoins, cela ne marche que cellule par cellule. Je vais zyeuter pour pouvoir sélectionner la plage A1:A3, executer la macro et hop, en B1:B3 apparaît le tri. Parce-que j'ai certains fichiers à + de 1000 lignes ... Je me vois mal me palucher la macro ligne par ligne :-)
Je cherche.
Merci encore, A+
Ben suffit d'ajouter une boucle du style (pour traiter toute la colonne A à partir de A2 et résultat en colonne B :
Je t'ai même "grassouillé" les lignes de code modifiées...
Dim tablo() As String
Dim I As Integer, dern As Integer, Valeur As Integer
Dim temp As String, resultat As String
Dim Ligne As Integer, DerniereLigne As Integer
DerniereLigne = Range("A65536").End(xlUp).Row
For Ligne = 2 To DerniereLigne
dern = Len(Cells(Ligne, 1).Value)
ReDim tablo(dern)
For I = 0 To UBound(tablo)
tablo(I) = Mid(Cells(Ligne, 1).Value, I + 1, 1)
Next
Do
Valeur = 0
For I = 0 To UBound(tablo) - 1
If tablo(I) < tablo(I + 1) Then
temp = tablo(I)
tablo(I) = tablo(I + 1)
tablo(I + 1) = temp
Valeur = 1
End If
Next I
Loop While Valeur = 1
For I = UBound(tablo) - 1 To 0 Step -1
resultat = resultat & tablo(I)
Next
Cells(Ligne, 2) = resultat
Next Ligne
Je t'ai même "grassouillé" les lignes de code modifiées...
Function toto(cellu As String) Dim tablo() As String Dim I As Integer, dern As Integer, Valeur As Integer Dim temp As String, resultat As String dern = Len(cellu) ReDim tablo(dern) For I = 0 To UBound(tablo) tablo(I) = Mid(cellu, I + 1, 1) Next 'sources du tri alpha : https://silkyroad.developpez.com/vba/tableaux/#LXIV-D Do Valeur = 0 For I = 0 To UBound(tablo) - 1 If tablo(I) < tablo(I + 1) Then temp = tablo(I) tablo(I) = tablo(I + 1) tablo(I + 1) = temp Valeur = 1 End If Next I Loop While Valeur = 1 For I = UBound(tablo) - 1 To 0 Step -1 resultat = resultat & tablo(I) Next toto = resultat End FunctionSuffit de placer en B1 : =toto(A1)