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

Vba sur 1 fichier pour extraire individuellement les pages

9 réponses
Avatar
Ludovic
Bonjour,
Je suis newbie sur Word .
Je dispose d'un fichier d'environ 2000 pages. Tous les pages sont
constitu=E9es de la m=EAme mani=E8re.
Il y a sur chacune des pages un identifiant diff=E9rent situ=E9 =E0 la m=EA=
me
place (et de longueur identique)


Je souhaiterait simplement enregistrer chaque page de ce fichier
individuellement et donner comme nom =E0 chaque fichier l'identifiant
pr=E9sent sur la page.

Est-ce possible avec une macro ou du vba?
Merci pour votre aide.

Ludovic (Word 2003)

9 réponses

Avatar
Anacoluthe
Bonjour !

'Ludovic' nous a écrit ...
Je dispose d'un fichier d'environ 2000 pages. Tous les pages sont
constituées de la même manière.
Il y a sur chacune des pages un identifiant différent situé à la même
place (et de longueur identique)
Je souhaiterait simplement enregistrer chaque page de ce fichier
individuellement et donner comme nom à chaque fichier l'identifiant
présent sur la page.
Est-ce possible avec une macro ou du vba?


Ce n'est possible QUE par une macro.
Il faut savoir que la /page/ n'est pas un /objet/ vba car Word décide
seul sa mise en page. Il est donc essentiel de savoir si vos pages sont
séparées par un saut de page ou un saut de section (comme dans
un document de fusion) ... ou par rien du tout.
Voyez par exemple :
http://support.microsoft.com/kb/216845/fr

Anacoluthe
« Il y a des mots qui séparent. »
- Caroline GRIMM

Avatar
heureux-oli
Bonjour !

Si il est possible de trouver l'identifiant de la page, il est possible de
placer un signet sur le premier identifiant, trouver le second comme fin de
sélection, couper le contenu, le colle dans un nouveau document, sauver le
document avec l'identifiant pour nom, supprimer les signets et recommencer.

Pourrais-tu nous dire à quoi ressemble ton identifiant ?


--
heureux-oli
http://heureuxoli.developpez.com/


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

Bonjour,
Je suis newbie sur Word .
Je dispose d'un fichier d'environ 2000 pages. Tous les pages sont
constituées de la même manière.
Il y a sur chacune des pages un identifiant différent situé à la même
place (et de longueur identique)


Je souhaiterait simplement enregistrer chaque page de ce fichier
individuellement et donner comme nom à chaque fichier l'identifiant
présent sur la page.

Est-ce possible avec une macro ou du vba?
Merci pour votre aide.

Ludovic (Word 2003)
Avatar
Ludovic
Bonjour,
Merci bien pour vos réponses !!
Que ce soit par vba ou pas macro, ça n'a pas d'importance, c'est juste
la finalité qui m'intéresse.

Réponse pour Anacoluthe :
Les pages sont bien séparées par un saut de page.
Super le lien, mais il ne dit pas comment prendre l'identifiant comme
nom de fichier.

Réponse pour heureux-oli :
Voici un exemple d'identifiant: 0101-2301
Sa position dans la page est fixe (même ligne, même colonne).
Je suis un peu paumé avec ta manip (je sais meme pas ce que c'est
qu'un signet)
Je peux pas simplement lire 9 caractères à partir du caractère plac é
Ligne 3 Colonne 12 ?

Ludovic


On 1 août, 20:21, "heureux-oli" wrote:
Bonjour !

Si il est possible de trouver l'identifiant de la page, il est possible de
placer un signet sur le premier identifiant, trouver le second comme fin de
sélection, couper le contenu, le colle dans un nouveau document, sauver le
document avec l'identifiant pour nom, supprimer les signets et recommence r.

Pourrais-tu nous dire à quoi ressemble ton identifiant ?

--
heureux-olihttp://heureuxoli.developpez.com/

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

Bonjour,
Je suis newbie sur Word .
Je dispose d'un fichier d'environ 2000 pages. Tous les pages sont
constituées de la même manière.
Il y a sur chacune des pages un identifiant différent situé à la m ême
place (et de longueur identique)

Je souhaiterait simplement enregistrer chaque page de ce fichier
individuellement et donner comme nom à chaque fichier l'identifiant
présent sur la page.

Est-ce possible avec une macro ou du vba?
Merci pour votre aide.

Ludovic (Word 2003)


Avatar
Anacoluthe
Bonjour !

'Ludovic' nous a écrit ...
Que ce soit par vba ou pas macro, ça n'a pas d'importance, c'est juste
la finalité qui m'intéresse.


VBA ou macro ??? Mais c'est pareil !
Macro = macrocommande
VBA = le langage de programmation 'Visual Basic pour Applications'
Depuis WD97 les macros de Word sont toutes écrites en VBA

Les pages sont bien séparées par un saut de page.
Super le lien, mais il ne dit pas comment prendre l'identifiant comme
nom de fichier.


'Identifiant' n'existe pas en VBA

C'est à vous de nous dire où se trouve ce que VOUS appelez 'identifiant'
- le signet portant le nom 'Identifiant'
- le champ contenant la propriété personnelle 'Identifiant'
- La 4ème cellule du 3ème tableau
- Le 5ème paragraphe à partir du bas
- le mot qui suit le texte 'Identifiant :'
- etc etc etc etc

Anacoluthe
« Le principal est de débuter. »
- Georges Charles HUYSMANS

Avatar
Ludovic
Anacoluth :

Anacoluth :

On 2 août, 13:04, Anacoluthe wrote:
Bonjour !

'Ludovic' nous a écrit ...

Que ce soit par vba ou pas macro, ça n'a pas d'importance, c'est juste
la finalité qui m'intéresse.


VBA ou macro ??? Mais c'est pareil !
Macro = macrocommande
VBA = le langage de programmation 'Visual Basic pour Applications'
Depuis WD97 les macros de Word sont toutes écrites en VBA


J'écris cette phrase par rapport à la phrase de ton 1er message : "Ce
n'est possible QUE par une macro."
Phrase qui semble elle-même faire référence à l'objet du post "VBA. .."
pour dire que ce n'est pas possible en Vba mais par une macro.
Enfin...je ne vois pas ce que peut dire d'autre cette affirmation.

Ceci dit, n'y connaissant rien à Word, je pensais effectivement qu'une
macro se différenciat du Vba par le fait qu'elle ne comportait aucune
ligne de code et uniquement une suite d'actions (non transcrites en
code) et réalisables par quiconque sans connaissance de programmation.

Les pages sont bien séparées par un saut de page.
Super le lien, mais il ne dit pas comment prendre l'identifiant comme
nom de fichier.


'Identifiant' n'existe pas en VBA



Oui ça j'imagine

C'est à vous de nous dire où se trouve ce que VOUS appelez 'identifia nt'
- le signet portant le nom 'Identifiant'
- le champ contenant la propriété personnelle 'Identifiant'
- La 4ème cellule du 3ème tableau
- Le 5ème paragraphe à partir du bas
- le mot qui suit le texte 'Identifiant :'
- etc etc etc etc


Au risque de me répété : mon identifiant est composé de 9 caractè res
et commence Ligne 3 Colonne 12 (ou autrement dit au Caractère 12) de
chaque page.

exprimé autrement : cette chaine apparait juste après la chaine "Zone n
° :" qui elle-meme apparaît après 2 retours à la ligne et une
tabulation.


exple sur une page :

Titre de la page
sous-titre de la page
Zone n° : 0101-2301


Ludovic


Avatar
Anacoluthe
Bonjour !

'Ludovic' nous a écrit ...
n'est possible QUE par une macro."
Phrase qui semble elle-même faire référence à l'objet du post "VBA..."
pour dire que ce n'est pas possible en Vba mais par une macro.
Enfin...je ne vois pas ce que peut dire d'autre cette affirmation.


Alors je précise... :-)
'QUE par macro' s'entend simplement 'QUE par programmation'
99% des utilisateurs de Word ne programment pas
Ce que vous demandez ne peut se faire QUE par programmation.

Car vous pouvez copier chaque page dans un document vierge, regarder
ce qui est écrit à la 3ème ligne colonne 12, et enregistrer ce nouveau
document avec ce que vous avez lu.

Au risque de me répété : mon identifiant est composé de 9 caractères
et commence Ligne 3 Colonne 12 (ou autrement dit au Caractère 12) de
chaque page.


Dim Identifiant As String
Identifiant = Mid(Activedocument.Paragraphs(3).Range.Text,12,9)

Anacoluthe
« Le principal est de débuter. »
- Georges Charles HUYSMANS

Avatar
Ludovic
Bravo Anacoluthe ! Voici le code au complet à coller dans...une Macro
donc ;)
Merci bien!


Sub BreakOnPage()
' Used to set criteria for moving through the document by page.
Application.Browser.Target = wdBrowsePage

For i = 1 To ActiveDocument.BuiltInDocumentProperties("Number of
Pages")

'Select and copy the text to the clipboard
ActiveDocument.Bookmarks("page").Range.Copy

' Open new document to paste the content of the clipboard into.
Documents.Add
Selection.Paste
' Removes the break that is copied at the end of the page, if any.
Selection.TypeBackspace
ChangeFileOpenDirectory "C:temp"
'DocNum = DocNum + 1
Dim Identifiant As String
Identifiant = Mid(Activedocument.Paragraphs(3).Range.Text,12,9)
ActiveDocument.SaveAs FileName:="test_" & Identifiant & ".doc"
ActiveDocument.Close

' Move the selection to the next page in the document
Application.Browser.Next
Next i
ActiveDocument.Close savechanges:=wdDoNotSaveChanges
End Sub
Avatar
Jac
Bonjour Ludovic,

bien vu la manip... Il manque juste un
Selection.HomeKey Unit:=wdStory
au début car si la position du curseur n'est pas au début du document, "ça"
commencerait à la page qui contient le curseur.

Par contre,
ActiveDocument.BuiltInDocumentProperties ("Number of Pages ") me renvoie
"Erreur d'exécution '5' : Argument ou appel de procédure incorrect". Il n'y
a pas de référence manquante dans mon vba et cinq références "standard" sont
cochées.
Donc c'est moi qui ai donné le nombre total de pages... (sur Word XP)

Jac


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

Bravo Anacoluthe ! Voici le code au complet à coller dans...une Macro
donc ;)
Merci bien!


Sub BreakOnPage()
' Used to set criteria for moving through the document by page.
Application.Browser.Target = wdBrowsePage

For i = 1 To ActiveDocument.BuiltInDocumentProperties("Number of
Pages")

'Select and copy the text to the clipboard
ActiveDocument.Bookmarks("page").Range.Copy

' Open new document to paste the content of the clipboard into.
Documents.Add
Selection.Paste
' Removes the break that is copied at the end of the page, if any.
Selection.TypeBackspace
ChangeFileOpenDirectory "C:temp"
'DocNum = DocNum + 1
Dim Identifiant As String
Identifiant = Mid(Activedocument.Paragraphs(3).Range.Text,12,9)
ActiveDocument.SaveAs FileName:="test_" & Identifiant & ".doc"
ActiveDocument.Close

' Move the selection to the next page in the document
Application.Browser.Next
Next i
ActiveDocument.Close savechanges:=wdDoNotSaveChanges
End Sub
Avatar
Geo

ActiveDocument.BuiltInDocumentProperties ("Number of Pages ")


C'est :
ActiveDocument.BuiltInDocumentProperties ("Number of pages")
La casse doit être respectée.

Voici une macro qui liste toutes les propriétés intrinsèques.
Sub ListeProp()
Dim p As DocumentProperty
Dim l As String
For Each p In ActiveDocument.BuiltInDocumentProperties
l = l + p.name + vbCr
Next p
MsgBox l
End Sub

--
A+