Simplifier une macro
mouglicola
-
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.
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:
- Simplifier une macro
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Télécharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Jitbit macro recorder - Télécharger - Confidentialité
- Macro maker - Télécharger - Divers Utilitaires
- Actiona macro - Télécharger - Divers Utilitaires
3 réponses
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
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
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.
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.
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
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
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'
Fichier exemple
eric
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
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.
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.