cs_PeaceMakah
Messages postés3Date d'inscriptionmardi 8 mars 2011StatutMembreDernière intervention20 février 2012
-
15 févr. 2012 à 16:13
cs_PeaceMakah
Messages postés3Date d'inscriptionmardi 8 mars 2011StatutMembreDernière intervention20 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
A voir également:
[Word 2007 - VBA] Extraire / supprimer le premier mot d'une page
bigfish_le vrai
Messages postés1835Date d'inscriptionvendredi 13 mai 2005StatutMembreDernière intervention20 novembre 201315 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
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018211 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
cs_PeaceMakah
Messages postés3Date d'inscriptionmardi 8 mars 2011StatutMembreDernière intervention20 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.
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018211 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
Vous n’avez pas trouvé la réponse que vous recherchez ?
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018211 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
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018211 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
cs_PeaceMakah
Messages postés3Date d'inscriptionmardi 8 mars 2011StatutMembreDernière intervention20 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.