Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Suppression de zone de texte

8 réponses
Avatar
Olivier
Bonjour,
j'ai un document Word 2003 qui ne contient que des zones de textes.
Je voudrais faire une macro qui me supprime toutes ces zones de textes en
conservant le texte qui est à l'intérieur.
Bien sûr, je perdrais la mise en page mais ce qui m'importe c'est de n'avoir
à la fin que le texte.
Exemple :
Si j'ai les 4 zones de textes suivantes :
Zone de texte 1 : Le chat
Zone de texte 2 : et le chien
Zone de texte 3 : se courent
Zone de texte 4 : après.
Je veux après avoir lancé la macro obtenir sans zone de texte : Le chat et
le chien se courent après.
On peut bien sur le faire manuellement mais lorsqu'il y a trop de zones de
texte, une macro peut être utile. Un des problèmes que je rencontre est de
trouver par macro une zone de texte...
Si quelqu'un a une idée.
Merci
Olivier

8 réponses

Avatar
Geo
Bonjour Olivier
[ Cette réponse est faite sur le forum public Word :
news://msnews.microsoft.com/microsoft.public.fr.word ]
Bonjour,
j'ai un document Word 2003 qui ne contient que des zones de textes.
Je voudrais faire une macro qui me supprime toutes ces zones de textes en conservant le
texte qui est à l'intérieur.
Bien sûr, je perdrais la mise en page mais ce qui m'importe c'est de n'avoir à la fin
que le texte.
Exemple :
Si j'ai les 4 zones de textes suivantes :
Zone de texte 1 : Le chat
Zone de texte 2 : et le chien
Zone de texte 3 : se courent
Zone de texte 4 : après.
Je veux après avoir lancé la macro obtenir sans zone de texte : Le chat et le chien se
courent après.
On peut bien sur le faire manuellement mais lorsqu'il y a trop de zones de texte, une
macro peut être utile. Un des problèmes que je rencontre est de trouver par macro une
zone de texte...
Si quelqu'un a une idée.




Ce problème (ah les scanneurs !) a déjà été abordé sur ce forum, voici
une vielle macro qui devrait faire l'affaire, mais je ne l'ai pas
retestée.

Sub SuppCadre()
Dim z As Shape
Dim i As Integer

For i = ActiveDocument.Shapes.Count To 1 Step -1
Set z = ActiveDocument.Shapes(i)
If z.Type = msoGroup Then
z.Ungroup
End If
Next
For i = ActiveDocument.Shapes.Count To 1 Step -1
Set z = ActiveDocument.Shapes(i)
If z.Type = msoTextBox Then
Debug.Print z.name, z.Height, z.Width
z.Select
z.Delete
End If
Next
End Sub

--
A+
Avatar
Olivier
Merci de la réponse mais, même si je comprend ce que fait cette macro cela
ne marche pas.
Elle n'arrive pas à trouver les zones de textes (pourtant il y en a plein
!!)
Olivier


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

Bonjour Olivier
[ Cette réponse est faite sur le forum public Word :
news://msnews.microsoft.com/microsoft.public.fr.word ] Bonjour,
j'ai un document Word 2003 qui ne contient que des zones de textes.
Je voudrais faire une macro qui me supprime toutes ces zones de textes en
conservant le texte qui est à l'intérieur.
Bien sûr, je perdrais la mise en page mais ce qui m'importe c'est de
n'avoir à la fin que le texte.
Exemple :
Si j'ai les 4 zones de textes suivantes :
Zone de texte 1 : Le chat
Zone de texte 2 : et le chien
Zone de texte 3 : se courent
Zone de texte 4 : après.
Je veux après avoir lancé la macro obtenir sans zone de texte : Le chat
et le chien se courent après.
On peut bien sur le faire manuellement mais lorsqu'il y a trop de zones
de texte, une macro peut être utile. Un des problèmes que je rencontre
est de trouver par macro une zone de texte...
Si quelqu'un a une idée.




Ce problème (ah les scanneurs !) a déjà été abordé sur ce forum, voici une
vielle macro qui devrait faire l'affaire, mais je ne l'ai pas retestée.

Sub SuppCadre()
Dim z As Shape
Dim i As Integer

For i = ActiveDocument.Shapes.Count To 1 Step -1
Set z = ActiveDocument.Shapes(i)
If z.Type = msoGroup Then
z.Ungroup
End If
Next
For i = ActiveDocument.Shapes.Count To 1 Step -1
Set z = ActiveDocument.Shapes(i)
If z.Type = msoTextBox Then
Debug.Print z.name, z.Height, z.Width
z.Select
z.Delete
End If
Next
End Sub

--
A+




Avatar
Geo
Bonjour

Merci de la réponse mais, même si je comprend ce que fait cette macro cela ne marche
pas.
Elle n'arrive pas à trouver les zones de textes (pourtant il y en a plein !!)
Olivier



Vous pourriez mettre un extrait (deux ou trois zones suffisent) sur
www.cjoint.com ?

--
A+
Avatar
Olivier
Voici un extrait du document
http://cjoint.com/?mcnV7kGxeS
Ci vous pouvez_y jeter un coup d'oeil.
La macro ne rentre pas dans les deux boucles...
Merci


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

Bonjour

Merci de la réponse mais, même si je comprend ce que fait cette macro
cela ne marche pas.
Elle n'arrive pas à trouver les zones de textes (pourtant il y en a plein
!!)
Olivier



Vous pourriez mettre un extrait (deux ou trois zones suffisent) sur
www.cjoint.com ?

--
A+




Avatar
Geo
Bonjour
[ Cette réponse est faite sur le forum public Word :
news://msnews.microsoft.com/microsoft.public.fr.word ]
Voici un extrait du document


Avec ça c'est plus facile, voici la macro, il ne vous reste plus qu'à
refaire toute la mise en page.

Sub SuppCadres()
Dim i As Integer
Dim doc As Document
Debug.Print ActiveDocument.Name
Set doc = ActiveDocument
For i = doc.Frames.Count To 1 Step -1
doc.Frames(i).Delete
Next
End Sub

--
A+
Avatar
Olivier
"Geo" a écrit dans le message de news:

Bonjour
[ Cette réponse est faite sur le forum public Word :
news://msnews.microsoft.com/microsoft.public.fr.word ] Voici un extrait
du document


Avec ça c'est plus facile, voici la macro, il ne vous reste plus qu'à
refaire toute la mise en page.

Sub SuppCadres()
Dim i As Integer
Dim doc As Document
Debug.Print ActiveDocument.Name
Set doc = ActiveDocument
For i = doc.Frames.Count To 1 Step -1
doc.Frames(i).Delete
Next
End Sub

--
A+






Super. C'est impeccable.
Puis je encore abuser de votre temps ?
Je voudrais comprendre la différence entre les deux macros.
Ce que j'ai compris :
La première macro (celle qui ne marchait pas ici) :
Sub SuppCadre()
Dim z As Shape
Dim i As Integer
For i = ActiveDocument.Shapes.Count To 1 Step -1
Set z = ActiveDocument.Shapes(i)
If z.Type = msoGroup Then
z.Ungroup
End If
Next
For i = ActiveDocument.Shapes.Count To 1 Step -1
Set z = ActiveDocument.Shapes(i)
If z.Type = msoTextBox Then
Debug.Print z.name, z.Height, z.Width
z.Select
z.Delete
End If
Next
End Sub
parcourait le document, trouver une forme ? (shape) la dégrouper (msoGroup
et Ungroup). Puis la deuxième boucle, cherchait les formes zone de texte
(msoTextBox) puis les supprimer (delete). Je ne vois pas trop ce qui faisait
recuperer le texte de la zone de texte mais bon, ca ne marchait pas.

Cette deuxieme macro :
Sub SuppCadres()
Dim i As Integer
Dim doc As Document
Debug.Print ActiveDocument.Name
Set doc = ActiveDocument
For i = doc.Frames.Count To 1 Step -1
doc.Frames(i).Delete
Next
End Sub


fonctionne elle ! Cette fois, elle supprime les Frames.
D'où ma question c'est quoi la différence entre des SHAPES et des FRAMES ?
Et comment avez vous vu qu'il s'agissait de frames ici ?
Encore merci pour la macro c'est exactemetn ce que je cherchais...
Olivier
Avatar
Geo
Bonjour

Je voudrais comprendre la différence entre les deux macros.
Ce que j'ai compris :


[...]
parcourait le document, trouver une forme ? (shape) la dégrouper (msoGroup et Ungroup).
Puis la deuxième boucle, cherchait les formes zone de texte (msoTextBox) puis les
supprimer (delete). Je ne vois pas trop ce qui faisait recuperer le texte de la zone de
texte mais bon, ca ne marchait pas.



Effectivement elle recherchait les zones de texte, c'était ma première
hypothèse, mais comme il n'y en avait pas : bernique.
Les textbox font partie des Shapes.
Je ne suis pas certain qu'elle aurait récupéré le texte, c'est pourquoi
j'avais marqué "pas totalement testé", c'est une vieille macro que j'ai
gardée, je suis incapable de dire si elle a marché pour récupérer le
texte ou pas, mais vu qu'il y avait un phase de dégroupage, c'est qu'on
s'est trouvé devant ce cas précis.

Je viens de retrouver la conversation sur le sujet :
http://groups.google.fr/group/microsoft.public.fr.word/browse_thread/thread/c9c1750b3c5055fa/be86dd64b7ff3c21?hl=fr&lnk=gst&q=frame#be86dd64b7ff3c21
Donc ma macro n'aurait pas marché, je vais la virer.

D'où ma question c'est quoi la différence entre des SHAPES et des FRAMES ?



Les Frames c'est un truc qui met la panique dans les documents.
Sa traduction française est "cadre" mais il y a (avait ?) deux notions
de cadres complètement différentes, les vrais cadres (textbox par
exemple) et les faux, une sorte de iFrame sur les pages web.
L'aide du vba dit : Frame, objet Représente un cadre.
Circé qui a planché sur le sujet en dira sans doute plus, dans word
2003 il y avait un menu Insertion cadre, je suppose que ça a disparu en
2007.

Et comment avez vous vu qu'il s'agissait de frames ici ?


Bonne question.
En baladant la souris, j'ai vu qu'il y avait qqch autour de chaque
ligne.
Comme dit plus haut, l'hypothèse était une textbox, mais on ne rentrait
pas dans les boucles.
Pour savoir, j'ai fait ceci :
dim Doc as document
Set Doc = activedocument
et mis un point d'arrêt juste après pour afficher Doc dans la fenêtre
des variables et en descendant l'arborescence, j'ai cherché une
collection dont count n'était pas à 0.

Une autre précision par rapport à celle qui a été mise dans la
conversation de 2008 :
J'ai utilisé une boucle remontante car sur certains objets un for each
... delete fonctionne mal.
En partant de la fin on est certain d'arriver au bon résultat.


Merci pour le retour.

--
A+
Avatar
Olivier
Merci de m'avoir répondu et aidé.
C'est un peu plus clair maintenant...
A+
Olivier

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

Bonjour

Je voudrais comprendre la différence entre les deux macros.
Ce que j'ai compris :


[...]
parcourait le document, trouver une forme ? (shape) la dégrouper
(msoGroup et Ungroup). Puis la deuxième boucle, cherchait les formes zone
de texte (msoTextBox) puis les supprimer (delete). Je ne vois pas trop ce
qui faisait recuperer le texte de la zone de texte mais bon, ca ne
marchait pas.



Effectivement elle recherchait les zones de texte, c'était ma première
hypothèse, mais comme il n'y en avait pas : bernique.
Les textbox font partie des Shapes.
Je ne suis pas certain qu'elle aurait récupéré le texte, c'est pourquoi
j'avais marqué "pas totalement testé", c'est une vieille macro que j'ai
gardée, je suis incapable de dire si elle a marché pour récupérer le texte
ou pas, mais vu qu'il y avait un phase de dégroupage, c'est qu'on s'est
trouvé devant ce cas précis.

Je viens de retrouver la conversation sur le sujet :
http://groups.google.fr/group/microsoft.public.fr.word/browse_thread/thread/c9c1750b3c5055fa/be86dd64b7ff3c21?hl=fr&lnk=gst&q=frame#be86dd64b7ff3c21
Donc ma macro n'aurait pas marché, je vais la virer.

D'où ma question c'est quoi la différence entre des SHAPES et des FRAMES
?



Les Frames c'est un truc qui met la panique dans les documents.
Sa traduction française est "cadre" mais il y a (avait ?) deux notions de
cadres complètement différentes, les vrais cadres (textbox par exemple) et
les faux, une sorte de iFrame sur les pages web.
L'aide du vba dit : Frame, objet Représente un cadre.
Circé qui a planché sur le sujet en dira sans doute plus, dans word 2003
il y avait un menu Insertion cadre, je suppose que ça a disparu en 2007.

Et comment avez vous vu qu'il s'agissait de frames ici ?


Bonne question.
En baladant la souris, j'ai vu qu'il y avait qqch autour de chaque ligne.
Comme dit plus haut, l'hypothèse était une textbox, mais on ne rentrait
pas dans les boucles.
Pour savoir, j'ai fait ceci :
dim Doc as document
Set Doc = activedocument
et mis un point d'arrêt juste après pour afficher Doc dans la fenêtre des
variables et en descendant l'arborescence, j'ai cherché une collection
dont count n'était pas à 0.

Une autre précision par rapport à celle qui a été mise dans la
conversation de 2008 :
J'ai utilisé une boucle remontante car sur certains objets un for each ...
delete fonctionne mal.
En partant de la fin on est certain d'arriver au bon résultat.


Merci pour le retour.

--
A+