Texte avec des phrases dans un ordre aléatoire

Bonjour,

J'ai dans la colonne A des textes composés de plusieurs phrases.

Je souhaiterai par une fonction ou une macro que les phrases se mélanges aléatoirement.

Je demande pas un mélangeur de mots mais bien un mélangeur de phrases

Est-ce que c'est possible d'après vous

Merci beaucoup pour votre aide

Max

51text-aleatoire.xlsx (11.29 Ko)

Bonjour,

Petite précision, une "phrase" est à mon sens délimité par un symbole de ponctuation : ".", "?", "!"

Ma question est donc : est ce que tu souhaites bien mélanger les phrases en fonction de la ponctuation, ou mélanger l'ordre des lignes de ton fichier ?

Oui c'est bien les phrases Commençant par une Majuscule et finissant par "." ou "?" ou "!" ou "..."

Merci beaucoup

Max

Avec un peu de retard, je te propose les macros suivantes :

Sub DinstinguerPhrases()

Dim Lig As Long, LigMax As Long, Tableau() As String, i As Integer, j As Integer, k As Integer
ReDim Tableau(9999)
Dim MaLigne As String, MesPhrases() As String
With Sheets("Feuil1")
    LigMax = .Range("A" & .Rows.Count).End(xlUp).Row 'Dernière ligne
    For Lig = 1 To LigMax 'Parcourir les lignes
        MaLigne = Replace(Replace(Replace(.Range("A" & Lig), "?", "."), "!", "."), "...", ".") 'Standardiser la ponctuation en "."
        MesPhrases() = Split(MaLigne, ".") 'Séparer les phrases en fonction des points
        k = i
        For j = k To k + UBound(MesPhrases) 'Ajout de chaque phrase à la suite dans une variable tableau
            If Not MesPhrases(j - k) = "" Then
                Tableau(i) = MesPhrases(j - k)
                i = i + 1
            End If
        Next j
    Next Lig
End With
ReDim Preserve Tableau(i)
Call Melange(Tableau) 'Appel de la procédure de mélange

End Sub
Sub Melange(ByRef Tableau() As String)

Randomize
Dim i As Integer, Phrase As String, Pos As Integer
For i = UBound(Tableau) To LBound(Tableau) Step -1 'Parcourir le tableau en partant de la fin
    Pos = Round(Rnd(CSng(i)), 0) 'Générer une position aléatoire entre 0 et i
    'Intervertir la phrase en position "i" avec celle en position "Pos"
    Phrase = Tableau(i)
    Tableau(i) = Tableau(Pos)
    Tableau(Pos) = Phrase
Next i
'Ecrire le résultat en feuille 2
For i = LBound(Tableau) To UBound(Tableau)
    Sheets("Feuil2").Range("A" & i + 1) = Tableau(i)
Next i

End Sub

En espérant avoir compris la problématique.

Bonsoir ,

La macro mais bien une phrase par ligne mais il n'y a plus les ponctuation des fin de phrase est-ce que l'on peu les rajouter

Merci beaucoup

Max

Bonsoir ,

La macro mais bien une phrase par ligne mais il n'y a plus les ponctuation des fin de phrase est-ce que l'on peu les rajouter

Merci beaucoup

Max

Essai de remplacer cette ligne :

MaLigne = Replace(Replace(Replace(.Range("A" & Lig), "?", "."), "!", "."), "...", ".")

Par celle-ci :

MaLigne = Replace(Replace(Replace(.Range("A" & Lig), "?", "?."), "!", "!."), "...", "_.")

Et de changer cette partie :

For i = LBound(Tableau) To UBound(Tableau)
    Sheets("Feuil2").Range("A" & i + 1) = Tableau(i)
Next i

Par celle-ci :

For i = LBound(Tableau) To UBound(Tableau)
    Sheets("Feuil2").Range("A" & i + 1) = Replace(Tableau(i), "_.", "...")
Next i

Comme ça chaque phrase est délimitée par un point, mais on garde la ponctuation initiale, sauf pour "...", que l'on remplace par un caractère de substitution le temps de séparer les phrases.

Bonjour,

ça à l'aire de bien rajouter les "?" et les "!" en fin de lignes mais pas les "."

Dois-rajouter autre chose ?

Merci Max

Bonjour,

ça à l'aire de bien rajouter les "?" et les "!" en fin de lignes mais pas les "."

Dois-rajouter autre chose ?

Merci Max

Oui, je n'ai pas pensé à tenir compte du cas le plus courant...

Il suffit de completer les 2 mêmes extraits :

MaLigne = Replace(Replace(Replace(Replace(.Range("A" & Lig), "?", "?."), "!", "!."), "...", "_."), ".", "#.")
'...
For i = LBound(Tableau) To UBound(Tableau)
    Sheets("Feuil2").Range("A" & i + 1) = Replace(Replace(Tableau(i), "_", "..."), "#", ".")
Next i

J'ai utilisé comme caractères de substitution : "_" et "#", mais tu peux très bien en utiliser d'autre, du moment qu'ils ne sont pas présent ailleurs dans les phrases.

Merci ça fonctionne

C'est bien de le dire, mais tu es le seul à pouvoir le faire !

Le bouton "résolu" se trouve a droite du titre, en haut de chaque réponse.

Rechercher des sujets similaires à "texte phrases ordre aleatoire"