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

fusion, enregistrement en fichiers séparés

3 réponses
Avatar
Christophe Cerbourg
Bonjour,

L'année dernière à la même époque, certains d'entre vous m'avaient indiqué
comment, avec la macro ci-dessous, je pouvais enregistrer le résultat d'une
fusion en autant de fichiers qu'il comporte de pages.
En gors, on donne un n° de départ ( ici, docnum = 2438 ) et la macro
enregistre :
la page 1 dans fm_2439.doc
la page 2 dans fm_2440.doc
etc...
Ce numéro correspond à un champ des données et je m'en suis contenté car il
se trouve qu'il commençait à 2440 et s'incrémentait de 1 à chaque
enregistrement.

Mon problème est que je n'ai pas, cette année, FORCEMENT de continuité dans
les numéros en question (la ligne If docnum = 2484 Then docnum = 2574
correspond à ma rupture de numérotation...), et c'est pourquoi je voudrais
que ce numéro corresponde à un champ de mon fichier de données, càd quelque
chose comme :
docnum=LeChampEnQuestion...

Ca revient à dire qu'il faudrait que le résultat d'une fusion des données :
Dupont, Paul
Durand, Jacques
Martin, Marcel
s'enregistre dans
dupont.doc
durand.doc
martin.doc

Je ne vois pas de solution évidente puisque le résultat de la fusion ne
connaît plus les données, mais y aurait-il une astuce permettant de résoudre
ce problème ?

Merci pour vos idées !



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

docnum = 2438
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
Selection.Delete Unit:=wdCharacter, Count:=1
ChangeFileOpenDirectory "C:\CC\fm\"
docnum = docnum + 1
If docnum = 2484 Then docnum = 2574

ActiveDocument.SaveAs FileName:="fm_" & docnum & ".doc"
ActiveDocument.Close

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

3 réponses

Avatar
Anacoluthe
Bonjour !

"Christophe Cerbourg" nous a écrit ...
L'année dernière à la même époque, certains d'entre vous m'avaient
indiqué comment, avec la macro ci-dessous, je pouvais enregistrer le
résultat d'une fusion en autant de fichiers qu'il comporte de pages.


Il s'agit de la notice http://support.microsoft.com/?kbid!6845

je voudrais que ce numéro corresponde à un champ de
mon fichier de données


La macro MS n'est pas tip-top (mieux vaut celle par sections
qui est le vrai séparateur des documents de fusion).
Utiliser un champ de fusion pour nommer chaque fichier me
semble plus simple : fusionner avec comme premier mot le
nom du fichier à donner par exemple <<nom>>{DATE @ ddMMyy}.doc
Lors de l'opération de découpage en N fichiers : lire ce premier
mot, l'effacer, l'utiliser comme nom de sauvegarde du fichier.
C'est juste une idée comme ça mais il y en a plein d'autres
avec des champs ou des signets (l'année prochaine ?)

Anacoluthe
« Je ne crois pas aux miracles qui se renouvellent tous les ans. »
- Roland COURBIS

Avatar
Christophe Cerbourg
Bonjour et merci pour ton aide,

Lors de l'opération de découpage en N fichiers : lire ce premier
mot, l'effacer, l'utiliser comme nom de sauvegarde du fichier.
J'ai bien essayé ce genre de choses, mais comment "lire" dans le document.

J'essaye d'appliquer ce que je lis dans l'aide (voir ci-dessous) en faisant
quelque chose comme SET MonChamp "MaValeur", mais je ne retrouve rien dans
le doc. fusionné...

L'opération de découpage se fait sur le document fusionné et non lors de la
fusion. Je n'ai donc plus accès aux champs.

Quelque chose m'échappe dans ce que tu proposes : peux-tu développer ton
idée STP ?

Merci !


Exemples de champ SET
Un champ SET affecte une valeur (texte ou chiffre) à un signet. Pour
imprimer cette valeur dans chaque document fusionné résultant, vous devez
insérer un champ de signet dans le document principal. La valeur en question
est répétée dans chaque document fusionné. Le signet représente cette valeur
jusqu'à ce que vous lui en affectiez une autre. Vous pouvez insérer un
signet à plusieurs endroits ou l'utiliser dans plusieurs champs, tels que
des champs IF ou des champs = (Formule). Insérez le signet n'importe où
après le champ SET.

Exemple
Le premier champ SET définit le signet « Coût », qui est ensuite utilisé
pour calculer la valeur du signet « Rabais ». Le signet Coût doit être
défini dans le document principal avant le champ SET qui définit le Rabais.

{ SET Coût "95,00" }
{ SET Rabais " { = Coût * 10%} " }

Insérez les champs SET dans le document principal. Lorsque vous insérez le
second champ SET, laissez vide la zone Valeur de la boîte de dialogue
Insérer le mot clé. Cliquez entre les guillemets vides dans les codes de
champ SET, appuyez sur CTRL+F9 pour insérer les caractères de champ ({}),
puis tapez les instructions appropriées dans le champ = (Formule).

Le texte et les champs ci-après sont insérés dans un document principal de
fusion pour une lettre type. Le champ IF détermine quel numéro de téléphone
doit être affecté au signet « Téléphone ». Le numéro « 46.24.48.91 » est
imprimé dans toutes les lettres adressées aux destinataires domiciliés dans
les Yvelines.

{ SET Téléphone { IF { MERGEFIELD Département } = "78" "46.24.48.91"
"46.30.01.10" } }

N'oubliez pas de nous contacter avant le 30 novembre au { Téléphone }

Avatar
Christophe Cerbourg
Ca fonctionne finalement en faisant comme ça :
Set toto = ActiveDocument.Words(1)
cchamp = toto.Text
toto.Delete Unit:=wdCharacter, Count:=1
ActiveDocument.SaveAs FileName:="C:fmfm_" & cchamp & ".doc"

Merci à Anacoluthe pour l'idée !