Probleme de publipostage(Resolu) - VB/VBA/VBS - Programmation
Marsh Posté le 10-01-2006 à 10:38:34
Je pense que c'est la construction de ta requête. Elle doit être comme cela :
Code :
|
Sinon, VBA ne met pas la valeur de mois dans la requête. A voir si cela marche...
Marsh Posté le 10-01-2006 à 10:54:18
oufff
ton truc a l'air de presq eu marcher car la valeur de mois est bien visible dans la requete en mode debug. Par contre j'ai laissé apres le dernier guillement de la requete le: _ &""
Voila donc ma requete avec choix:
ActiveDocument.MailMerge.DataSource.QueryString = _
"SELECT * FROM E:\comptabilité matiière\liste_MASTER.xls _ WHERE ((Type = 'A')) AND (Mois = " & mois & " ))" _
& ""
Je pense que tu tiens le bon bout ya quremant une petite chose à changer.
merci a tout de suite!!
Marsh Posté le 10-01-2006 à 10:57:20
Le _&"" ne sert à rien... Il devait y avoir plutôt _&";"
Je pense que c'est le ; qui manque... A essayer
Sinon, quelle est l'erreur donné par VBA ?
Marsh Posté le 10-01-2006 à 11:01:54
l'erreur est la suivante:
erreur '5638'
Impossible d'analyser la syntaxe des options de requete dans un chaine SQL valide.
c'est tj la meme erreur .
merci pr ton aide
Marsh Posté le 10-01-2006 à 11:09:10
la variable mois je l'ai defini en string, je me demande si c'est correct pr ce genre de requet SQL???
Marsh Posté le 10-01-2006 à 11:12:32
Que stocke la variable mois ? un mot ou un nombre ?
Marsh Posté le 10-01-2006 à 11:16:24
Peux-tu remettre le code de ta fonction car j'ai cru voir un "_" juste avant le WHERE... et après le nom du fichier...
Marsh Posté le 10-01-2006 à 11:23:39
elle stocke un mot, defini en string; elle stocke le mois ou je fais appelle a la macro:
exemple si ty es en fevrier elle stocke 02 ; puis je vais faire l'analogie avec un tableau dans une boucle comme suit:
ce qui dans la base de donnée me laisse libre d'ecrire les mois par leur nom et non par 01 ou 06 ...
voila le code:
MyMonth_num = Array("01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12" )
MyMonth_letter = Array("Janvier", "Fevrier", "Mars", "Avril", "mai", "Juin", "juillet", "Aout", "Septembre", "Octobre", "Novenbre", "Decembre" )
Const separateur As String = "/"
Dim mois As String
Dim st As String
Dim i As Integer
Dim MyDate
MyDate = Date
i = 0
iret2 = Split(MyDate, separateur, -1, vbTextCompare)
mois = iret2(1)
Do
i = i + 1
Loop Until (MyMonth_num(i - 1) = mois)
st = MyMonth_letter(i - 1)
et j'insere st dans la requete comme tu m'as dis de faire la st ce une string!
tj la meme erreur j'espere que c'est possible..
merci
Marsh Posté le 10-01-2006 à 11:24:45
et apres le st= Month_letter..
ActiveDocument.MailMerge.DataSource.QueryString = _
"SELECT * FROM E:\comptabilité matiière\liste_MASTER.xls WHERE ((Type = 'A')) AND (Mois = " & st & " ))" _
& ""
With ActiveDocument.MailMerge
.Destination = wdSendToNewDocument
.MailAsAttachment = False
.MailAddressFieldName = ""
.MailSubject = ""
.SuppressBlankLines = True
With .DataSource
.FirstRecord = wdDefaultFirstRecord
.LastRecord = wdDefaultLastRecord
End With
.Execute Pause:=True
End With
End Sub
Marsh Posté le 10-01-2006 à 11:26:05
le _ est bien compris dans le nom de mon dossier.
si j'enleve l'histoire du mois ca marche..
Marsh Posté le 10-01-2006 à 11:38:12
Et en mettant :
Code :
|
Marsh Posté le 10-01-2006 à 12:25:00
toujours la meme erreur, VB est cruel avec nous la!!!
le pire c'est que qd je veux de l'aide sur l'erreur il me sort l'aide toute grisée....
Marsh Posté le 10-01-2006 à 12:42:22
deja grosse news manu si je fais un publipostage manuellemtn il gere que les nombre car j'ai essaye en mettant decembre par expl dans la colonne et il comprend pas. donc on va pas se casser la tete avec l'histoire des tableaux : le code devient donc:
Const separateur As String = "/"
Dim mois As Integer
Dim i As Integer
Dim MyDate
MyDate = Date
i = 0
iret2 = Split(MyDate, separateur, -1, vbTextCompare)
mois = iret2(1) 'je sais pas si ca sera pris en compte car iret2(1) est un string, comment le convertir en entier avec le 0
ActiveDocument.MailMerge.DataSource.QueryString = _
"SELECT * FROM E:\comptabilité matiière\liste_MASTER.xls WHERE ((Type = 'A')) AND (Mois = " & mois & " ))" _
& ""
With ActiveDocument.MailMerge
.Destination = wdSendToNewDocument
.MailAsAttachment = False
.MailAddressFieldName = ""
.MailSubject = ""
.SuppressBlankLines = True
With .DataSource
.FirstRecord = wdDefaultFirstRecord
.LastRecord = wdDefaultLastRecord
End With
.Execute Pause:=True
End With
End Sub
Marsh Posté le 10-01-2006 à 12:49:39
Tu n'as pas modifié la requête... j'ai mis des '
Il faut mettre '" & mois & "' au lieu de " & mois & "
Je pense que cela devrait marcher après...
Marsh Posté le 10-01-2006 à 13:48:38
On va essayer un truc... Ne définis pas la variable mois et demande quel type de variable c'est avec le code :
VarType(mois)
msgbox(mois)
juste après avoir mis la valeur dans mois...
Marsh Posté le 10-01-2006 à 14:08:40
ca fait rien vartype
mois=iret2(1) 'iret2(1) est l'element premier du tableau compose de schaine de caratere de la date : pr le 01/01/2006 c'est 01
VarType(mois) 'vartype ne marque rien
MsgBox(mois) ' affiche 01
Marsh Posté le 10-01-2006 à 14:12:17
ce plutot
iret= VarType(mois)
MsgBox(iret)
ce qui donne une chaine mais ce normal puisque SPLIT renvoie des chaines.la requete SQL n'accepte donc pas les chaine...
j'ai l'impression que la requete ne reagrde pas dans la variable qu'elle regarde juste je sais pas comment on peut dire ca son "enveloppe"!
en fait le mois cache une chaine("01" ou "02"...), la requete ne voit que mois
Marsh Posté le 10-01-2006 à 15:13:30
put.. j'ai trouve!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
truc de ouf
voila le code, on a bien bossé!! merci
Private Sub e_c_a()
'
' e_c_a Macro
' Macro enregistrée le 06/01/2006 par DENISE Louis
'
MyMonth_num = Array("1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12" )
MyMonth_letter = Array("Janvier", "Fevrier", "Mars", "Avril", "mai", "Juin", "juillet", "Aout", "Septembre", "Octobre", "Novenbre", "Decembre" )
Const separateur As String = "/"
Const appos As String = "'"
Dim i As Integer
Dim MyDate
MyDate = Date
i = 0
iret2 = Split(MyDate, separateur, -1, vbTextCompare)
mois = CInt(iret2(1))
Do
i = i + 1
Loop Until (CInt(MyMonth_num(i - 1)) = mois)
st = CByte(MyMonth_num(i - 1))
X = "(Mois = " & appos & st & appos & " )"
ActiveDocument.MailMerge.DataSource.QueryString = _
"SELECT * FROM E:\comptabilité matiière\liste_MASTER.xls WHERE ((Type = 'A') AND " & X & " )" _
& ""
With ActiveDocument.MailMerge
.Destination = wdSendToNewDocument
.MailAsAttachment = False
.MailAddressFieldName = ""
.MailSubject = ""
.SuppressBlankLines = True
With .DataSource
.FirstRecord = wdDefaultFirstRecord
.LastRecord = wdDefaultLastRecord
End With
.Execute Pause:=True
End With
End Sub
merci Manu @++
Marsh Posté le 10-01-2006 à 16:29:10
Il manquait bien les cotes, c'est ca... Mais il ne les prenait pas en les notant '...
Bravo à toi... Comme tu dis, truc de ouf...
Marque dans ton titre que le sujet est résolu...
@++
Marsh Posté le 10-01-2006 à 16:34:24
Tu édites ton premier post et tu mets dans le titre [Résolu]...
Marsh Posté le 10-01-2006 à 08:25:01
Bonjour,
Jsuis en galere sous word.
En gros j'essaie de faire un publipostage d'une base sous excel via word.
cette base contient une colonne de donnée nommée Mois.
J'ai enregistré la macro de publipostage et y ai rajouté du code qui va extraire de cette base que les données correspondant au mois actuel.J'ai un erreur du type:
Impossible d'analyser la syntaxe des options de requete dans un chaine SQL;
Voila la macro suivante je suis conscient que c'est dans la ligne de requete sur le terme st que va le probleme mais je sais vraiment pas comment le regler.
Voila je vous laisse le code et merci les gars!
Sub e_c_a()
'
' e_c_a Macro
' Macro enregistrée le 06/01/2006 par DENISE Louis
'
Const separateur As String = "/"
Dim mois As String
Dim st As String
Dim i As Integer
Dim MyDate
MyDate = Date
i = 0
iret2 = Split(MyDate, separateur, -1, vbTextCompare)
mois = CStr(iret2(1)) 'donne le mois actuel
'MsgBox (mois)
ActiveDocument.MailMerge.DataSource.QueryString = _
"SELECT * FROM E:\comptabilité matiière\liste_MASTER.xls WHERE ((Type = 'A')) AND (Mois = mois))" _
& ""
With ActiveDocument.MailMerge
.Destination = wdSendToNewDocument
.MailAsAttachment = False
.MailAddressFieldName = ""
.MailSubject = ""
.SuppressBlankLines = True
With .DataSource
.FirstRecord = wdDefaultFirstRecord
.LastRecord = wdDefaultLastRecord
End With
.Execute Pause:=True
End With
End Sub
Merci les gars!
Message édité par lden le 10-01-2006 à 16:36:44