Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
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 03/10/2011, 21h24   #1
Invité de passage
 
Homme
Inscription : octobre 2011
Messages : 4
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : octobre 2011
Messages : 4
Points : 1
Points : 1
Par défaut syntaxe d'une variable dans la connection d'une base pour un publipostage vba

Bonjour,
malgré la lecture assidue de nombreux sujets publiés par Silkyroad(et d'ailleurs merci à lui) sur les publipostage pour Word à partir de Excel, je bute sur un problème de syntaxe sur l'utilisation de variable dans la connexion de la base:
en reprenant l'enregistrement de la macro faite dans word, j'ai souhaité remplacer le chemin de la base par une variable et la choix de la feuille source par une autre; le blocage se fait au niveau de la feuille source; quelque soit l’écriture (avec replace pour les guillemets, etc.), je ne parviens pas à me connecter; je précise que si j'écris en dur la feuille source, la variable du nom de la base permet d’accéder à la base: il n'y a donc qu'un souci avec la syntaxe de la variable de la feuille source.
voici le code:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
With docWord.MailMerge
        .OpenDataSource Name:=NomBase _
        , ConfirmConversions:=True, ReadOnly:=False, LinkToSource:=True, _
        AddToRecentFiles:=False, PasswordDocument:="", PasswordTemplate:="", _
        WritePasswordDocument:="", WritePasswordTemplate:="", Revert:=False, _
        Format:=wdOpenFormatAuto, Connection:= _
        "Provider=Microsoft.ACE.OLEDB.12.0;User ID=Admin;Data Source=NomBase;Mode=Read;Extended Properties=""HDR=YES;IMEX=1;"";Jet OLEDB:System database="""";Jet OLEDB:Registry Path="""";Jet OL" _
        , SQLStatement:="SELECT * FROM `'Clients_factures$'`", _
        SQLStatement1:="", SubType:=wdMergeSubTypeAccess
        
        'Spécifie la fusion vers un nouveau document
        .Destination = wdSendToNewDocument
        .SuppressBlankLines = True
            'Prend en compte l'ensemble des enregistrements
            With .DataSource
                .FirstRecord = wdDefaultFirstRecord
                .LastRecord = wdDefaultLastRecord
            End With
bien sûr, c'est client_factures$ que je cherche à remplacer.
merci par avance aux dévoués...
fario est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/10/2011, 21h36   #2
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 894
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 894
Points : 7 178
Points : 7 178
Bonjour,

As tu essayé comme cela
Code :
, SQLStatement:="SELECT * FROM `'" & Variable & "'`", _
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/10/2011, 22h00   #3
Invité de passage
 
Homme
Inscription : octobre 2011
Messages : 4
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : octobre 2011
Messages : 4
Points : 1
Points : 1
Bonjour Jérôme,
oui j'avais essayé et j'ai recommencé à l'instant dans le doute; mais toujours pas; j'ai lu des forums sur les variables dans les requêtes sql dans l'espoir d'y trouver une soluce: j'ai compris que les guillemets contenus dans la variable et entourant le nom de la feuille source étaient gênant: j'ai donc créé une fonction les remplacant :
Code :
1
2
3
4
Function quote(chaine)
chaine = Replace(chaine, """", "")
quote = chaine
End Function
dans le sub:
Code :
SQLStatement:="SELECT * FROM `'" & quote(feuilleSource) & " $'`",
.
peut être une erreur là, car dans l'affichage des variables locales, quote affiche toujours les guillemets autour du nom.
merci pour ton attention
fario est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/10/2011, 22h16   #4
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 894
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 894
Points : 7 178
Points : 7 178
et comme cela, en supprimant les apostrophes
Code :
, SQLStatement:="SELECT * FROM `" & Variable & "`", _
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/10/2011, 22h30   #5
Invité de passage
 
Homme
Inscription : octobre 2011
Messages : 4
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : octobre 2011
Messages : 4
Points : 1
Points : 1
oui j'ai essayé et re-essayé, mais pas mieux;
info: en supprimant après le nomBase le reste de la requête (commentaires) je parviens bien à la boite de dialogue Word "sélectionner le tableau", mais si je rétablis en insérant la variable, j'arrive à la boite "tables" et pas de suite.
une autre idée?
fario est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/10/2011, 22h37   #6
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 894
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 894
Points : 7 178
Points : 7 178
Et en mettant toute la requete dans la variable
Code :
Variable = "SELECT * FROM `'Clients_factures$'`"
et ensuite
Code :
, SQLStatement:= Variable, _
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/10/2011, 22h58   #7
Invité de passage
 
Homme
Inscription : octobre 2011
Messages : 4
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : octobre 2011
Messages : 4
Points : 1
Points : 1
re, Jérôme,
ça je n'avais pas essayé, et cela fonctionne; j'ai dû changer ma vision du déroulement de la procédure: dans le classeur origine j'avais 2 feuilles qui correspondaient chacune à une base client dans d'autres classeurs; de fait je testais la feuille active par If InStr(nomfeuille, "LM") = 0 Then et j'appelais une variable NomBase de là, je créais ma variable feuilleSource par le nomfeuille;
j'ai donc introduit ma variable feuilleSource dans le if et définit donc d'un coup les deux variables, c'est parfaitement viable pour moi.
ta solution est donc bien vue, mais ce qui me chagrine c'est pourquoi nous ne parvenons pas à le faire dans la requête.
merci et à charge
bonne soirée
fario 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 19h28.


 
 
 
 
Partenaires

Hébergement Web