Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Word > VBA Word
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/03/2011, 12h46   #1
Invité de passage
 
Christophe
Inscription : décembre 2010
Messages : 13
Détails du profil
Informations personnelles :
Nom : Christophe

Informations forums :
Inscription : décembre 2010
Messages : 13
Points : 1
Points : 1
Par défaut Modification Macro BreakOnSection

Bonjour a tous,

J'ai utilisé la macro BreakOnSection afin de couper un publipostage.
Ça fonctionne, j'ai bien un fichier Word de créé par section. j'ai bien la mise en page qui est gardée grâce a l'aide de carden752.

En revanche j'ai une page blanche en plus sur chaque fichier créer.
Voici ce que je lance:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Sub Fédé()
   ' Used to set criteria for moving through the document by section.
   Application.Browser.Target = wdBrowseSection
 
   'A mailmerge document ends with a section break next page.
   'Subtracting one from the section count stop error message.
   For i = 1 To ((ActiveDocument.Sections.Count) - 1)
 
      'Select and copy the section text to the clipboard
      ActiveDocument.Bookmarks("\Section").Range.Copy
 
      'Create a new document to paste text from clipboard.
      Documents.Add
      Selection.PasteAndFormat (wdFormatOriginalFormatting)
 
     ChangeFileOpenDirectory "C:\"
      DocNum = DocNum + 1
     ActiveDocument.SaveAs FileName:="Doc_" & DocNum & ".doc"
     ActiveDocument.Close
      ' Move the selection to the next section in the document
     Application.Browser.Next
   Next i
   ActiveDocument.Close savechanges:=wdDoNotSaveChanges
End Sub
Une idée pour supprimer cette page blanche en trop?

Merci
lefenek est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/03/2011, 13h50   #2
Modérateur
 
Homme Christophe CHAPAT
Spécialiste progiciel
Inscription : février 2010
Messages : 984
Détails du profil
Informations personnelles :
Nom : Homme Christophe CHAPAT
Âge : 25
Localisation : France, Haute Loire (Auvergne)

Informations professionnelles :
Activité : Spécialiste progiciel
Secteur : Service public

Informations forums :
Inscription : février 2010
Messages : 984
Points : 1 592
Points : 1 592
Envoyer un message via MSN à carden752
Bonjour,

Est-ce que tu peux décrire comment sont effectués tes sauts de section?
Chez moi ton code marche très bien et ne génère pas de page blanche.
Tu n'as pas un saut de page avant ton saut de section?

Est-ce que tes sections sont liées entre elles?
Je crois que si ce n'est pas le cas, le caractère de fin de section se trouve sur la page suivante. C'est pour cela que tu as deux pages.

Tu peux éventuellement rajouter
Code :
1
2
3
4
 Dim r as Range
Set r = ActiveDocument.Bookmarks("\Section").Range
      r.End = r.End - 1
      r.Copy
à la place de
Code :
 ActiveDocument.Bookmarks("\Section").Range.Copy
Cependant, il faut vérifier que tu ne perde pas des informations concernant la section.

En revanche, si toutes les sections ont les mêmes informations, il te suffit de les lier entre elles.
__________________
Cordialement,
Christophe

Merci de ne pas oublier de mettre résolu quand le sujet l'est. Cela aide tous les DVPnautes dans leur recherche
carden752 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/03/2011, 22h03   #3
Invité de passage
 
Christophe
Inscription : décembre 2010
Messages : 13
Détails du profil
Informations personnelles :
Nom : Christophe

Informations forums :
Inscription : décembre 2010
Messages : 13
Points : 1
Points : 1
Merci pour ta réponse.

Je suis une brelle en Word.( et j'aurai mieux fais de suivre les cours de prog au lieux d'aller draguer les minettes.)

En gros j'ai une lettre de deux pages que je fusionne en publipostage.

j'ai bien mes données renseignées pour chaque clients et entre chaque client il me met un saut de section.(toutes les deux pages)

J'ai essayé en remplacent le code, je n'ai plus la page supplémentaire mais je n'ai plus ma mise en page non plus.

J'espère être assez clair.

Merci
lefenek est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/03/2011, 17h25   #4
Modérateur
 
Homme Christophe CHAPAT
Spécialiste progiciel
Inscription : février 2010
Messages : 984
Détails du profil
Informations personnelles :
Nom : Homme Christophe CHAPAT
Âge : 25
Localisation : France, Haute Loire (Auvergne)

Informations professionnelles :
Activité : Spécialiste progiciel
Secteur : Service public

Informations forums :
Inscription : février 2010
Messages : 984
Points : 1 592
Points : 1 592
Envoyer un message via MSN à carden752
Bonjour,

je le craignais, effectivement, le problème est que le caractère de fin de section se trouve sur la deuxième page.
En supprimant un caractère avant la copie, je supprimais le caractère de fin de section.
A mon avis, il te faut garder la première partie (copie comme elle l'était) et appliquer la suppression après la copie.

Code :
ActiveDocument.Bookmarks("\Section").Range.Copy
Par contre peut-être faire la suppression sur chacun des nouveaux documents.
Code :
1
2
3
4
 
r.Start=ActiveDocument.Content.End -1 
r.End=r.Start
r.delete

Au final, quelque chose comme cela
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 
Sub Fédé()
Dim r As Range
   ' Used to set criteria for moving through the document by section.
   Application.Browser.Target = wdBrowseSection
 
   'A mailmerge document ends with a section break next page.
   'Subtracting one from the section count stop error message.
   For i = 1 To ((ActiveDocument.Sections.Count) - 1)
 
      'Select and copy the section text to the clipboard
      ActiveDocument.Bookmarks("\Section").Range.Copy
 
      'Create a new document to paste text from clipboard.
      Documents.Add
      Selection.PasteAndFormat (wdFormatOriginalFormatting)
 
    ' ChangeFileOpenDirectory "C:\"
     ' DocNum = DocNum + 1
Set r = ActiveDocument.Range
r.Start = r.End - 2 'selection des deux derniers caractères
r.Select
r.Delete
   '  ActiveDocument.SaveAs FileName:="Doc_" & DocNum & ".doc"
     ActiveDocument.Close 'r.document.close te permet de naviguer entre les différents documents, c'est peut-être mieux
      ' Move the selection to the next section in the document
     Application.Browser.Next
   Next i
   ActiveDocument.Close savechanges:=wdDoNotSaveChanges
End Sub
En fait je sélectionne jusqu'au caractère de saut de section et le supprime.


Tiens moi au courant
__________________
Cordialement,
Christophe

Merci de ne pas oublier de mettre résolu quand le sujet l'est. Cela aide tous les DVPnautes dans leur recherche
carden752 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/03/2011, 11h25   #5
Invité de passage
 
Christophe
Inscription : décembre 2010
Messages : 13
Détails du profil
Informations personnelles :
Nom : Christophe

Informations forums :
Inscription : décembre 2010
Messages : 13
Points : 1
Points : 1
bonjour,

J'ai essayé ton code mais ça me créer un fichier avec le lettre fusionner avec tout le contenu du publipostage.

Je précise qu'au final le but et d'imprimé le publipostage sur un multifonction en agrafage.

Et pour cela il me faut chaque section dans un fichier word. Ensuite je règle mon imprimante par défaut en agrafage, je selectionne tous les fichiers et je fais clique droit imprimer.

Actuellement, ca fonctionne nickel. En revanche, j'ai cette fameuse feuille blanche en fin de chaque document word.

J'ai mis un exemple de fichier que je dois traiter. Ca sera plus facile qu'avec mes explications.

Merci pour ton aide.
Fichiers attachés
Type de fichier : xls Exemple.xls (17,5 Ko, 1 affichages)
Type de fichier : doc Exemple.doc (28,5 Ko, 2 affichages)
lefenek est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/03/2011, 11h50   #6
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 321
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 321
Points : 29 220
Points : 29 220
Salut,

Avec ta dernière explication, je ne suis pas très bien ce qui te pousse à faire un fichier par résultat.

Pourquoi ne pas envoyer les enregistrements un par un vers l'imprimante.

Dans cette partie du tuto http://heureuxoli.developpez.com/off...ipostage/#L7-G je donne un code qui permet d'enregistrer le document dans un fichier en utilisant un champ du publipostage.

Si on utilise l'argument wdSendToPrinter au lieu de wdSendToNewDocument, il devient inutile de demande l'impression par la suite puisqu'elle sera réalisée dans la foulée.
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/03/2011, 16h00   #7
Invité de passage
 
Christophe
Inscription : décembre 2010
Messages : 13
Détails du profil
Informations personnelles :
Nom : Christophe

Informations forums :
Inscription : décembre 2010
Messages : 13
Points : 1
Points : 1
Oui effectivement, ce serai parfait pour mon utilisation.
En revanche, je n'ai aucune notion en vba. J'aurai donc quelque question de noob.

Le publipostage est lancé dans le code d' après ce que j'ai compris. j'ouvre donc mon word lié avec sa source excel pour les données, je ne lance pas la fusion depuis word mais depuis le code?

Ils faut donc que j'adapte le code par rapport a la source de donnée ou vis versa. Mais comment?

En gros tu me fournis la solution idéal mais je sais pas la mettre en œuvre.
lefenek est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/03/2011, 16h09   #8
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 321
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 321
Points : 29 220
Points : 29 220
Salut,

On peut très bien mettre un bouton dans word pour ne pas avoir à aller dans le code.

Je vais regarder ce soir comment adapter le code.
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/03/2011, 15h21   #9
Invité de passage
 
Christophe
Inscription : décembre 2010
Messages : 13
Détails du profil
Informations personnelles :
Nom : Christophe

Informations forums :
Inscription : décembre 2010
Messages : 13
Points : 1
Points : 1
Bonjour,

Je reviens a la charge

J'essaie d'adapter le code de Heureux-oli en vain...
Un petit conseil serai le bien venu. Faut il mettre dans le code ou s'alimente le publi?(en l'occurrence un .xls pour mon cas) Et si d'autre modifications nécessaire lesquelles?

Merci d'avance
lefenek est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/03/2011, 20h20   #10
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 321
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 321
Points : 29 220
Points : 29 220
Salut,

Il suffit de mettre ce code dans le module du document principal de fusion.


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
Sub TestPublipost()
' Déclaration des variables
Dim iR As Integer
Dim i As Integer
Dim oDoc As Document
Dim DocName As String
Dim oDS As MailMergeDataSource
 
' Affectation des objets
Set oDoc = ActiveDocument
Set oDS = oDoc.MailMerge.DataSource
 
iR = MailMerge.DataSource.RecordCount
Debug.Print iR
For i = 1 To iR
    With oDoc.MailMerge
        'Définition du premier et dernier enregistrement
        .DataSource.FirstRecord = i
 
        .DataSource.LastRecord = i
        ' Envoi des données dans un nouveau document
        .Destination = wdSendToPrinter
 
        ' Exécution du publipostage
        .Execute
        ' Actualisation de l'enregistrement pour la sauvegarde
        .DataSource.ActiveRecord = i
        'Utilisation de deux champs pour obtenir le nom du document
 
    End With
    ' Sauvegarde du document publiposté
 
Next i
End Sub
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/03/2011, 20h49   #11
Invité de passage
 
Christophe
Inscription : décembre 2010
Messages : 13
Détails du profil
Informations personnelles :
Nom : Christophe

Informations forums :
Inscription : décembre 2010
Messages : 13
Points : 1
Points : 1
Merci pour ta réponse.

J'avais compris pour le changement "Destination = wdSendToPrinter". Mais je n'arrive pas le faire fonctionner de base. J'ai une erreur d'execution 424 objet requis et au niveau du debug c'est arrété a:
iR = MailMerge.DataSource.RecordCount

Je dois oublié quelque chose de gros.
lefenek est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/03/2011, 22h38   #12
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 321
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 321
Points : 29 220
Points : 29 220
Salut,

C'est bien un document principal de fusion, un document avec une source de données accrochée ?
Je n'ai pas ce message d'erreur.
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2011, 02h17   #13
Invité de passage
 
Christophe
Inscription : décembre 2010
Messages : 13
Détails du profil
Informations personnelles :
Nom : Christophe

Informations forums :
Inscription : décembre 2010
Messages : 13
Points : 1
Points : 1
Oui c'est un publipostage basique attaché avec un xls. Peut tu tester avec les documents que j'ai mis en pièces jointes plus haut?
J'ai essayé sur du 2007 et 2010 même erreur.
lefenek est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2011, 09h50   #14
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 321
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 321
Points : 29 220
Points : 29 220
Salut,

Je n'ai pas le message d'erreur avec tes fichiers.
Tu n'es pas le premier à signaler ce message d'erreur et je ne parviens pas à reproduire l'erreur. J'ai essayé sur 2003 et 2010, il ne me reste que 2007 à tester.
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2011, 10h54   #15
Invité de passage
 
Christophe
Inscription : décembre 2010
Messages : 13
Détails du profil
Informations personnelles :
Nom : Christophe

Informations forums :
Inscription : décembre 2010
Messages : 13
Points : 1
Points : 1
neiluj26 avait exactement le même soucis et la résolus avec le changement de la ligne qui posée problème par cette ligne "iR = oDoc.MailMerge.DataSource.RecordCount". Je test est je te tiens au courant.
lefenek est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2011, 11h06   #16
Invité de passage
 
Christophe
Inscription : décembre 2010
Messages : 13
Détails du profil
Informations personnelles :
Nom : Christophe

Informations forums :
Inscription : décembre 2010
Messages : 13
Points : 1
Points : 1
C'est une tuerie ca marche parfaitement!
En creation de fichier et en impression a la volée.
Merci beaucoup Heureux-oli!!!!
lefenek est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2011, 20h27   #17
Modérateur
 
Homme Christophe CHAPAT
Spécialiste progiciel
Inscription : février 2010
Messages : 984
Détails du profil
Informations personnelles :
Nom : Homme Christophe CHAPAT
Âge : 25
Localisation : France, Haute Loire (Auvergne)

Informations professionnelles :
Activité : Spécialiste progiciel
Secteur : Service public

Informations forums :
Inscription : février 2010
Messages : 984
Points : 1 592
Points : 1 592
Envoyer un message via MSN à carden752
Bonjour Olivier et Lefenek,

Comme je te l'avais effectivement déjà souligné, j'ai le problème sur 2007.
Je vais faire des tests pour essayer de trouver d'où provient le problème afin de régler cette situation pour la FAQ, j'ai un peu de temps ce soir.

Je te tiens au courant
__________________
Cordialement,
Christophe

Merci de ne pas oublier de mettre résolu quand le sujet l'est. Cela aide tous les DVPnautes dans leur recherche
carden752 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2011, 20h58   #18
Modérateur
 
Homme Christophe CHAPAT
Spécialiste progiciel
Inscription : février 2010
Messages : 984
Détails du profil
Informations personnelles :
Nom : Homme Christophe CHAPAT
Âge : 25
Localisation : France, Haute Loire (Auvergne)

Informations professionnelles :
Activité : Spécialiste progiciel
Secteur : Service public

Informations forums :
Inscription : février 2010
Messages : 984
Points : 1 592
Points : 1 592
Envoyer un message via MSN à carden752
La documentation indique que la classe MailMerge existe et peut appartenir à un objet Word.
Cependant, quand j'écris application. ou word. (il ne me propose pas MailMerge).
Est-ce une erreur dans la documentation ou un problème avec la librairie correspondante MSWORD.OLB
__________________
Cordialement,
Christophe

Merci de ne pas oublier de mettre résolu quand le sujet l'est. Cela aide tous les DVPnautes dans leur recherche
carden752 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/03/2011, 21h50   #19
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 321
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 321
Points : 29 220
Points : 29 220
Salut,

Je l'ai toujours utilisé sur un document.
Dans l'aide 2010, il appartient au document.

Citation:
expression.MailMerge

expression Variable qui représente un objet Document
Je vais changer le tuto et l'utiliser sur le doc, c'est pas une erreur et ça devrait lever le message d'erreur.
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h27.


 
 
 
 
Partenaires

Hébergement Web