OVH Cloud OVH Cloud

Big Macro

34 réponses
Avatar
Sylvie
Je cherche une macro qui fasse la chose suivante:

Je fais de documents word qui comportent des questions.
J'écris les questions en noir et les réponses en rouges.
Les réponses peuvent être des lettres ou des dessins
mais en rouge.

J'ai toujours besoin d'imprimer le document Questions (les questions seules)
et le document noir/rouge qui contient donc les Question et les Réponses.

A l'heure actuelle je suis obligée de faire deux documents distincts.
Le document Q, et le document Q/R.

Ce qui est très chiant parce que chaque modification du document
Q doit être répercutée sur le document Q/R

Donc ce qui m'aiderait beaucoup serait d'avoir un seul document
et de pouvoir imprimer à loisir la version Q ou la version Q/R.

Est-ce possible ?

Sylvie

10 réponses

1 2 3 4
Avatar
sylvie
Bonne idée, nous allons essayer ça !

Sylvie

"Anacoluthe" a écrit dans le message de news:

Bonjour !

'Sylvie' nous a écrit ...
A la finalle donc, tout mot rouge se retrouve remplacé par une série
de "." telle que la nouvelle longueur du mot composé de ces "."
approxime au mieux l'ancienne.


Remplacez votre texte rouge par du texte blanc souligné pointillé rouge
Format / Police : couleur police + soulignement + couleur soulignement
et votre mise en page ne sera pas modifiée !!!!

Anacoluthe
« La boue cache un rubis mais ne le tache pas. »
- Proverbe chinois



Avatar
sylvie
Je rencontre un pb que je ne sais pas analyser, quand je
veux produire la partie de la macro qui remplace le texte
rouge par du texte blanc souligné en pointillé, je procède comme
suit: je lance l'enrrgistreur de macro et je procède au remplacement
du texte avec la fenêtre remplacement et ça marche, j'obtiens bien
le remplacement du texte rouge en texte blanc souligné.
J'arrête la macro et j'ouvre l'éditeur et j'obtiens ça:

Sub Macro1()
'
' Macro1 Macro
' Macro recorded 07/11/2004 by moi
'
Selection.ParagraphFormat.Alignment = wdAlignParagraphRight
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = ""
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
End Sub

Outre le fait que cette macro ne marche pas (elle ne procède pas au
remplacement)
je vois bien qu'ç l'intérieur rien ne parle de couleur rouge ou blanche ou
de pointillés.

Donc je ne comprends pas et je me retrouve encore devant un mystère ou
ç priori, le simple fait d'enregistrer ce qu'on fait et qui marche, comme
n'importe
qui le ferait spontanément ne marche pas. WORD me décoit de plus en plus.

Qu'en pensez-vous ?

Autrement, je peine à faire le groupage/dégroupage. Si une Forme est un
groupe,
une fois dégroupé, comment accéder aux Formes qu'il contenait ?
Et comment reformer le groupe puisqu'un groupe dégroupé n'est plus un groupe
et que de ce fait je ne vois pas comment récupérer les formes qui le
composait.

Pourriez-vous m'aider ?

Sylvie



"Anacoluthe" a écrit dans le message de news:

Bonjour !

'Sylvie' nous a écrit ...
A la finalle donc, tout mot rouge se retrouve remplacé par une série
de "." telle que la nouvelle longueur du mot composé de ces "."
approxime au mieux l'ancienne.


Remplacez votre texte rouge par du texte blanc souligné pointillé rouge
Format / Police : couleur police + soulignement + couleur soulignement
et votre mise en page ne sera pas modifiée !!!!

Anacoluthe
« La boue cache un rubis mais ne le tache pas. »
- Proverbe chinois



Avatar
Anacoluthe
Bonjour Sylvie. Oui très bien et vous ?

'sylvie' nous a écrit ...
Je rencontre un pb que je ne sais pas analyser, quand je
veux produire la partie de la macro qui remplace le texte
rouge par du texte blanc souligné en pointillé, je procède comme
suit: je lance l'enrrgistreur de macro et je procède au remplacement
du texte avec la fenêtre remplacement et ça marche, j'obtiens bien
le remplacement du texte rouge en texte blanc souligné.
J'arrête la macro et j'ouvre l'éditeur et j'obtiens ça:


Oui. L'enregistreur de macro a de nombreuses lacunes.
Vous venez d'en expérimenter une très classique :-(
Je ne vais pas revenir là dessus : l'enregistreur de macro
c'est comme les pizzas surgelées ... etc... etc

Votre macro c'est dans le genre :

Sub ChangeRougeEnBlancSoulignéRougePointillé()
Selection.HomeKey Unit:=wdStory
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = ""
.Font.Color = wdColorRed
.Replacement.Text = ""
.Replacement.Font.Color = wdColorWhite
.Replacement.Font.Underline = wdUnderlineDottedHeavy
.Replacement.Font.UnderlineColor = wdColorRed
.Forward = True
.Format = True
End With
Selection.Find.Execute Replace:=wdReplaceAll
End Sub

Pour le dégroupage des formes, je suis désolé mais
ça ne va pas aller non plus avec la pizza surgelée
il faut absolument se mettre à la cuisine vba :-[
Bon courage !

Anacoluthe
« Une fois que l'on a commencé à voir,
nous ne pouvons que chercher le courage
de voir plus. »
- Arthur MILLER

Avatar
sylvie
Bonsoir Analocuthe. Comment allez-vous ?

Je crois que je vais en baver avec les formes groupées. Mais bon,
je vais essayer. Puis-je vous exposer une autre pb ?
Parfois je mets du texte dans des "Text box" en rouge.
Notre macro ne change pas le texte dans ces boites
alors qu'elle marche bien pour le texte normal.
savez-vous comment faire ?

Merci par avance

Sylvie


"Anacoluthe" a écrit dans le message de news:

Bonjour Sylvie. Oui très bien et vous ?

'sylvie' nous a écrit ...
Je rencontre un pb que je ne sais pas analyser, quand je
veux produire la partie de la macro qui remplace le texte
rouge par du texte blanc souligné en pointillé, je procède comme
suit: je lance l'enrrgistreur de macro et je procède au remplacement
du texte avec la fenêtre remplacement et ça marche, j'obtiens bien
le remplacement du texte rouge en texte blanc souligné.
J'arrête la macro et j'ouvre l'éditeur et j'obtiens ça:


Oui. L'enregistreur de macro a de nombreuses lacunes.
Vous venez d'en expérimenter une très classique :-(
Je ne vais pas revenir là dessus : l'enregistreur de macro
c'est comme les pizzas surgelées ... etc... etc

Votre macro c'est dans le genre :

Sub ChangeRougeEnBlancSoulignéRougePointillé()
Selection.HomeKey Unit:=wdStory
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = ""
.Font.Color = wdColorRed
.Replacement.Text = ""
.Replacement.Font.Color = wdColorWhite
.Replacement.Font.Underline = wdUnderlineDottedHeavy
.Replacement.Font.UnderlineColor = wdColorRed
.Forward = True
.Format = True
End With
Selection.Find.Execute Replace:=wdReplaceAll
End Sub

Pour le dégroupage des formes, je suis désolé mais
ça ne va pas aller non plus avec la pizza surgelée
il faut absolument se mettre à la cuisine vba :-[
Bon courage !

Anacoluthe
« Une fois que l'on a commencé à voir,
nous ne pouvons que chercher le courage
de voir plus. »
- Arthur MILLER




Avatar
Anacoluthe
Bonjour !

'sylvie' nous a écrit ...
Bonsoir Analocuthe


Hum hum hum :-[ Anacoluthe s'il vous plaît
ou je me sens devenir Anaconda .............

Parfois je mets du texte dans des "Text box" en rouge.
Notre macro ne change pas le texte dans ces boites
alors qu'elle marche bien pour le texte normal.
savez-vous comment faire ?


Coupons-là en deux pour pouvoir l'utiliser en plusieurs fois:

Private Sub SelectionChangeRouge()
' Change dans la sélection texte rouge en blanc souligné rouge
With Selection.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = ""
.Font.Color = wdColorRed
.Replacement.Text = ""
.Replacement.Font.Color = wdColorWhite
.Replacement.Font.Underline = wdUnderlineDottedHeavy
.Replacement.Font.UnderlineColor = wdColorRed
.Forward = True
.Format = True
.Execute Replace:=wdReplaceAll
End With
End Sub


Utilisons cette sous-macro pour le texte et les ZDT :

Sub ChangeToutRougeEnBlancSoulignéRouge()
Dim Forme As Shape
ActiveDocument.Content.Select
SelectionChangeRouge
For Each Forme In ActiveDocument.Shapes
If Forme.Type = msoTextBox Then
Forme.TextFrame.TextRange.Select
SelectionChangeRouge
End If
Next Forme
End Sub


à suivre ... ?

Anacoluthe
« Une fois que l'on a commencé à voir,
nous ne pouvons que chercher le courage
de voir plus. »
- Arthur MILLER

Avatar
sylvie
Bon là à priori tout marche. J'ai résolu le pb des groupes aussi
sans rien dégrouper d'ailleurs, il suffit de mettre toute le forme
invisible. J'ai rajouté la possibilité de masquer des zones
du document initiale avec des zones de polygones bleus.

Voilà le résultat pour ceux que ça peut intéresser:


Private Sub SelectionChangeRougeVersEleve()
' Change dans la sélection texte rouge en blanc souligné rouge
With Selection.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = ""
.Font.Color = wdColorRed
.Replacement.Text = ""
.Replacement.Font.Color = wdColorWhite
.Replacement.Font.Underline = wdUnderlineDottedHeavy
.Replacement.Font.UnderlineColor = wdColorRed
.Forward = True
.Format = True
.Execute Replace:=wdReplaceAll
End With
End Sub

Private Sub SelectionChangeRougeVersProf()
' Change dans la sélection texte blanc en rouge souligné blanc
With Selection.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = ""
.Font.Color = wdColorWhite
.Replacement.Text = ""
.Replacement.Font.Color = wdColorRed
.Replacement.Font.Underline = wdUnderlineDottedHeavy
.Replacement.Font.UnderlineColor = wdColorWhite
.Forward = True
.Format = True
.Execute Replace:=wdReplaceAll
End With
End Sub

Sub PasseEnEleve()
'
Dim Forme As Shape

For Each Forme In ActiveDocument.Shapes
If Forme.Line.ForeColor.RGB = 255 Then
Forme.Visible = msoFalse
End If
If Forme.Line.ForeColor = 16711680 Then
Forme.Fill.Visible = msoTrue
End If
Next Forme

For Each Forme In ActiveDocument.Shapes
If Forme.Type = msoTextBox Then
Forme.TextFrame.TextRange.Select
SelectionChangeRougeVersEleve
End If
Next Forme

ActiveDocument.Content.Select
SelectionChangeRougeVersEleve

End Sub

Sub PasseEnProf()
'
'
For Each Forme In ActiveDocument.Shapes
Forme.Visible = msoTrue
Next Forme

ActiveDocument.Content.Select
SelectionChangeRougeVersProf

For Each Forme In ActiveDocument.Shapes
If Forme.Type = msoTextBox Then
Forme.TextFrame.TextRange.Select
SelectionChangeRougeVersProf
End If

If Forme.Line.ForeColor = 16711680 Then
Forme.Fill.Visible = msoFalse
' Forme.Line.Visible = msoFalse
End If
Next Forme

End Sub
Avatar
sylvie
Bonsoir Anacoluthe, comment allez-vous ?

J'ai quand même une autre question. La macro fonctionne bien
mais il y a un petit truc que j'aimerais améliorer.
Quand je veux voir ce que donnera en version élève
la page que j'ai devant les yeux, je lance la macro.
Elle fait le boulot mais le pb est qu'elle me place
en fin de document. Il faut donc que je revienne
à la page d'origine ce qui me fait perdre pas mal
de temps. L'idéal serait qu'elle fasse le remplacement
sans changer le positionnement du texte sur l'écran.

Est-ce possible ?

Sylvie



"Anacoluthe" a écrit dans le message de news:

Bonjour !

'sylvie' nous a écrit ...
Bonsoir Analocuthe


Hum hum hum :-[ Anacoluthe s'il vous plaît
ou je me sens devenir Anaconda .............

Parfois je mets du texte dans des "Text box" en rouge.
Notre macro ne change pas le texte dans ces boites
alors qu'elle marche bien pour le texte normal.
savez-vous comment faire ?


Coupons-là en deux pour pouvoir l'utiliser en plusieurs fois:

Private Sub SelectionChangeRouge()
' Change dans la sélection texte rouge en blanc souligné rouge
With Selection.Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = ""
.Font.Color = wdColorRed
.Replacement.Text = ""
.Replacement.Font.Color = wdColorWhite
.Replacement.Font.Underline = wdUnderlineDottedHeavy
.Replacement.Font.UnderlineColor = wdColorRed
.Forward = True
.Format = True
.Execute Replace:=wdReplaceAll
End With
End Sub


Utilisons cette sous-macro pour le texte et les ZDT :

Sub ChangeToutRougeEnBlancSoulignéRouge()
Dim Forme As Shape
ActiveDocument.Content.Select
SelectionChangeRouge
For Each Forme In ActiveDocument.Shapes
If Forme.Type = msoTextBox Then
Forme.TextFrame.TextRange.Select
SelectionChangeRouge
End If
Next Forme
End Sub


à suivre ... ?

Anacoluthe
« Une fois que l'on a commencé à voir,
nous ne pouvons que chercher le courage
de voir plus. »
- Arthur MILLER



Avatar
Anacoluthe
Bonjour !

'sylvie' nous a écrit ...
Bonsoir Anacoluthe, comment allez-vous ?


Très bien hi hi hi ! Je me disais : déjà bouclée bigmacro ? :-)

J'ai quand même une autre question. La macro fonctionne bien
mais il y a un petit truc que j'aimerais améliorer.
Quand je veux voir ce que donnera en version élève
la page que j'ai devant les yeux, je lance la macro.
Elle fait le boulot mais le pb est qu'elle me place
en fin de document. Il faut donc que je revienne
à la page d'origine ce qui me fait perdre pas mal
de temps. L'idéal serait qu'elle fasse le remplacement
sans changer le positionnement du texte sur l'écran.


Puisque la taille du document ne change pas, mémorisez
en début de macro le point d'insertion par exemple :
Dim Ici as Long
Ici = Selection.Start
et retournez à ce point à la fin de la macro
ActiveDocument.Range(Ici,Ici).Select

Anacoluthe
« Finir n'est rien qu'achever de devenir. »
- MANILIUS

Avatar
sylvie
C'est mieux. Je retrouve à peu près le document là où il était
avant l'application de la macro. Disons que la ligne qui
contenait le pt d'insertion revient bien à l'écran. Mais
pas toujours au même endroit.

Encore un petit effort Anacoluthe !

Sylvie


"Anacoluthe" a écrit dans le message de news:

Bonjour !

'sylvie' nous a écrit ...
Bonsoir Anacoluthe, comment allez-vous ?


Très bien hi hi hi ! Je me disais : déjà bouclée bigmacro ? :-)

J'ai quand même une autre question. La macro fonctionne bien
mais il y a un petit truc que j'aimerais améliorer.
Quand je veux voir ce que donnera en version élève
la page que j'ai devant les yeux, je lance la macro.
Elle fait le boulot mais le pb est qu'elle me place
en fin de document. Il faut donc que je revienne
à la page d'origine ce qui me fait perdre pas mal
de temps. L'idéal serait qu'elle fasse le remplacement
sans changer le positionnement du texte sur l'écran.


Puisque la taille du document ne change pas, mémorisez
en début de macro le point d'insertion par exemple :
Dim Ici as Long
Ici = Selection.Start
et retournez à ce point à la fin de la macro
ActiveDocument.Range(Ici,Ici).Select

Anacoluthe
« Finir n'est rien qu'achever de devenir. »
- MANILIUS



Avatar
sylvie
En fait j'ai contourné le pb du groupage en ne regroupant
que les dessins rouges entre eux. Là ça marche. Mais si le regroupement
contient
un dessin noir, ça marche plus.Il y a donc cette contrainte de ne faire que
des paquets
de formes rouges qui est un peu embêtante.

Analocuthe n'aurait-il pas un petite bout de code VB pour le groupage ?
:o))

Sylvie
1 2 3 4