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 14/07/2011, 19h58   #1
Invité régulier
 
Femme
Inscription : juin 2011
Messages : 23
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Secteur : Enseignement

Informations forums :
Inscription : juin 2011
Messages : 23
Points : 6
Points : 6
Par défaut Utiliser une variable dans une instruction SQL - publipostage

Bonjour,

Je souhaite automatiser un publipostage, en ne gardant que certaines valeurs de mon fichier source. J'ai donc le code suivant :

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
Private Sub CommandButton1_Click()
 
Dim appWord As Word.Application
Dim docWord As Word.Document
Dim appOffice As Office.OfficeDataSourceObject
Dim sql As String
Dim mois As String
 
Application.ScreenUpdating = False
 
Set appWord = New Word.Application
appWord.Visible = True
 
Set docWord = appWord.Documents.Open("C:\Nom2.docx")
 
 
With docWord.MailMerge
.MainDocumentType = wdDirectory
.OpenDataSource _
Name:="C:\facturation.xlsm", _
SQLStatement:="SELECT *" & _
"FROM [Facturation$]" & _
"WHERE [Langue]= 'Anglais'" & _
"And [Facture1]= 'mai'"
 
 
.Execute Pause:=False
 
End With
 
End Sub

Ce code fonctionne bien, mais j'aurai besoin que l'utilisateur renseigne le mois de facturation sur lequel il veut réaliser le publipostage.

Je veux donc insérer une variable dans ma requête sql et c'est là que ça coince :

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
Private Sub CommandButton1_Click()
 
Dim appWord As Word.Application
Dim docWord As Word.Document
Dim appOffice As Office.OfficeDataSourceObject
Dim sql As String
Dim mois As String
 
Application.ScreenUpdating = False
 
Set appWord = New Word.Application
appWord.Visible = True
 
Set docWord = appWord.Documents.Open("C:\Nom2.docx")
 
mois = InputBox(prompt:="essai", Title:="facturation")
 
With docWord.MailMerge
.MainDocumentType = wdDirectory
.OpenDataSource _
Name:="C:\facturation.xlsm", _
SQLStatement:="SELECT *" & _
"FROM [Facturation$]" & _
"WHERE [Langue]= 'Anglais'" & _
"And [Facture1]= mois"
 
 
.Execute Pause:=False
 
End With
 
End Sub
J'ai essayé diverses syntaxes pour intégrer la variable à la requête, mais soit l'éditeur VBA me signale que j'ai une erreur de syntaxe, soit le code ne marche plus. Est-ce que vous auriez des idées ?


Merci beaucoup !


Pauline
paulinegue est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2011, 08h14   #2
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 324
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 324
Points : 29 226
Points : 29 226
Salut,


On peut toujours essayer

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
...
Dim SQL as String
...
...
SQL  ="SELECT *" & _
"FROM [Facturation$]" & _
"WHERE [Langue]= 'Anglais'" & _
"And [Facture1]= '" & mois & "';"
...
 
...
msgbox SQL
 
...
 
Name:="C:\facturation.xlsm", _
SQLStatement:=SQL
__________________
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 15/07/2011, 12h12   #3
Invité régulier
 
Femme
Inscription : juin 2011
Messages : 23
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Secteur : Enseignement

Informations forums :
Inscription : juin 2011
Messages : 23
Points : 6
Points : 6
Bonjour Heureux-oli,


Merci de m'avoir proposé cette solution ! Malheureusement, cela ne marche toujours pas, même si la MsgBox me permet de vérifier que la variable est bien prise en compte dans la requête.

En effet, quand je clique sur mon bouton, le publipostage ne s'effectue pas directement : une boîte de dialogues "Select Table" s'ouvre mais mon fichier source n'apparaît pas dans les choix proposés.

Du coup, je suis obligée d'annuler le processus, et j'obtiens l'erreur "Run-time error '4198' - Command failed".


Est-ce que vous auriez d'autres idées ?


Merci beaucoup en tout cas !


Pauline
paulinegue est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/08/2011, 10h07   #4
Invité régulier
 
Femme
Inscription : juin 2011
Messages : 23
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Secteur : Enseignement

Informations forums :
Inscription : juin 2011
Messages : 23
Points : 6
Points : 6
Par défaut balises de code

Bonjour,

Je viens de tester à nouveau le code et il marche, c'est fantastique !Merci Heureux-Oli ! Mon erreur venait du fait que ma requête SQL demandait un classement par ordre alphabétique :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
...
 
With docWord.MailMerge
.MainDocumentType = wdDirectory
.OpenDataSource _
Name:="\\chgedc01\Staff docs\ASC Geneva\Pauline\Facturation\facturation.xlsm", _
SQLStatement:="SELECT *" & _
"FROM [Facturation$]" & _
"WHERE [Langue]= 'Allemand'" & _
"And [Decision] LIKE '3%'" & _
"And [Facture1]= '" & mois & "';" & _
"ORDER BY [Nom]"
 
...

Quand j'ajoute cette dernière ligne, le code ne fonctionne plus. Du coup, une autre question se pose : comment faire pour que mes données se classent par ordre alphabétique ?


Merci beaucoup !


Pauline
paulinegue est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/08/2011, 11h43   #5
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 773
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 773
Points : 16 853
Points : 16 853
Envoyer un message via Skype™ à bbil
le ";" signe la fin de la commande SQL, place ton code supplémentaire avant ce point-virgule.
bbil est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/08/2011, 11h10   #6
Invité régulier
 
Femme
Inscription : juin 2011
Messages : 23
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Secteur : Enseignement

Informations forums :
Inscription : juin 2011
Messages : 23
Points : 6
Points : 6
Bonjour,

Ca marche parfaitement maintenant !


Mille merci de votre aide !


Pauline
paulinegue 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 21h59.


 
 
 
 
Partenaires

Hébergement Web