IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBScript Discussion :

Mail Merge en VBS


Sujet :

VBScript

  1. #1
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    258
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 258
    Points : 165
    Points
    165
    Par défaut Mail Merge en VBS
    Bonjour a tous,
    je souhaiterai realiser un mail merge a partir d'un script vb, j'ai donc suivit l'exemple de microsoft: http://support.microsoft.com/kb/285332 et modifier pour en faire un script. Seulement ca ne marche pas, il me mets tjrs l'erreur: expected statement lorsque j'ouvre les dataSource. Ci dessous le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    Function IPFaxMerge()
     
      Dim oApp 'As Word.Application
      Dim oMainDoc 'As Word.Document
      Dim oSel 'As Word.Selection
      Dim sDBPath 'as String
     
      'Start Word
      Set oApp = CreateObject("Word.Application")
      Set oMainDoc = oApp.Documents.Add
     
      With oMainDoc.MailMerge
     
            .MainDocumentType = wdFormLetters
     
            'Set up the mail merge data source to Northwind.mdb.
            sDBPath = "C:\Program Files\Microsoft Office\" & _
                      "OfficeXP\Samples\Northwind.mdb"
     
            .OpenDataSource Name:=sDBPath, _
               SQLStatement:="SELECT * FROM [Customers]"
     
            'Add the field codes to the document to create the form letter.
            With .Fields
                Set oSel = oApp.Selection
                .Add oSel.Range, "CompanyName"
                oSel.TypeParagraph
                .Add oSel.Range, "Address"
                oSel.TypeParagraph
                .Add oSel.Range, "City"
                oSel.TypeText ", "
                .Add oSel.Range, "Country"
                oSel.TypeParagraph
                oSel.TypeParagraph
                oSel.TypeText "Dear "
                .Add oSel.Range, "ContactName"
                oSel.TypeText ","
                oSel.TypeParagraph
                oSel.TypeParagraph
                oSel.TypeText " This letter is to inform you..."
                oSel.TypeParagraph
                oSel.TypeParagraph
                oSel.TypeText "Sincerely, [Your Name Here]"
            End With
        End With
     
        'Perform the mail merge to a new document.
        With oMainDoc
            .MailMerge.Destination = wdSendToNewDocument
            .MailMerge.Execute Pause:=False
        End With
     
     
    End Function
     
     
    ' *** MAIN **************************************   
    Call IPFaxMerge()

    merci de votre aide

  2. #2
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    With oMainDoc.MailMerge
     
            .MainDocumentType = wdFormLetters
     
            'Set up the mail merge data source to Northwind.mdb.
            sDBPath = "C:\Program Files\Microsoft Office\" & _
                      "OfficeXP\Samples\Northwind.mdb"
    Cela ne me semble pas possible dans un with.
    Tout doit commencer par '.'

    D'ailleurs expected statment c'est une erreur généré à cause d'une mauvaise synthaxe. D'un oublis comme un then oublié lors d'un if.
    Quel ligne d'ailleur pour l'erreur ?

    De façon générale le with ne sert pas à grand chose et pose plus de problème qu'autre chose.
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  3. #3
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    258
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 258
    Points : 165
    Points
    165
    Par défaut
    Merci de ta reponse,
    je ne pense pas que ca vienne du '.' sachant que dans le code du site d'ou vienne ces sources, c fait comme ca: http://support.microsoft.com/kb/285332 (c'est des sources microsoft quant meme )

    j'ai donc voulu faciliter mon code de la facon suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    Function IPFaxMerge()
     
      Dim wdo ' As Word.Application
      Dim wdoc ' As Word.Document
     
        'Start a new main document for the mail merge.
        Set wdoc = wdo.Documents.Add
     
     
        wdoc.MailMerge.MainDocumentType = wdCatalog
        wdoc.MailMerge.OpenDataSource Name:="C:\Documents and Settings\q731472\Desktop\photos\MSLEisai_14Dec07.xls", _
            ReadOnly:=True, _
           Connection:="MSL"
     
     
    End Function
     
     
    ' *** MAIN **************************************   
    Call IPFaxMerge()
    meme erreur: a la ligne: wdoc.MailMerge.OpenDataSource
    comme tu m'as dit j'ai change et deleter la methode du with mais ca n'a rien changer :'(

    merci de votre aide

  4. #4
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    258
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 258
    Points : 165
    Points
    165
    Par défaut
    PS: je me demande si il ne faut pas installer des driver ODBC ou autre pour que le vbs puisse comuniquer avec une datasource Excel, ca aurait du sens ?

  5. #5
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Citation Envoyé par suckthewindow Voir le message
    PS: je me demande si il ne faut pas installer des driver ODBC ou autre pour que le vbs puisse comuniquer avec une datasource Excel, ca aurait du sens ?
    Je ne pense pas, excel n'est qu'un tableur pas une base de donnée. Pas besoin de driver, juste de l'application.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set oApp = CreateObject("Word.Application")
      Set oMainDoc = oApp.Documents.Add
    Indispensable à ne pas enlever !!!!

    Je ne pense pas que cela soit un paramètre correcte. ni d'ailleurs pour les autres.
    Cela ressemble plus à du VBA.

    Regarde ici et ici et fait plutot comme cela.
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  6. #6
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    258
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 258
    Points : 165
    Points
    165
    Par défaut
    Bonjour et merci de vos reponses,
    J'ai fait comme dit sur ce que tu m'as donne, je n'ai plus la meme erreur (j'ai l'impression que ct du VBA et pas VBScript ... c la premiere fois j'ecris en VB et je suis un peu pommé avec ce que je trouve sur le net: VB, VBA, VBScript ...)
    j'ai donc le code suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    33
    34
    35
    36
    37
    38
     
    Const DontConfirmConversions = False
    Const OpenReadOnly = True
    Const DontLinkToSource = False
    Const DontAddToRecentFiles = False
    Const NoPasswordDocument = ""
    Const NoPassWordTemplate = ""
    Const Revert = True
    Const DontWritePasswordDocument = False
    Const DontWritePassWordTemplate = False
    Const NoConnection = ""
    Const NoSql = ""
    datasource = "C:\Documents and Settings\q731472\Desktop\MSLEisai_14Dec07.xls"
     
    Function IPFaxMerge()
      Dim wdo ' As Word.Application
      Dim wdoc ' As Word.Document
      Set wdo = CreateObject("Word.Application")
      'Start a new main document for the mail merge.
      Set wdoc = wdo.Documents.Add
      Set myMMo = wdoc.MailMerge
      Call myMMo.opendatasource( _
            datasource, _
            wdOpenFormatText, _
            DontConfirmConversions, _
            OpenReadOnly, _
            DontLinkToSource, _
            DontAddToRecentFiles, _
            NoPasswordDocument, _
            NoPassWordTemplate, _
            Revert, _
            DontWritePasswordDocument, _
            DontWritePassWordTemplate, _
            NoConnection, _
            NoSql, NoSql)	
    End Function
    ' *** MAIN **************************************   
    Call IPFaxMerge()
    A l'execution j'ai l'erreur suivante: Type mismatch: 'myMMo.opendatasource'. Est ce que qq voit d'ou ca vient ?

    merci

  7. #7
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Enlève les Call et rééssaye.
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  8. #8
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    258
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 258
    Points : 165
    Points
    165
    Par défaut
    ca change rien :'(

  9. #9
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Bon j'ai trouvé la page d'aide msdn :
    http://msdn2.microsoft.com/en-us/library/bb221718.aspx

    Essaye ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set myMMo = wdoc.MailMerge
    myMMo.opendatasource(datasource)
    Et ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set myMMo = wdoc.MailMerge
    'myMMo.opendatasource(datasource)
    Regarde si tu as toujours l'erreur.
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  10. #10
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    258
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 258
    Points : 165
    Points
    165
    Par défaut
    merci bcp

    ca marche, seulement maintenant je ne sais pas comment faire pour passer la selection: lorsque j'ouvre mes data source (.xls) je veux pouvoir choisir ma sheet, seulement si je mets les parametres ils y a erreur !

    pour la msdn, c pas du VBA ca du coup ? Je l'avais trouve mais j'ai eu l'impression que lorsqu'on mets les noms des parametres comme indiquer ct du VBA et pas du VBScript ?

    merci encore pour ton aide

  11. #11
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 296
    Points : 3 549
    Points
    3 549
    Par défaut
    salut,
    dans ton exemple de code, tu as oublié de définir wdOpenFormatText donc l'erreur "Type mismatch" est normale...
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  12. #12
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    ca marche, seulement maintenant je ne sais pas comment faire pour passer la selection: lorsque j'ouvre mes data source (.xls) je veux pouvoir choisir ma sheet, seulement si je mets les parametres ils y a erreur !
    Ce que j'ai posté ce n'est pas du code définitif, c'est juste pour en déduire si l'erreur venait des paramètres ou non.

    salut,
    dans ton exemple de code, tu as oublié de définir wdOpenFormatText donc l'erreur "Type mismatch" est normale...
    Cela venait donc des paramètres.

    pour la msdn, c pas du VBA ca du coup ? Je l'avais trouve mais j'ai eu l'impression que lorsqu'on mets les noms des parametres comme indiquer ct du VBA et pas du VBScript ?
    Microsoft fournis des exemples avec ses librairies, pour notre cas c'est en VBA, c'est ecrit d'ailleurs.
    Mais quelque soit le langage, la librairie est la même, les objets sont conçus tel qu'il est décrit.
    Lorsqu'il n'y a pas d'exemple dnas le langage utilisé c'est plus difficille c'est tout.
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  13. #13
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    258
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 258
    Points : 165
    Points
    165
    Par défaut
    merci à vous je viens de progresser grandement
    je selectionne bien l'onglet que je souahite en definissant la variable comme suit:
    Const cSql = "SELECT * FROM maTable"

    et maintenant j'ai une fenetre confirm datasource avec comme choix les differentes connections possible ODBC, DDE ... comment l'eviter ?

  14. #14
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Citation Envoyé par suckthewindow Voir le message
    merci à vous je viens de progresser grandement
    je selectionne bien l'onglet que je souahite en definissant la variable comme suit:
    Const cSql = "SELECT * FROM maTable"

    et maintenant j'ai une fenetre confirm datasource avec comme choix les differentes connections possible ODBC, DDE ... comment l'eviter ?
    Peux tu mettre le code concernant ce que tu cites ?

    Il y a peut être une option pour dire ne pas ouvrir la fenetre confirm datasource, regarde sur la page MSDN pour voir les méthodes et propriétés existantent de l'objet concerné par la requête
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  15. #15
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    258
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 258
    Points : 165
    Points
    165
    Par défaut
    voici le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    Const cConfirmConversions = False
    Const cOpenReadOnly = True
    Const cLinkToSource = False
    Const DontAddToRecentFiles = False
    Const cPasswordDocument = ""
    Const cPassWordTemplate = ""
    Const cRevert = True
    Const cWritePasswordDocument = ""
    Const cWritePassWordTemplate = ""
    Const cConnection = "DDE"
    Const cSql = "SELECT * FROM MSL"
    Const cDataSource = "C:\Documents and Settings\q731472\Desktop\MSLEisai_14Dec07.xls"
     
     
    Function IPFaxMerge()
     
      Dim wdo ' As Word.Application
      Dim wdoc ' As Word.Document
     
      Set wdo = CreateObject("Word.Application")
      'Start a new main document for the mail merge.
      Set wdoc = wdo.Documents.Add
     
      Set myMMo = wdoc.MailMerge
      myMMo.opendatasource cDataSource, 4, cConfirmConversions, cOpenReadOnly, cLinkToSource, DontAddToRecentFiles, cPasswordDocument, cPassWordTemplate, cRevert, cWritePasswordDocument, cWritePassWordTemplate, cConnection, cSql, cSql
    End Function
     
    ' *** MAIN **************************************   
    IPFaxMerge()
    Pour ce qui est de l'option, y'a bien une option afin de ne pas confirmer la conversion mais j'ai rien vu sur ca !

  16. #16
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Pour ce qui est de l'option, y'a bien une option afin de ne pas confirmer la conversion mais j'ai rien vu sur ca !
    Je n'ai pas réussi à comprendre cette phrase

    Connection Optional Variant A range within which the query specified by SQLStatement is to be performed. (See Remarks below.)
    SQLStatement Optional Variant Defines query options for retrieving data. (See Remarks below.)
    SQLStatement1 Optional Variant If the query string is longer than 255 characters, SQLStatement specifies the first portion of the string, and SQLStatement1 specifies the second portion. (See Remarks below.)
    OpenExclusive Optional Variant True to open exclusively.
    SubType Optional Variant Can be one of the WdMergeSubType constants.

    Remarks


    To determine the ODBC connection and query strings, set query options manually and use the QueryString property to return the connection string. The following table includes some commonly used SQL keywords.

    Keyword Description
    DSN The name of the ODBC data source
    UID The user logon ID
    PWD The user-specified password
    DBQ The database file name
    FIL The file type

    To instruct Word to use the same connection method as in earlier versions of Word (Dynamic Data Exchange (DDE) for Microsoft Office Access and Microsoft Office Excel data sources) use
    SubType:=wdMergeSubTypeWord2000
    .

    How you specify the range depends on how data is retrieved. For example:

    When retrieving data through Open Database Connectivity (ODBC), you specify a connection string.
    When retrieving data from Excel using dynamic data exchange (DDE), you specify a named range.

    Security Dynamic data exchange (DDE) is an older technology that is not secure. If possible, use a more secure alternative to DDE, such as object linking and embedding (OLE).

    When retrieving data from Access, you specify the word "Table" or "Query" followed by the name of a table or query.
    Tiré du lien que je t'ai passé, donc tu sembles faire les bonne chose sauf sur l'utilisation de SQLStatement et SQLStatement1.
    En gros c'est deux truc c'est une seule requête, donc ne répète pas le même string !!!
    Dans ton cas je ne mettrais pas de SQLStatement1, en fait je metrais ""
    Pourquoi faire compliqué lorsque l'on peut faire encore plus compliqué.

  17. #17
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    258
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 258
    Points : 165
    Points
    165
    Par défaut
    merci bcp j'ai tout qui marche !!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Envoi mail script en vbs
    Par nathalie.de dans le forum VBScript
    Réponses: 6
    Dernier message: 19/09/2014, 13h55
  2. Réponses: 2
    Dernier message: 12/05/2014, 13h20
  3. [AC-2010] Mail merge conditionnel
    Par Juuul dans le forum VBA Access
    Réponses: 1
    Dernier message: 03/12/2012, 17h22
  4. Limite de 20 caractères pour le mail merge dans word
    Par Hélène Penders dans le forum Word
    Réponses: 2
    Dernier message: 08/08/2008, 12h41
  5. création/suppression de compte mail exchange en vbs
    Par yubirin dans le forum Exchange Server
    Réponses: 2
    Dernier message: 23/10/2007, 02h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo