Trier contenu d'1 cellule Excel

  • Initiateur de la discussion Singlar
  • Date de début
S

Singlar

Guest
Bonjour,

Je voudrais savoir s'il existe une manière de trier alphabétiquement le contenu d'une cellule à savoir des mots séparés par une virgule.

Merci pour votre aide!
 
A

andré

Guest
Salut Singlar,

Oui, mais c'est un peu long.

Il faut d'abord Convertir (Menu Données), puis Trier (Menu Données), puis Concatener (fonction).

En enregistrant la procédure, cela devient plus aisé.

Ândré.
 
M

michel

Guest
bonjour Singlar , bonjour André

ci joint un exemple par macro : les données de la cellule A1 sont extraites dans un tableau en fonction du separateur ","
ensuite le tri est effectué par la methode du Tri en bulle .


Sub ExtractionEtTriCellule()
Dim I As Integer
Dim J As Byte, K As Byte
Dim Cible As String, Val As String
Dim Tableau() As String

Cible = Range("A1") & ","
For I = 1 To Len(Cible) 'extraire donnees
J = InStr(I, Cible, ",")
K = K + 1
ReDim Preserve Tableau(K - 1)
Tableau(K - 1) = LTrim(Mid(Cible, I, J - I))
I = I + Len(Mid(Cible, I, J - I))
Next

For I = LBound(Tableau) To UBound(Tableau) 'trier
J = I
For K = J + 1 To UBound(Tableau)
If Tableau(K) <= Tableau(J) Then J = K
Next K
If I <> J Then
Val = Tableau(J): Tableau(J) = Tableau(I): Tableau(I) = Val
End If
Next I

Dim resultat As String
For I = 1 To UBound(Tableau) + 1
resultat = resultat & Tableau(I - 1) & Chr(10)
Next

MsgBox resultat, , "Resultat du tri alphabetique "
End Sub


bonne journee
michel
 
L

Lord Nelson

Guest
Salut,
Voici une possibilité de tri par macro :

Sub TriCellule()
'
' TriCellule Macro
' La fonction Split transforme une chaîne en tableau
' La fonction Join fait l'inverse
'
Dim Chn As String, Tri As Boolean, I As Integer, Tmp As String
Chn = ActiveCell.Text
If Chn = "" Then Exit Sub
TbChn = Split(Chn, ",")
If UBound(TbChn) > 0 Then
Do
Tri = False
For I = 1 To UBound(TbChn)
If TbChn(I) < TbChn(I - 1) Then
Tmp = TbChn(I - 1)
TbChn(I - 1) = TbChn(I)
TbChn(I) = Tmp
Tri = True
End If
Next
Loop While Tri = True
Chn = Join(TbChn, ",")
ActiveCell.Value = Chn
End If
'
End Sub

A+
 

Discussions similaires

Réponses
8
Affichages
138