Probleme de publipostage(Resolu)

Probleme de publipostage(Resolu) - VB/VBA/VBS - Programmation

Marsh Posté le 10-01-2006 à 08:25:01    

Bonjour,
 
Jsuis en galere sous word. :cry:  
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
Reply

Marsh Posté le 10-01-2006 à 08:25:01   

Reply

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 :
  1. "SELECT * FROM E:\comptabilité matiière\liste_MASTER.xls WHERE ((Type = 'A')) AND (Mois = " & mois & " ))"


 
Sinon, VBA ne met pas la valeur de mois dans la requête. A voir si cela marche...


Message édité par Manu la Science le 10-01-2006 à 10:39:12

---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
Reply

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!!
 
 

Reply

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 ?


Message édité par Manu la Science le 10-01-2006 à 10:57:52

---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
Reply

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

Reply

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???

Reply

Marsh Posté le 10-01-2006 à 11:12:32    

Que stocke la variable mois ? un mot ou un nombre ?


---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
Reply

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...


---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
Reply

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

Reply

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

Reply

Marsh Posté le 10-01-2006 à 11:24:45   

Reply

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..

Reply

Marsh Posté le 10-01-2006 à 11:38:12    

Et en mettant :

Code :
  1. "SELECT * FROM E:\comptabilité matiière\liste_MASTER.xls WHERE ((Type = 'A')) AND (Mois = '" & st & "'))" _
  2.         & ""


---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
Reply

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....
 

Reply

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


Message édité par lden le 10-01-2006 à 12:45:26
Reply

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...


---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
Reply

Marsh Posté le 10-01-2006 à 12:55:20    

si si j'ai deja fait mais ca a marque la meme erreur...

Reply

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...
 


---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
Reply

Marsh Posté le 10-01-2006 à 14:03:41    

ok


Message édité par lden le 10-01-2006 à 14:05:02
Reply

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

Reply

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


Message édité par lden le 10-01-2006 à 14:16:35
Reply

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 @++
 
 

Reply

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...
 
@++


---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
Reply

Marsh Posté le 10-01-2006 à 16:32:24    

comment je fais

Reply

Marsh Posté le 10-01-2006 à 16:34:24    

Tu édites ton premier post et tu mets dans le titre [Résolu]...


---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed