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

Publipostage VBA

5 réponses
Avatar
CAP2
Bonsoir à toutes et à tous,

voilà, je voudrais automatiser un publipostage utilisant comme source un
fichier Excel.

Dans le fichier Excel, j'ai plusieurs champs dont un champ "date envoi" et
un champ "type"...

J'aurais voulu savoir si je peux lancer mon document word, exécuter une
macro qui aille me chercher ce fichier Excel et qui ne prenne en compte pour
le publipostage que les enregistrements dont la "date envoi" est égale à la
date du jour et dont le type est égal à une valeur donnée...

J'ai bien tenté un :

ActiveDocument.MailMerge.OpenDataSource

avec un argument du type :

SQLStatement:="SELECT * FROM `BASE$` WHERE `Date envoi` = Date AND `Type` =
'test'

Mais ça ne passe pas...

Merci d'avance de vos idées et suggestions

CAP2

5 réponses

Avatar
Anacoluthe
Bonjour !

'CAP2' nous a écrit ...
SQLStatement:="SELECT * FROM `BASE$` WHERE `Date envoi` = Date AND `Type` =
'test'
Mais ça ne passe pas...


Votre requête SQL est une chaîne. Vous devez recomposer cette chaîne avec
les opérateurs habituels de concaténation
"SELECT * FROM `BASE$` WHERE `Date envoi` = " & date & " AND ...
date doit avoir le bon format chaîne de date, sinon écrivez des trucs comme
"WHERE `Date envoi` = " & Format(Date, "dd-MM-yy") & " ... "
S'ajoute souvent dans une requête SQL la délicate question des guillemets:
dans une chaîne vba on place des " en les doublant ""

Anacoluthe
« Qui cherche le plaisir ne trouve que des chaînes. »
- Jacques DEVAL

Avatar
CAP2
Super !!

Merci beaucoup Anacoluthe !!

J'avais 2 erreurs : La concaténation erronée et les guillemets doublés pour
les chaînes (j'avais juste placé des ')

Merci encore !

CAP2
Avatar
CAP2
Super !!

Merci beaucoup Anacoluthe !!

J'avais 2 erreurs : La concaténation erronée et les guillemets doublés pour
les chaînes (j'avais juste placé des ')

Merci encore !

CAP2
Avatar
CAP2
Re-bonsoir Anacoluthe,

si je peux abuser de ta patience...

Mon champ "Date envoi" est bein écrit sous excel sous la forme jj/mm/aaaa.

Il arrive dans Word sour la forme mm/jj/aaaa.

Je demande donc la confirmation des conversions lors de l'ouverture et je
choisis " ... Excel via un DDE".

Du coup les données arrivent bien sous la forme jj/mm/aaaa.

Mon code est le suivant :

ActiveDocument.MailMerge.OpenDataSource Name:= _
"C:Documents and SettingsNeuroMes documentsSource.xls", _
ConfirmConversions:=True, ReadOnly:úlse, LinkToSource:=True, _
AddToRecentFiles:úlse, PasswordDocument:="", PasswordTemplate:="",
_
WritePasswordDocument:="", WritePasswordTemplate:="", Revert:úlse,
_
Format:=wdOpenFormatAuto, Connection:="Region1",
SQLStatement:="SELECT * FROM `Region1` WHERE `Date envoi`= " & Date & " AND
`Type courrier`=""p1 bis""", _
SQLStatement1:="", SubType:=wdMergeSubTypeAccess

Et ça me donne 0 enregistrement, alors qu'il y en a...
De plus, si j'enlève la partie sur le filtre sur la date, ça passe, mais il
me rebascule les dates au format mm/jj/aaaa

GRRR!!

Puis-je rester à chaque lancement de la macro au format jj/mm/aaaa sur mes
date, et en plus faire que le test sur la date du jour passe ?

Merci de ton indulgence et de ton aide !!

CAP2
Avatar
Anacoluthe
Bonjour !

'CAP2' nous a écrit ...
Je demande donc la confirmation des conversions lors de l'ouverture et je
choisis " ... Excel via un DDE".
Du coup les données arrivent bien sous la forme jj/mm/aaaa.
si j'enlève la partie sur le filtre sur la date, ça passe, mais il
me rebascule les dates au format mm/jj/aaaa


Votre macro re-ouvre la base de données, mais probablement plus par DDE.
En DDE on ne peut accéder qu'à la /première/ feuille d'un classeur Excel

Anacoluthe
« La vraie nouveauté naît toujours dans le retour aux sources. »
- Edgar MORIN