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

cs_PeaceMakah 3 Messages postés mardi 8 mars 2011Date d'inscription 20 février 2012 Dernière intervention - 15 févr. 2012 à 16:13 - Dernière réponse : cs_PeaceMakah 3 Messages postés mardi 8 mars 2011Date d'inscription 20 février 2012 Dernière intervention
- 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
Afficher la suite 

Votre réponse

8 réponses

bigfish_le vrai 1839 Messages postés vendredi 13 mai 2005Date d'inscription 20 novembre 2013 Dernière intervention - 16 févr. 2012 à 10:37
+3
Utile
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+
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de bigfish_le vrai
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 15 févr. 2012 à 18:08
0
Utile
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
Commenter la réponse de ucfoutu
cs_PeaceMakah 3 Messages postés mardi 8 mars 2011Date d'inscription 20 février 2012 Dernière intervention - 15 févr. 2012 à 18:14
0
Utile
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.
Commenter la réponse de cs_PeaceMakah
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 15 févr. 2012 à 19:13
0
Utile
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
Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 16 févr. 2012 à 10:48
0
Utile
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
Commenter la réponse de ucfoutu
bigfish_le vrai 1839 Messages postés vendredi 13 mai 2005Date d'inscription 20 novembre 2013 Dernière intervention - 16 févr. 2012 à 11:05
0
Utile
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+
Commenter la réponse de bigfish_le vrai
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 16 févr. 2012 à 11:29
0
Utile
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
Commenter la réponse de ucfoutu
cs_PeaceMakah 3 Messages postés mardi 8 mars 2011Date d'inscription 20 février 2012 Dernière intervention - 20 févr. 2012 à 11:30
0
Utile
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!
Commenter la réponse de cs_PeaceMakah

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.