[Word 2007 - VBA] Extraire / supprimer le premier mot d'une page

Résolu
cs_PeaceMakah Messages postés 3 Date d'inscription mardi 8 mars 2011 Statut Membre Dernière intervention 20 février 2012 - 15 févr. 2012 à 16:13
cs_PeaceMakah Messages postés 3 Date d'inscription mardi 8 mars 2011 Statut Membre Dernière intervention 20 février 2012 - 20 févr. 2012 à 11:30
Bonjour tout le monde,

Je suis débutant en VBA, merci de votre compréhension si je dis des énormités. Voici la situation :

J'ai fait un publipostage pour créer des pages word dynamiques avec des informations client.

J'ai ensuite fait une macro (en m'aidant de google) pour séparer le fichier de résultat en plusieurs petits fichiers, chaque page du document original étant sauvegardée dans un fichier séparé.

A présent je cherche à donner à ces fichiers, des noms contenant une information client (leur nom). Après des recherches sur internet j'ai cru comprendre que le (seul) moyen de faire cela est de créer un champ de fusion avec cette info, au tout début de la page, puis l'extraire et le supprimer à l'aide d'une macro, pour le mettre dans le titre des fichiers.

Exemple : Si j'ai un client s'appellant vbfrance, je voudrais avoir un fichier nommé Facture_Vbfrance.

Mais je suis complètement bloqué. Je n'ai trouvé aucune info sur comment sélectionner, extraire et supprimer le premier mot de ma page.

Toute aide est la bienvenue, vous trouverez ci-dessous ma macro actuelle s'occupant de splitter le fichier par pages, et enregistrer chacune sous le nom "Facture_" + un ID incrémenté.

Sub DecouperDocument() 
    Application.Browser.Target = wdBrowsePage 
     
    For i = 1 To ActiveDocument.BuiltInDocumentProperties("Number of Pages") 
         
        ActiveDocument.Bookmarks("\page").Range.Copy 
         
        Documents.Add 
        Selection.Paste 
         
        Selection.TypeBackspace 
        ChangeFileOpenDirectory "C:\test" 
        DocNum = DocNum + 1 
        ActiveDocument.SaveAs FileName:="Facture_" & DocNum & ".doc" 
        ActiveDocument.Close 
         
        Application.Browser.Next 
    Next i 
    ActiveDocument.Close savechanges:=wdDoNotSaveChanges 
End Sub 


Je voudrais donc faire la même chose, mais avec le nom du client à la place de l'ID.

Merci par avance. Pour info j'utilise Office 2007.
Cdlt
js

8 réponses

bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
16 févr. 2012 à 10:37
Salut,

Sub demofunction()
    MsgBox PremierMot(True)
End Sub
Function PremierMot(Optional ByVal SupMot As Boolean = False) As String
    'Fontion qui renvoi le premier mot du fichier
    'l'option permet de supprimer ce premier mot
    'pour commencer on s'assure d'être sur la première page
    Selection.GoTo wdGoToPage, , , CStr(1)
    'selection du premier mot
    Selection.MoveRight Unit:=wdWord, Count:=1, Extend:=wdExtend
    'on recpere la selection et on s'assure de ne pas avoir d'espace
    PremierMot = Replace(Selection.Range.Text, " ", vbNullString)
    If SupMot = True Then 'option suppression du mot
        Selection.Delete
    End If
End Function


Ce n'est pas plus compliqué !

A+
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
15 févr. 2012 à 18:08
Bonjour,
Ta question serait-elle alors : comment extraire de chaque page le contenu d'un champ déterminé ?
Je ne vois d'ailleurs pas vraiment la nécessité d'un champ, si, comme tu le dis, ce sera toujours le premier mot de chaque page.

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
cs_PeaceMakah Messages postés 3 Date d'inscription mardi 8 mars 2011 Statut Membre Dernière intervention 20 février 2012
15 févr. 2012 à 18:14
Bonjour ucfoutu,

Déjà merci de ta réponse!

En fait la partie publipostage fonctionne sans problèmes, donc à l'heure actuelle je génère ma page, et je met un champ de fusion au tout début de celle-ci, contenant le nom du client. Cette étape est OK.

Je cherche donc juste à extraire ce premier mot pour le mettre dans le nom du fichier.
Cela dit, si tu connais d'autres façons de faire je suis preneur aussi. De ce que j'en ai lu, c'était le seul moyen mais toute autre méthode me conviendrai.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
15 févr. 2012 à 19:13
Ben ... Puisque tu dis :
puis l'extraire et le supprimer à l'aide d'une macro, pour le mettre dans le titre des fichiers.

C'est que tu n'en auras jamais plus besoin.
Mets-le donc en simple texte, en premier mot, séparé par un retour à la ligne
Lis une page ===>> split sur VBNewline ===>> le premier élément de l'array en résultant est le mot que tu cherches ===>> tu le mets dans une variable toto ===>> dans ton code montré plus haut
ActiveDocument.SaveAs FileName:="Facture_" & toto & ".doc"
à la place de
ActiveDocument.SaveAs FileName:="Facture_" & DocNum & ".doc"
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
16 févr. 2012 à 10:48
Bonjour, bigfish,

Attention, achtung, méfiance (je commence à être très méfiant, lorsque les explications ne sont pas toujours complètes) :
Il a parlé plus haut d'un champ. Va donc savoir si ce champ contenait lui-même un seul mot (il y a des patronymes qui en contiennent deux, par exemple).
C'est la raison pour laquelle je lui ai conseillé de remplacer ce champ par un simple texte, mais suivi d'un vbnewline


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
16 févr. 2012 à 11:05
Bonjour,


Après des recherches sur internet j'ai cru comprendre que le (seul) moyen de faire cela est de créer un champ de fusion...


J'en déduit donc qu'il ne les utilises pas !

De plus, un champs de fusion n'a d’intérêt que si l'on veut conserver une valeur variable !

donc aucun intérêt ici puisque l'objectif est d'utilisé le premier mot de la page lors de la sauvegarde puis de le supprimer.

Pour plus d'info sur les champs : voir ici


A+
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
16 févr. 2012 à 11:29
Ce n'est pas celà, que j'ai voulu dire, bigfish
Les champs, il les avait déjà et sont en effet devenus inutiles.
Je lui ai donc demandé de simplifier en les remplaçant par leur texte plat
Bien.
Mais imagine maintenant qu'un champ contenait "DUPONT de LA BARRE"
S'il met cela en texte et ne prend que le 1er mot, il obtiendra DUPONT
En faisant par contre suivre "DUPONT de LA BARRE" par un vbnewline et en prenant, non le 1er mot, mais la première ligne, il aura le nom complet.

Toute cette manoeuvre, toutefois, si (mais je ne connais pas suffisamment WORD) il n'est pas aisé de localiser le 1er champ d'une page (et il suffit alors d'en lire le contenu, puis de supprimer le champ). Et dans un tel cas (si cette facilité) : inutile alors de transformer le champ en texte plat.



____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
cs_PeaceMakah Messages postés 3 Date d'inscription mardi 8 mars 2011 Statut Membre Dernière intervention 20 février 2012
20 févr. 2012 à 11:30
Bonjour,

J'ai fait un mix entre vos deux réponses. J'ai utilisé ta fonction bigfish, et l'ai modifiée pour prendre la première ligne plutôt que le premier mot, comme l'a dit ucfoutu. Pour la simple raison que les noms (donc les contenus du champ) peuvent contenir des espaces.

Merci encore!
0
Rejoignez-nous