OVH Cloud OVH Cloud

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
Geo a écrit, le 12/12/2010 14:21 :
Bonjour

Pour le message, ajoutez :

ActiveDocument.Saved = True
avant le
ActiveDocument.Close



A propos, ça m'est arrivé de faire ça, et Excel 2003 me demande qua nd
même si je veux sauvegarder le classeur.
Alors j'ai dit basta, et j'ai mis Workbook.Save
ce n'est pas ça que je voulais, mais au moins c'est plus discret, il n' y
a plus de message de demande de confirmation.

Une idée sur une explication ?
Avatar
MorMic
Bonjour

Lorsque je développe je fais bien comme vous le conseillez, je mets toujours
l'option explicit et je ne valide pas la gestion d'erreurs.

Pour le reste j'ai bien fait comme vous le suggérez mais les données
s'affichent sur les signets les unes derrières les autres comme si le
document était sauvegardé à chaque fois et de plus, ma variable i est
toujours à 2 !!.

Je vais essayé de faire un document encore plus simple et si le phénomène
continue, je me propose de vous l'envoyer pour que vous puissiez juger par
vous-même.

Merci Geo et Gloops de votre aide.

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

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+


Avatar
Geo
Bonjour à Gloops qui nous a écrit :

A propos, ça m'est arrivé de faire ça, et Excel 2003 me demande quand même si je veux
sauvegarder le classeur.
Alors j'ai dit basta, et j'ai mis Workbook.Save
ce n'est pas ça que je voulais, mais au moins c'est plus discret, il n'y a plus de
message de demande de confirmation.

Une idée sur une explication ?



Non, aucune.
La première idée qui m'est venue, ce serait qu'Excel calcule qqch lors
de la clôture, mais le Save ne devrait pas faire mieux que le Saved=
true.
Dans le cas présent ce serait problématique d'ajouter une Save.
Il reste l'option
MonClasseur.Close SaveChanges:úlse

--
A+
Avatar
Geo
Bonjour

Lorsque je développe je fais bien comme vous le conseillez, je mets toujours l'option
explicit et je ne valide pas la gestion d'erreurs.



Dans la macro que vous avez envoyé il y a des variables non déclarées,
elles doivent donc être globales au module.
C'est le cas du i qui peut être réinitialisé ailleurs.

Je vais essayé de faire un document encore plus simple et si le phénomène continue, je
me propose de vous l'envoyer pour que vous puissiez juger par vous-même.



Pas de souci, vous m'envoyez une minibase Excel, le modèle normal.dot
et le courrier type dans un même zip à
geo point le point du at laposte point net

--
A+
Avatar
Gloops
MorMic a écrit, le 12/12/2010 19:31 :
Bonjour

Lorsque je développe je fais bien comme vous le conseillez, je mets t oujours
l'option explicit et je ne valide pas la gestion d'erreurs.



Pas de gestion d'erreurs ? Tiens, quelle drôle d'idée ...




Pour le reste j'ai bien fait comme vous le suggérez mais les donnée s
s'affichent sur les signets les unes derrières les autres comme si le
document était sauvegardé à chaque fois et de plus, ma variable i est
toujours à 2 !!.



Le document qui ne reprend pas sa forme initiale ?
ça me rappelle quelque chose, ça.
Dès qu'on a ouvert le modèle, avant de faire quelque transformation q ue
ce soit, le sauvegarder sous le nom qu'il devra avoir au final (avec
SaveAs). Comme ça, on ne touche pas au document original.

La tentation a priori pourrait être de faire ça à la fin, il s'avè re que
ce n'est guère très indiqué, si il y a une sauvegarde automatique e n
cours de route il faut qu'elle soit faite sous le nom final.

i toujours à 2, alors là il va bien falloir que je lise le code ...
Avatar
Gloops
Geo a écrit, le 12/12/2010 20:05 :
Bonjour

Lorsque je développe je fais bien comme vous le conseillez, je mets
toujours l'option explicit et je ne valide pas la gestion d'erreurs.



Dans la macro que vous avez envoyé il y a des variables non déclaré es,
elles doivent donc être globales au module.
C'est le cas du i qui peut être réinitialisé ailleurs.



Ah ben oui, je me permets de répéter mon intervention d'hier :
Oui, et particulièrement la déclaration du compteur, avec l'indicat ion précise de son emplacement.



Si il n'y a carrément pas de déclaration, Excel se débrouille ...

Effectivement, Dim I As Integer, en haut du module (après le Option
Explicit et l'éventuel choix de l'ordre de tri), devrait bien aider.
Si on l'appelait depuis un autre module on remplacerait Dim par Public,
mais il ne me semble pas que ce soit le cas ?
Avatar
Geo
Re

i toujours à 2, alors là il va bien falloir que je lise le code ...



Ben oui mdr
Je ne comprends pas le comportement décrit, car il n'y a pas de Save.
Reste l'idée que la macro ou la déclaration des variables globales,
dont "i", serait dans le document type.


--
A+
Avatar
Geo
Si il n'y a carrément pas de déclaration, Excel se débrouille ...



Oui, mais perso je n'aime pas.
J'utilise un langage de programmation où les déclarations ne peuvent
pas être rendues obligatoires et les noms sensibles à la casse, c'est à
dire que j et J ne sont pas la même variable.
C'est pas triste.


--
A+
Avatar
Gloops
MorMic a écrit, le 11/12/2010 23:27 :
Set xlApp = CreateObject("excel.application")



Ah oui alors xlApp n'ayant pas été déclaré, sera du type objet.
On aurait pu le déclarer comme Excel.Application, et l'initialiser
pareil, avec l'instruction ci-dessus.

L'avantage, si on a bien coché la référence qui va bien (dans
Outils/Références), c'est qu'on a accès à l'intellisense, donc qu and
tape xlApp suivi d'un point, on voit apparaître toutes les propriété s et
méthodes de l'objet Application d'Excel.

ça s'appelle Early Binding, par opposition à Late Binding, ce qui
permettra de faire une recherche dessus, un peu plus tard, quand tout
sera ficelé, pour comprendre les tenants et aboutissants.

Depuis que j'ai découvert qu'on peut, j'aime bien faire les deux
ensemble, comme ça :

Dim xlApp As New Excel.Application

C'est pratique, dès que j'ai tapé Excel, après le point, Applicatio n
m'est proposé dans la liste, par l'intellisense.

Alors qu'avec CreateObject, si on fait une faute de frappe à l'intéri eur
des guillemets, c'est au moment de l'exécution, qu'on s'en rend compte.



Souvent, mes modules faisant appel à Excel commencent par

Dim xlApp As New Excel.Application
Dim xlWbk As Excel.Workbook
Dim xlWst As Excel.Worksheet

Seul Application est initialisé par New, pour les autres on a
Workbook.Add, ActiveWorkbook.Worksheets(1) ... qui permettent de savoir
de quoi on parle.

Bien entendu tout cela ne vaut pas si on veut appeler une instance
d'Excel déjà ouverte, auquel cas on ne coupera pas au GetObject, à moins
qu'une façon de faire m'ait échappé.

Par ailleurs il arrive qu'on soit obligé de faire appel au Late Binding
si on a un petit souci avec l'installation d'une des applications.
Avatar
Gloops
Geo a écrit, le 12/12/2010 20:27 :
Si il n'y a carrément pas de déclaration, Excel se débrouille .. .



Oui, mais perso je n'aime pas.



Ah ben c'est sûr que si on a des étagères c'est pour pouvoir ranger ses
affaires :)


J'utilise un langage de programmation où les déclarations ne peuven t pas
être rendues obligatoires et les noms sensibles à la casse, c'est à dire
que j et J ne sont pas la même variable.
C'est pas triste.


1 2 3