Transformé "chien" en " ceihn"

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.

Bonjour,

non, cela n'existe pas, il faut faire une fonction personnalisée par VBA

Function ordre(cel As Range)
Dim t() As String
ReDim t(1 To Len(cel.Value))
    ordre = ""
    For i = 1 To Len(cel.Value)
        t(i) = Mid(cel.Value, i, 1)
    Next
    QuickSort t, 1, Len(cel.Value)
    For i = 1 To Len(cel.Value)
        ordre = ordre & t(i)
    Next
End Function
14ordre-alphabet.xlsm (16.86 Ko)

Salut Franic,

Salut Steelson, plus rapide !

Private Sub Worksheet_Change(ByVal Target As Range)
'
Dim tSplit, sItemA$, sItem$, sTemp$
'
If Not Intersect(Target, Range("A:A")) Is Nothing Then
    Target.Offset(0, 1) = ""
    If Target <> "" Then
        tSplit = Split(Target, " ")
        For x = 0 To UBound(tSplit)
            sItem = tSplit(x)
            sTemp = IIf(Len(sItem) = 1, sItem, "")
            If Len(sItem) > 1 Then
                For y = 1 To Len(sItem)
                    Range("AA" & y).Value = Mid(sItem, y, 1)
                Next
                Range("AA1:AA" & Len(sItem)).Sort key1:=Range("AA1"), order1:=xlAscending, Orientation:=xlByRows, Header:=xlNo
                For y = 1 To Len(sItem)
                    sTemp = sTemp & Range("AA" & y).Value
                Next
            End If
            sItemA = sItemA & IIf(sItemA = "", "", " ") & sTemp
            Range("AA:AA").Value = ""
        Next
        Target.Offset(0, 1) = sItemA
    End If
End If
'
End Sub

A+

14franic.xlsm (16.86 Ko)

Hello curulis57,

En mot à mot cette fois-ci (j'ai été plus rapide mais j'avais bâclé !)

Function ordre(cel As Range)
Dim mot() As String
ordre = ""
mot = Split(cel.Value & " ", " ")
If UBound(mot) > 2 Then
    For j = LBound(mot) To UBound(mot) - 1
        ordre = ordre & " " & ordremot(mot(j))
    Next
Else
    ordre = ordremot(cel.Value)
End If
Debug.Print ordre
End Function

Function ordremot(valeur As String)
Dim t() As String
ReDim t(1 To Len(valeur))
    ordremot = ""
    For i = 1 To Len(valeur)
        t(i) = Mid(valeur, i, 1)
    Next
    QuickSort t, 1, Len(valeur)
    For i = 1 To Len(valeur)
        ordremot = ordremot & t(i)
    Next
End Function

Merci à tous c 'est exactement ce que je voulais .

Mercissssssssssssssssssssssssss.

Je viens de m 'apercevoir de petit défauts.

Dans le fichier de " Curulis573 " pas d'apostrophe ; Après l'arrivée donne Aèprs aeéilrrv

dans le fichier de "Steelson » Les cellules de 2 mots les mots sont collé en 1 et pas bien trié " Le chien" donne " Lceehin "

Quoi qu'il en soit vous êtes super.

merci.

Salut Franic,

j'aaisv remarqué el icosu acev l'apostrophe aims ej 'ain aps ceenor trouvé al ilnoostu ! Déos!

A+

bonjour,

pour avoir l'apostrophe, une adaptation du code de curulis57

Private Sub Worksheet_Change(ByVal Target As Range)
'
Dim tSplit, sItemA$, sItem$, sTemp$
'
If Not Intersect(Target, Range("A:A")) Is Nothing Then
    Target.Offset(0, 1) = ""
    If Target <> "" Then
        tSplit = Split(Target, " ")
        For x = 0 To UBound(tSplit)
            sItem = tSplit(x)
            sTemp = IIf(Len(sItem) = 1, sItem, "")
            If Len(sItem) > 1 Then
                For y = 1 To Len(sItem)
                    Range("AA" & y).Value = "'" & Mid(sItem, y, 1)
                Next
                Range("AA1:AA" & Len(sItem)).Sort key1:=Range("AA1"), order1:=xlAscending, Orientation:=xlByRows, Header:=xlNo
                For y = 1 To Len(sItem)
                    sTemp = sTemp & Range("AA" & y).Value
                Next
            End If
            sItemA = sItemA & IIf(sItemA = "", "", " ") & sTemp
            Range("AA:AA").Value = ""
        Next
        Target.Offset(0, 1) = sItemA
    End If
End If
'
End Sub

Salut Franic,

Salut Steelson,

Salut h2so4,

astucieux de placer une apostrophe devant chaque mot ! Pas pensé à ça et ça règle tous les soucis

J'avais pensé, perso, à changer l'apostrophe par le caractère ASCII précédent "&" et à faire une petite gymnastique pour tout remettre dans l'ordre.... Bref, moins bon que la solution de h2so4.

Private Sub Worksheet_Change(ByVal Target As Range)
'
Dim tSplit, sItemA$, sItem$, sTemp$
'
If Not Intersect(Target, Range("A:A")) Is Nothing Then
    Target.Offset(0, 1) = ""
    If Target <> "" Then
        tSplit = Split(Target, " ")
        For x = 0 To UBound(tSplit)
            sItem = tSplit(x)
            sTemp = IIf(Len(sItem) = 1, sItem, "")
            If Len(sItem) > 1 Then
                For y = 1 To Len(sItem)
                    Range("AA" & y).Value = IIf(Mid(sItem, y, 1) = "'", "&", Mid(sItem, y, 1))
                Next
                Range("AA1:AA" & Len(sItem)).Sort key1:=Range("AA1"), order1:=xlAscending, Orientation:=xlByRows, Header:=xlNo
                For y = 1 To Len(sItem)
                    sTemp = sTemp & IIf(Range("AA" & y).Value = "&", "'", Range("AA" & y).Value)
                Next
            End If
            sItemA = sItemA & IIf(sItemA = "", "", " ") & sTemp
            Range("AA:AA").Value = ""
        Next
        Target.Offset(0, 1) = sItemA
    End If
End If
'
End Sub

A+

dans le fichier de "Steelson » Les cellules de 2 mots les mots sont collé en 1 et pas bien trié " Le chien" donne " Lceehin "

voici ma correction

Function ordre(cel As Range)
On Error Resume Next
Dim mot() As String
ordre = ""
mot = Split(cel.Value & " ", " ")
If UBound(mot) > 1 Then
    For j = LBound(mot) To UBound(mot)
        ordre = ordre & " " & ordremot(mot(j))
    Next
Else
    ordre = ordremot(cel.Value)
End If
Debug.Print ordre
End Function

Function ordremot(valeur As String)
Dim t() As String
ReDim t(1 To Len(valeur))
    ordremot = ""
    For i = 1 To Len(valeur)
        t(i) = Mid(valeur, i, 1)
    Next
    QuickSort t, 1, Len(valeur)
    For i = 1 To Len(valeur)
        ordremot = ordremot & t(i)
    Next
End Function

Bonjour

Demande assez curieuse...

concernant les ponctuations, la demande n'est pas claire

Le ' est devant ainsi que la virgule, le -, le .

mais pour :

? : ! ( ) ;

si on respecte les principes syntaxiques cela change selon la position...

Moi, j'ai classé par code ascii ... sans me casser la tête !

RE

Je parlais de l'exemple fourni par le demandeur et de ce qu'il veut réellement qu'il n'a pas détaillé car un exemple de 2 lignes c'est très limité...

Si on met des phrases plus élaborées avec des ponctuations diverses, on voit que c'est fluctuant...

Rechercher des sujets similaires à "transforme chien ceihn"