Simplifier une macro

mouglicola -  
 mouglicola -
Bonjour,
Depuis quelques jours, je travaille sur une macro pour aider à l'apprentissage de la lecture en mettant en évidence les sons complexes (j'avais déjà mis un message à ce sujet - merci à tous ceux qui m'ont déjà aidée).

Besoin d'aide n°1 :

J'ai bien avancé dans la macro du code couleur mais maintenant je n'arrive pas à la simplifier. Pour l'instant, l'ordinateur recherche tous les "on" du texte pour les colorier en marron, puis tous les ou, puis tous les oi...puis un certain nombre d'exceptions. A la fin de chaque étape, il me demande si je veux retourner en haut du texte (OK) puis si je passe à l'étape suivante (OK) si bien qu'il faut cliquer une 40ène de fois sur OK. C'est très rapide mais j'aimerai pouvoir l'éviter, que tout s'enchaine automatiquement. J'ai l'impression que je n'ai pas placé la boucle au bon endroit. Est-ce que quelqu'un peut jeter un coup d'oeil pour m'aider à simplifier ? (c'est un tout petit bout de la macro)

Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting

With Selection.Find
.Text = "on"
.Wrap = wdFindAsk
.Format = True
Selection.Find.Execute
Selection.Shading.Texture = wdTextureNone
Selection.Shading.ForegroundPatternColor = wdColorAutomatic
Selection.Shading.BackgroundPatternColor = wdColorBrown
End With

While Selection.Find.Execute
Selection.Find.ClearFormatting
Selection.Shading.ForegroundPatternColor = wdColorAutomatic
Selection.Shading.BackgroundPatternColor = wdColorBrown
Wend

With Selection.Find
.Text = "ou"
.Wrap = wdFindAsk
.Format = True
Selection.Find.Execute
Selection.Shading.Texture = wdTextureNone
Selection.Shading.ForegroundPatternColor = wdColorAutomatic
Selection.Shading.BackgroundPatternColor = wdColorRed
End With

While Selection.Find.Execute
Selection.Find.ClearFormatting
Selection.Shading.ForegroundPatternColor = wdColorAutomatic
Selection.Shading.BackgroundPatternColor = wdColorRed
Wend

End Sub

Besoin d'aide n°2 :
Je coince pour le son "om". Il faudrait que l'ordi détecte : si "omb" alors la trame de fond de "om" est en marron et la trame de fond du "b" reste en blanc. Une idée ?

Encore merci pour votre aide.

A voir également:

3 réponses

mouglicola
 
Personne pour m'aider ? Ça me rendrait vraiment service...
0
eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 282
 
Bonsoir,

tu peux déposer ton fichier exemple sur cjoint.com et coller ici le lien fourni.
Tu peux aussi dire quel est le logiciel....

Il faudrait que l'ordi détecte : si "omb" alors la trame de fond de "om" est en marron et la trame de fond du "b" reste en blanc. Une idée ?
Oui, c'est au début qu'il fallait y penser. Réfléchi bien si tu n'as pas d'autres cas spéciaux à traiter, là il sera temps de démarrer la programmation.

Et traiter les syllabes 1 par 1 en dur dans le code n'est pas du tout efficace...

J'imagine plutôt de travailler sur excel avec 2 colonnes de liste.
- 1 pour le groupe à détecter : ou, on omb
- 1 pour la partie à colorer : ou, on, om
Et mettre la couleur voulue dans ces cellules.

Le programme devrait ensuite balayer tes phrases, détecter les syllabes en balayant la liste et appliquer la couleur récupérée dans la cellule sur la syllabe.

Mais d'abord prend le temps de bien définir tes besoins, c'est souvent très difficile de traiter les cas particuliers non détectés.

eric
0
mouglicola
 
Merci Eric d'avoir pris quelques instants pour me répondre.
J'utilise word.

Je suis totalement novice en informatique, il y a quelques jours je n'avais jamais entendu parler de macro...

J'ai besoin d'éclaircissements :

Il faudrait que l'ordi détecte : si "omb" alors la trame de fond de "om" est en marron et la trame de fond du "b" reste en blanc. Une idée ?
Oui, c'est au début qu'il fallait y penser. Réfléchi bien si tu n'as pas d'autres cas spéciaux à traiter, là il sera temps de démarrer la programmation.

Je le sais depuis le début...mais comment faire ? Quelles modifications dois-je apporter à ce que j'ai déjà fait. A quel endroit (et comment) définir que om est en marron et que b est en blanc (car dans ce que j'ai fait omb devient marron)
With Selection.Find
.Text = "omb"
.Wrap = wdFindAsk
.Format = True
Selection.Find.Execute
Selection.Shading.Texture = wdTextureNone
Selection.Shading.ForegroundPatternColor = wdColorAutomatic
Selection.Shading.BackgroundPatternColor = wdColorBrown
End With


Et traiter les syllabes 1 par 1 en dur dans le code n'est pas du tout efficace... Heuuuu, pourquoi ? (question bête, mais par curiosité)

En ce qui concerne la boucle, est-ce qu'il est possible que la macro se déroule entièrement ? La boucle (ou une autre sorte de boucle) doit-elle être placée à un autre endroit.


J'imagine plutôt de travailler sur excel avec 2 colonnes de liste. N'y a-t-il pas moyen d'améliorer ce que j'ai déjà fait ?

Si quelqu'un peut apporter des modifications à ma macro ce serait vraiment très sympa car cela me gagnerait vraiment beaucoup de temps quand je prépare les supports de lecture de mes élèves.
0
eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 282
 
Bonjour,

Et traiter les syllabes 1 par 1 en dur dans le code n'est pas du tout efficace... Heuuuu, pourquoi ? (question bête, mais par curiosité)
C'est plus simple de saisir 2 lettres dans une cellules que d'ajouter 10 lignes de code à chaque syllabe.

J'imagine plutôt de travailler sur excel avec 2 colonnes de liste. N'y a-t-il pas moyen d'améliorer ce que j'ai déjà fait ?
Pas par moi en tout cas, je connais plus excel

eric
0
eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 282
 
Re,

Proposition sur excel, dis-moi si j'ai bien compris ton besoin.

Définir les sons à colorer dans la feuille 'Listes'.
- en A : la chaine caractéristique
- en B : la chaine à colorer avec sa couleur
Un nom dynamique a été créé, ne pas mettre d'autres données que les sons dans A:B.
On peut ajouter autant de sons que l'on veut.

Si des caractères ont été déjà colorés ils ne sont plus modifiés.
Remettre les caractères à couleur 'Automatique' pour qu'ils soient traités à nouveau par la macro.
Ceci pour préserver une coloration mise manuellement, et traiter les cas 'omb' et 'om'
Dans la liste mettre les chaines communes les plus longues devant les chaines communes les plus courtes (en clair 'omb' devant 'om') pour qu'elles aient la priorité.
Ainsi une chaine colorée 'omb' ne sera pas écrasée par la couleur de 'om'

Sélectionner la plage à traiter (ici A1:A2) et cliquer sur 'Colorer la plage sélectionnée'
Sub colorer() 
    Dim Phr As Range, chaine As Range, pos As Long 
    For Each Phr In Selection 
        For Each chaine In [chaines] 
            pos = 1 
            pos = InStr(pos, Phr, chaine, vbTextCompare) 
            While pos > 0 
                If Phr.Characters(Start:=pos, Length:=1).Font.ColorIndex = xlAutomatic Then 
                    Phr.Characters(Start:=pos, Length:=Len(chaine.Offset(0, 1))).Font.ColorIndex = chaine.Offset(0, 1).Font.ColorIndex 
                End If 
                pos = InStr(pos + 1, Phr, chaine, vbTextCompare) 
            Wend 
        Next chaine 
    Next Phr 
End Sub

Fichier exemple

eric
0
mouglicola
 
Whaaa, c'est magique. Je ne comprends absolument rien à votre macro mais c'est fabuleux. Vraiment merci.
Je sais que j'abuse ... mais un de mes élèves est mal voyant, serait-il possible que la couleur arrive sur l'arrière plan (couleur de remplissage) et non pas sur la typographie pour que les couleurs soient plus visibles (comme je l'avais fait sur ma macro bidouille :) ). Pouvez-vous me renvoyer un fichier exemple modifié (j'ai vraiment honte de vous redemander ça, après le super travail que vous avez déjà fait).

En tout cas, merci Eriic de m'avoir consacrée du temps. Votre macro va considérablement alléger mon travail de préparation de documents.
0
eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 282
 
Malheureusement sur excel on ne peut colorer que l'ensemble du fond, pas sur qcq caractères.
La seule solution serait de découper le mot et la phrase sur plusieurs cellules, mais ça ne t'arrange sans doute pas.
Sinon mettre une police plus grande...

eric
0
mouglicola
 
C'est dommage. En tout cas, encore merci.
0