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

SIGNETS et PUBLIPOSTAGE

21 réponses
Avatar
MorMic
Bonjour au quelques lecteurs de ce groupe,

Ayant un publipostage relativement complexe à réaliser, c'est à dire avec
multiple variables et des conditions qui nécessitent l'utilisation d'un
programme VBA, je me suis lancé dans une réalisation avec l'usage de
SIGNETS: quelle aventure !

J'espérais trouver quelquechose qui s'utilisait comme un champ dans lequel
on écrit la valeur d'une variable. Que nenni !

Quelqu'un a-t'il une expérience sur le sujet ? Pourrait-il me'indiquer une
astuce ?

Merci de votre aide

Michel

10 réponses

1 2 3
Avatar
Gloops
MorMic a écrit, le 04/12/2010 09:32 :
Bonjour au quelques lecteurs de ce groupe,

Ayant un publipostage relativement complexe à réaliser, c'est à d ire avec
multiple variables et des conditions qui nécessitent l'utilisation d' un
programme VBA, je me suis lancé dans une réalisation avec l'usage d e
SIGNETS: quelle aventure !

J'espérais trouver quelquechose qui s'utilisait comme un champ dans l equel
on écrit la valeur d'une variable. Que nenni !

Quelqu'un a-t'il une expérience sur le sujet ? Pourrait-il me'indique r une
astuce ?

Merci de votre aide

Michel






Bonjour,

Tant qu'à se pencher dessus, autant savoir où on va, donc précise v oir
ce que tu veux faire avec les signets. Ta description ressemble au champ
Remplir (ou Fill-in), mais j'ai pu mal comprendre, et surtout c'est a
priori hors sujet dans le cadre d'un publipostage.

De plus n'oublie pas une règle d'or avec Word surtout si on veut faire
de la programmation : toujours préciser la version. Comme tu as parlé de
VBA ça donne déjà une indication, mais si on travaille avec une ver sion
différente de la tienne il vaut autant le savoir.
Avatar
MorMic
Bonsoir Gloops

Merci de t'intéresser à mon problème et désolé de ne pas avoir été
suffisamment précis.
Je travaille avec Office 2003 et j'essaie de développer en VBA.
Ce que je souhaiterais faire n'est rien d'autre qu'un publipostage mais
quelque peu sophistiqué:

J'ai un courrier type dans lequel je dois bien sûr identifier le
destinataire: nom, adresse, etc...
Puis, dans le corps du texte, j'ai besoin de champs recevant des variables
issues du résultat de conditions et/ou de calculs.
Les données de bases sont puisées dans une feuille de calcul Excel.
C'est à dire que pour chaque page imprimée, il y aura une personnalisation
des champs.

Mon problème est:

Après avoir récupéré mes données, j'ai tenté d'utiliser les signets ou les
champs, mais leur gestion est infernale car soit ils s'effacent après
écriture des variables, soit les données se rajoutent les unes derrière les
autres.

Ma question est:

N'y-a-t'il pas un moyen simple dans une page Word de définir des champs dans
lequel on écrirait des variables en VBA et cela à plusieurs reprise comme
dans un publipostage à partir d'Excel.

Tu dois certainement penser "pourquoi ne pas partir d'Excel". Et bien
parcequ'il me semble plus simple, plus naturel et plus logique, l'objet
principal étant un document Word à traiter, de travailler autour de cet
objet.

Espérant avoir éclaircit la question,
Je te salue.

Michel

"Gloops" a écrit dans le message de news:
iddg90$eor$
MorMic a écrit, le 04/12/2010 09:32 :
Bonjour au quelques lecteurs de ce groupe,

Ayant un publipostage relativement complexe à réaliser, c'est à dire avec
multiple variables et des conditions qui nécessitent l'utilisation d'un
programme VBA, je me suis lancé dans une réalisation avec l'usage de
SIGNETS: quelle aventure !

J'espérais trouver quelquechose qui s'utilisait comme un champ dans lequel
on écrit la valeur d'une variable. Que nenni !

Quelqu'un a-t'il une expérience sur le sujet ? Pourrait-il me'indiquer une
astuce ?

Merci de votre aide

Michel






Bonjour,

Tant qu'à se pencher dessus, autant savoir où on va, donc précise voir
ce que tu veux faire avec les signets. Ta description ressemble au champ
Remplir (ou Fill-in), mais j'ai pu mal comprendre, et surtout c'est a
priori hors sujet dans le cadre d'un publipostage.

De plus n'oublie pas une règle d'or avec Word surtout si on veut faire
de la programmation : toujours préciser la version. Comme tu as parlé de
VBA ça donne déjà une indication, mais si on travaille avec une version
différente de la tienne il vaut autant le savoir.
Avatar
Geo
Bonsoir

Vous faites un courrier type en marquant les emplacements avec des
signets.

Dans une boucle :
Ouvrir le document
Insérer les valeurs aux endroits marqués.
enregistrer et fermer le document.
passer au courrier suivant.

Si les signets disparaissent c'est pas grave, on n'en a plus besoin.

--
A+
Avatar
MorMic
Bonsoir Geo

Trés bonne idée.
Cependant, je ne vois pas dans quel module je peux écrire les codes pour
fermer mon document et le rouvrir.
Actuellement j'ai écrit mon code dans un module de Project(Ma_Lettre) et si
je ferme mon document, je sors du code.

Merci de votre aide

Michel

"Geo" a écrit dans le message de news:

Bonsoir

Vous faites un courrier type en marquant les emplacements avec des
signets.

Dans une boucle :
Ouvrir le document
Insérer les valeurs aux endroits marqués.
enregistrer et fermer le document.
passer au courrier suivant.

Si les signets disparaissent c'est pas grave, on n'en a plus besoin.

--
A+


Avatar
Geo
Bonjour

Actuellement j'ai écrit mon code dans un module de Project(Ma_Lettre) et si je ferme
mon document, je sors du code.




Il faut mettre le code dans Normal
Ce modèle est chargé à chaque lancement de Word, donc les macros sont
disponibles et modifiables.
C'est d'ailleurs là que se met le code par défaut :
Alt + F11 et Insertion Module.

--
A+
Avatar
MorMic
Bonsoir Geo

Je reviens vers vous car ayant suivis vos conseils, je me retrouve face à un
nouveau problème:
J'ai créé une boucle qui:
ouvre le document Word
lit les lignes de la base de données
charge les données sur le document à la place des signets
ferme le document Word
incrémente de 1 le compteur de boucle

Mon problème est que le compteur de boucle redémarre toujours à 1, comme si
le fait de fermer le document Word réinitialisait les compteurs.

De plus j'ai essayé d'utiliser Application.DisplayAlert= False pour eviter
d'avoit le message "Voulez enregistrer le fichier". Le message n'apparaît
plus, mais le fichier est enregistré pas défaut et donc les données
s'accumulent après les signets.

Si vous avez une idée......

Merci encore de votre aide

Michel

"Geo" a écrit dans le message de news:

Bonjour

Actuellement j'ai écrit mon code dans un module de Project(Ma_Lettre) et
si je ferme mon document, je sors du code.




Il faut mettre le code dans Normal
Ce modèle est chargé à chaque lancement de Word, donc les macros sont
disponibles et modifiables.
C'est d'ailleurs là que se met le code par défaut :
Alt + F11 et Insertion Module.

--
A+


Avatar
Geo
Bonsoir

Mon problème est que le compteur de boucle redémarre toujours à 1, comme si le fait de
fermer le document Word réinitialisait les compteurs.



Difficile de vous répondre sans voir le code.

De plus j'ai essayé d'utiliser Application.DisplayAlert= False pour eviter d'avoit le
message "Voulez enregistrer le fichier". Le message n'apparaît plus, mais le fichier
est enregistré pas défaut et donc les données s'accumulent après les signets.



Je ne vois pas non plus, il y a une astuce pour éviter ce message,
c'est de mettre
MonDocument.Saved = true
Mais il n'y a pas de raison que vous ayez ce message, vous devez avoir
:
MonDocument.SaveAs NomDuFichier
MonDocument.Close
Et donc pas de message d'alerte.

--
A+
Avatar
Gloops
Geo a écrit, le 10/12/2010 22:55 :
Bonsoir

Mon problème est que le compteur de boucle redémarre toujours à 1,
comme si le fait de fermer le document Word réinitialisait les compt eurs.



Difficile de vous répondre sans voir le code.



Oui, et particulièrement la déclaration du compteur, avec l'indicatio n
précise de son emplacement.
Avatar
MorMic
Bonsoir

Voici le code de ma routine:

Sub LanceFusion()
Dim ColNom As Integer, ColAd1 As Integer, ColAd2 As Integer, ColCP As
Integer, ColVille As Integer
On Error GoTo GestionErreur
Set xlApp = CreateObject("excel.application")
Set FicBase = xlApp.Workbooks.Open(mRepert & mBase & ".xls")
With FicBase.Sheets(1)
For i = 2 To .Range("A1").End(xldown).Row 'scan toute la base de
données xls
'*************Sélection des données en fonction de la couleur
des cellules******
If .Cells(i, 1).Interior.Color = vbBlue Then
ColNom = 1: ColAd1 = 16: ColAd2 = 17: ColCP = 18: ColVille =
19
Else
ColNom = 11: ColAd1 = 12: ColAd2 = 13: ColCP = 14: ColVille
= 15
End If
'******************************************************************************
'**************Ecriture du
document*************************************
Documents.Open mRepert & mfic & ".doc" 'ouvre la lettre de
fusion
For j = 1 To 5 ' Ecriture des signets
ActiveDocument.Bookmarks("sNom").Range.Text = .Cells(i,
ColNom)
ActiveDocument.Bookmarks("sAd1").Range.Text = .Cells(i,
ColAd1)
ActiveDocument.Bookmarks("sAd2").Range.Text = .Cells(i,
ColAd2)
ActiveDocument.Bookmarks("sCP").Range.Text = .Cells(i,
ColCP)
ActiveDocument.Bookmarks("sVille").Range.Text =
.Cells(i, ColVille)
Next j
'MsgBox i
ActiveDocument.PrintOut
ActiveDocument.Close
'************************************************************************
Next i
End With
FicBase.Close
Set FicBase = Nothing
GoTo FinLanceFusion
GestionErreur:
MsgBox "Erreur N° " & Err, vbCritical, "Erreur détectée"
FinLanceFusion:
End Sub

Merci
Michel

"Geo" a écrit dans le message de news:

Bonsoir

Mon problème est que le compteur de boucle redémarre toujours à 1, comme
si le fait de fermer le document Word réinitialisait les compteurs.



Difficile de vous répondre sans voir le code.

De plus j'ai essayé d'utiliser Application.DisplayAlert= False pour
eviter d'avoit le message "Voulez enregistrer le fichier". Le message
n'apparaît plus, mais le fichier est enregistré pas défaut et donc les
données s'accumulent après les signets.



Je ne vois pas non plus, il y a une astuce pour éviter ce message, c'est
de mettre
MonDocument.Saved = true
Mais il n'y a pas de raison que vous ayez ce message, vous devez avoir :
MonDocument.SaveAs NomDuFichier
MonDocument.Close
Et donc pas de message d'alerte.

--
A+


Avatar
Geo
Bonjour

Pour le message, ajoutez :

ActiveDocument.Saved = True
avant le
ActiveDocument.Close

Sinon, cette macro est bien dans le modèle Normal.dot ?
La variable dont vous parlez, c'est i ?
Essayez comme ceci :
Dim MonDoc As Document
Set MonDoc = Documents.Open(....
For j = 1 To 5 ' Ecriture des signets
MonDoc.Bookmarks("sNom").Range.Text = .Cells(i, ColNom)
etc.
Next j
Debug.Print "Document : " & i
MonDoc.PrintOut
MonDoc.Saved = True
MonDoc.Close

Pour la mise au point, évitez la gestion d'erreur, ça peut masquer
certaines choses et je ne saurais trop vous inciter à utiliser
Option Explicit
et déclarer ainsi toutes vos variables.

--
A+
1 2 3