XL 2016 Comment mettre les lettres d'un mot par ordre alphabétique ?

franic

XLDnaute Nouveau
Bonjour,
il y aurait-il une formule pour remettre les lettres d'un mot par ordre alphabétique ?
Comme dans le fichier joint.
Merci d 'avance.
 

Pièces jointes

  • ordre alphabet.xlsx
    9.8 KB · Affichages: 26

Staple1600

XLDnaute Barbatruc
Bonjour le fil

Glané dans mes archives de mai 2003
Une fonction VBA personnalisée (dont la paternité n'est pas mienne)
VB:
Function SortCharacters(theString As String) As String
    Dim currentChar As String
    Dim sourceNum As Integer
    Dim destNum As Integer
    For sourceNum = 1 To Len(theString)
        currentChar = Mid(theString, sourceNum, 1)
        If sourceNum = 1 Then
            SortCharacters = currentChar
        Else
            destNum = 1
            While destNum <= Len(SortCharacters) And currentChar > Mid(SortCharacters, destNum, 1)
                destNum = destNum + 1
            Wend
            SortCharacters = Left(SortCharacters, destNum - 1) & currentChar & Mid(SortCharacters, destNum)
        End If
    Next sourceNum
End Function
Si en A1, on a : azur
En B1: =SortCharacters(A1)
renverra aruz
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Curieusement, si c'était pour pour les exercices de scrabble de l'autre discussion, ce serait bien plus facile, avec le code déjà en place, de n'avoir qu'une liste de mots et d'en proposer chaque fois une anagramme. Mais si c'est ce que vous voulez je vais y réfléchir, mais ce n'est pas extrêmement évident
 

Modeste geedee

XLDnaute Barbatruc
Bonjour le fil

Glané dans mes archives de mai 2003
Une fonction VBA personnalisée (dont la paternité n'est pas mienne)
;) la même avec option de tri
VB:
Option Compare Text

Function SortString(ByVal iRange, Optional Croissant As Boolean = True)
'Trevor Shuttleworth, mpep, modifié fs, mpfe
Dim i%, j%, sTemp$

  For j = 1 To Len(iRange) - 1
    For i = 1 To Len(iRange) - 1
      If Mid(iRange, i, 1) > Mid(iRange, i + 1, 1) Then
        sTemp = Mid(iRange, i, 1)
        Mid(iRange, i, 1) = Mid(iRange, i + 1, 1)
        Mid(iRange, i + 1, 1) = sTemp
      End If
    Next
  Next
 
  If Croissant = False Then
    For i = Len(iRange) To 1 Step -1
      SortString = SortString & Mid(iRange, i, 1)
    Next
    Exit Function
  End If
 
  SortString = iRange
 
End Function
au passage : héritage d'un de tes illustres voisins
 

job75

XLDnaute Barbatruc
Bonsoir franic, JM, Bernard, Modeste geedee,

L'ennui de la solution du post #2 c'est que le tri place toutes les majuscules en tête.

Il est facile d'y remédier :
VB:
Function SortCharacters(theString As String) As String
    Dim currentChar As String
    Dim sourceNum As Integer
    Dim destNum As Integer
    For sourceNum = 1 To Len(theString)
        currentChar = Mid(theString, sourceNum, 1)
        If sourceNum = 1 Then
            SortCharacters = currentChar
        Else
            destNum = 1
            While destNum <= Len(SortCharacters) And UCase(currentChar) > UCase(Mid(SortCharacters, destNum, 1))
                destNum = destNum + 1
            Wend
            SortCharacters = Left(SortCharacters, destNum - 1) & currentChar & Mid(SortCharacters, destNum)
        End If
    Next sourceNum
End Function
Bonne nuit.
 

Eric C

XLDnaute Barbatruc
Bonsoir le forum
Bonsoir le fil
En espérant que franic aura trouvé la bonne soluce ici ou ici.
Bonne fin de ouikand à toutes & à tous
Ma signature.gif
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil

• job75
Merci d'avoir corriger l'ennui auquel je ne suis jamais confronté car quand je saisis un mot dans une cellule, normalement je respecte son orthographe (et tant pis si les lettres ne sont pas dans l'ordre)
;)

• Modeste geedee
J'avais un voisin illustre et je l'ignorais!
Ou j'ai oublié.
Un indice ?

PS: Me semble avoir vu quelque part une formule qui fait ce tri.
Pas retrouvé pour le moment.
 

Staple1600

XLDnaute Barbatruc
Re

Toujours pas retrouvé une solution par formule
Mais sur une autre fonction VBA (comme je la trouve "smart"), je la poste
VB:
Public Function TriAlphaCell(ByVal parmString As String) As String
Dim lngBuckets(0 To 65535) As Long, lngLoop&, bChar&
    For lngLoop = 1 To Len(parmString)
        bChar = AscW(Mid(parmString, lngLoop, 1))
        lngBuckets(bChar) = lngBuckets(bChar) + 1
    Next
    TriAlphaCell = vbNullString
    For lngLoop = LBound(lngBuckets) To UBound(lngBuckets)
        If lngBuckets(lngLoop) <> 0 Then
            TriAlphaCell = TriAlphaCell & String(lngBuckets(lngLoop), ChrW(lngLoop))
        End If
    Next
    'auteur: aikimark, issue de : CollatedCharsUnicode
End Function
PS: Si il y a plusieurs mots dans votre cellule de test...bah testez, vous verrez ;)
 

Staple1600

XLDnaute Barbatruc
Re

Juste pour le plaisir de relire les formules de Monique
(sans oublier Tibo)
 

PBerg45

XLDnaute Nouveau
Sans prétension, je poste une modif du code de Modeste geedee pour respecter l'ordre des mots si plusieurs mots dans une même cellule.
VB:
Function SortString(ByVal iRange, Optional Croissant As Boolean = True)
Dim i%, j%, S%, sTemp$, tabl
tabl = Split(iRange, " ")
For S = 0 To UBound(tabl)
  For j = 1 To Len(tabl(S)) - 1
    For i = 1 To Len(tabl(S)) - 1
      If Mid(tabl(S), i, 1) > Mid(tabl(S), i + 1, 1) Then
        sTemp = Mid(tabl(S), i, 1)
        Mid(tabl(S), i, 1) = Mid(tabl(S), i + 1, 1)
        Mid(tabl(S), i + 1, 1) = sTemp
      End If
    Next
  Next
 Next
  If Croissant = False Then
    For i = Len(tabl(S)) To 1 Step -1
      SortString = SortString & Mid(tabl(S), i, 1)
    Next
    Exit Function
  End If
 
 For S = 0 To UBound(tabl)
    Text = Text + tabl(S) + " "
 Next
  SortString = Text
 
End Function
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir @franic, @Staple1600 :), @Dranreb :), @Modeste geedee :), @job75 :), @Eric C :), @PBerg45 :), @cwouam :), @mapomme :p,

Une fonction personnalisée avec trois arguments.
La fonction associe à chaque lettre spéciale sa lettre de base pour le tri (ex : â -> a, Ö -> O, è -> e, ... etc).
La fonction traite les mots d'une phrase quelconque.

TrierMotCasseDoublon(ByVal x As String, Optional xCasseINSENSIBLE, Optional xSansDoublon)
  1. x : la phrase dont les mots sont à trier
  2. xCasseINSENSIBLE : si présent, le tri est insensible à la casse
  3. xSansDoublon : si présent, on élimine les doublons dans chaque mot du résultat

edit : bonjour @arthour973 ;), @zebanx ;)
 

Pièces jointes

  • franic- ordre alphabet- v1a.xlsm
    28.5 KB · Affichages: 14
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 192
Messages
2 086 056
Membres
103 110
dernier inscrit
Privé