VBA Fonction Tri d'un mot

Bonjour,

Si vous avez ça dans vos archives une fonction qui renvoie un mot trié dans l'ordre alphabétique :

ANAGRAMME = AAAEGMMNE

Merci

Bonjour à tous,

Bonjour galopin01,

Je pense que tu trouveras ton bonheur ici :

https://stackoverflow.com/questions/62403840/sort-alphabets-in-a-word-string

J'ai traduit la formule proposée dans le lien en français :

=JOINDRE.TEXTE(;;TRIER(STXT(A1;SEQUENCE(NBCAR(A1));1)))

klin89

Bonjour,

Ou avec une fonction personnalisée:

Function Tri_Mot(Mot As String) As String
    Dim Nb_Car As Long, i As Long, j As Long
    Dim Fin_Mot As String, Deb_Mot As String
    Nb_Car = Len(Mot)
    For j = 1 To Nb_Car - 1
        For i = 1 To Nb_Car - 1
            If i > 1 Then Deb_Mot = Left(Mot, i - 1)
            l1 = Mid(Mot, i, 1)
            l2 = Mid(Mot, i + 1, 1)
            If Asc(l1) > Asc(l2) Then
                Fin_Mot = Right(Mot, Len(Mot) - (i + 1))
                Tri_Mot = Deb_Mot & l2 & l1 & Fin_Mot
                Mot = Tri_Mot
            End If
        Next i
        Mot = Tri_Mot
    Next j
End Function

la formule s'écrit:

=Tri_Mot(A1)

Cdlt

Bonjour,

Klin : Ce n'est pas ce qui était demandé (VBA)

Arturo : Il y a un petit souci de déclaration mais... Ça marche parfois !

J'ai un problèmei avec ce mot : CEHNIJADBPFOGKLM : la fonction renvoie :

CABDAAAAAAAAAACEBDEAAAAAAAAACFBDEFAAAAAAAACGBDEFGAAAAAAACHBDEFGHAAAAAACIBDEFGHIAAAAACJBDEFGHIJAAAACKBDEFGHIJKAAACLBDEFGHIJKLAACMBDEFGHIJKLMACNDBEFHGIJKLMNOP

J'ai pas eu le temps d'éplucher (j'ai un dinosaure qui fait le boulot en attendant) mais si tu trouves plus fiable je suis toujours preneur.

A+

Bonjour à tous ,

Une fonction personnalisée avec 3 paramètres : TrierLettres ( Mot , AvecCasse , AvecAccent )

  • Mot : c'est la mot dont on doit trier les lettres
  • Avec casse : Si AvecCasse est VRAI alors on distingue les majuscules des minuscules (a et A n'ont pas le même rang de tri). Si AvecCasse est FAUX alors on ne distingue pas les majuscules des minuscules (e et E ont le même rang pour le tri)
  • AvecAccent : Si AvecAccent est VRAI alors on distingue les lettres accentuées (e et é n'ont pas le même rang de tri). Si AvecAccent est FAUX alors on ne distingue pas les lettres accentuées (a et à ont le même rang pour le tri)

Le résultat est affiché selon les caractères du mots originel bien que le tri ait été fait selon les options choisies.

Sur demande je peux changer cela avec une nouvelle option ou bien dans le corps de la fonction, vers la fin du code, remplacer:

For i = 1 To UBound(t): aux = aux & t(i, 1): Next par :

For i = 1 To UBound(t): aux = aux & t(i, 2): Next

nota : quelques soient les options, on ne garde que les lettres (on élimine les chiffres, les espaces, les séparateurs, etc.).

bonjour,

ma fraise : pas encore testé. Mais je vais le faire...

Arturo : Curieusement ta fonction à un score de 3 sur 8 sur ces Mots (de 16 lettres) :

ABEKIMOPCDFNGHJL

ACEJBHLPFKMNIODG

CEHNIJADBGFOKPLM

EIHMJOAKBNCFDPGK

AMBCDJFPGOHLIKEN

CPAHBIDMFLGJKNEO

CGAPBOHJDIKMLNEF

BPANCMDOEHGIFJKL

... 3 seulement renvoie la bonne réponse (ABCDEFGHIJKLMNOP)

A+

Petit oubli, correctif:

Function Tri_Mot(Mot As String) As String
    Dim Nb_Car As Long, i As Long, j As Long
    Dim Fin_Mot As String, Deb_Mot As String
    Nb_Car = Len(Mot)
    For j = 1 To Nb_Car - 1
        For i = 1 To Nb_Car - 1
            If i > 1 Then Deb_Mot = Left(Mot, i - 1) Else: Deb_Mot = ""
            l1 = Mid(Mot, i, 1)
            l2 = Mid(Mot, i + 1, 1)
            If Asc(l1) > Asc(l2) Then
                Fin_Mot = Right(Mot, Len(Mot) - (i + 1))
                Tri_Mot = Deb_Mot & l2 & l1 & Fin_Mot
                Mot = Tri_Mot
            End If
        Next i
        Mot = Tri_Mot
    Next j
End Function

mafraise : Pour l'instant c'est presque plus compliqué que mon algo à la Franquin.

Si tu peux simplifier avec que des majuscules et sans vérif d'erreur : Quel que soit le mot avec ou sans doublon de lettre, on renvoie le même nombre de lettres triées.

...And the Winner is Arturo83 !

A+

Re,

Je ne peux pas simplifier car les lettres accentuées existent en français (en majuscule comme en minuscule) et les mots composés (avec tiret) aussi. Donc il faut savoir quoi en faire et comme il n'y avait aucune hypothèse de départ, j'ai fait au mieux...

Bonjour,

 Tri_Mot(Mot As String) As String
Dim i As Integer
if trim(Mot)="" Then Exit Function
With CreateObject("AdoDb.recordSet")
    .fields.append "AZ", 129, 1
    .Open
    For i = 1 To Len(Mot)
        .addnew: !AZ = Mid(Mot, i, 1)
    Next
    .Update
    .movefirst
    .Sort = "AZ ASC"
    Tri_Mot = Replace(.getstring, Chr(13), "")
    .Close
End With
End Function
Sub test()
Debug.Print Tri_Mot("ANAGRAMME")
End Sub

Une jolie fonction probablement très rapide ? car il y a peu de boucle ...

Je classe dans ma bibli.

Merci.

A+

Re à tous,

Ou peut-être celle-ci :

Function Tri_Mot1(Mot As String) As String
    Dim e
    Set AL = CreateObject("System.Collections.ArrayList")
    For Each e In Split(StrConv(Mot, vbUnicode), Chr(0))
        If e <> "" Then AL.Add e
    Next
    AL.Sort
    Tri_Mot1 = Join(AL.ToArray, "")
    Mot = Tri_Mot1
End Function

klin89

Rechercher des sujets similaires à "vba fonction tri mot"