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

IHM Discussion :

[A-03] Mauvais usage Me! dans Module MergeIt


Sujet :

IHM

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 48
    Points : 15
    Points
    15
    Par défaut [A-03] Mauvais usage Me! dans Module MergeIt
    Bonjour,

    Je souhaite effectuer un publipostage vers Word depuis mon formulaire Access. J'ai donc inséré un bouton sur le formulaire qui lance la procédure MergeIt

    Voici la procédure MergeIt que j'ai insérée dans mon module Publipostage

    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
    Public Sub MergeIt()
    Dim objWord As Object
    Set objWord = GetObject("C:\Documents and Settings\Administrator\My Documents\DocAccess\Reservationvisitereguliere.doc")
    ' Rend Word visible important puisque la fusion se fait à l'écran.
    objWord.Application.Visible = True
    ' Sélectionne .la base de données Comptoir comme source de données pour la fusion
    objWord.MailMerge.OpenDataSource _
            Name:="C:\Documents and Settings\Administrator\My Documents\Avantgarde.mdb", _
            LinkToSource:=True, _
            Connection:="TABLE Factures", _
            SQLStatement:="SELECT * FROM Factures WHERE IDfacture = " & Me![IDfactureproduit]
    ' Exécution de la fusion.
    objWord.MailMerge.Execute
    Set objWord = Nothing
    End Sub
    Lorsque je clique sur le bouton, l'erreur Invalid Use of the field Me apparait.
    Je précise que j'ai déjà modifié
    Dim objWord As Word.Document
    en
    Dim objWord As Object
    car la première solution ne fonctionnait pas.

    Quelqu'un peut-il m'aider à faire fonctionner ce code ?
    Merci par avance à tous ceux qui essayeront

  2. #2
    Expert éminent sénior
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Points : 16 044
    Points
    16 044
    Par défaut
    Bonjour,

    Dans ce contexte, "Me" fait référence à ton formulaire. Tu ne peux donc l'utiliser que dans le module du formulaire lui-même.

    Donc, deux solutions. Déplacer ta fonction dans le module du formulaire, ou déclarer explicitement celui-ci si tu laisses ta fonction dans un module standard.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Forms!NomDeTonFormulaire![NomduControle]
    Domi2

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 48
    Points : 15
    Points
    15
    Par défaut
    Merci beaucoup

    Ca a l'air de commencer à fonctionner puisque j'ai une fenêtre qui me prévient que l'ouverture du document va exécuter une requête SQL mais lorsque je valide en cliquant sur Oui, un message d'erreur apparaît indiquant que l'utilisateur 'Admin', en l'occurence moi, a placé la table dans une situation où elle ne pouvait pas être ouverte... Ensuite si j'ouvre le document malgré cela, la fusion n'a pas lieu.
    A quoi est-ce dû ? Peux-tu m'aider encore ?

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 48
    Points : 15
    Points
    15
    Par défaut
    Après redémarrage d'Access, lorsque j'effectue un clic sur le bouton, Acces ouvre le débugger de Visual Basic et surligne en jaune tout ce que je mets ici en rouge...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Public Sub MergeIt()
    Dim objWord As Object
    Set objWord = GetObject("C:\Documents and Settings\Administrator\My Documents\DocAccess\Reservationvisitereguliere.doc")
    objWord.Application.Visible = True
    objWord.MailMerge.OpenDataSource _
            Name:="C:\Documents and Settings\Administrator\My Documents\Avantgarde.mdb", _
            LinkToSource:=True, _
            Connection:="TABLE Factures", _
            SQLStatement:="SELECT * FROM Factures WHERE IDfacture = " & Forms![RqTotalprest subform]![IDfactureproduit]
    
    objWord.MailMerge.Execute
    Set objWord = Nothing
    End Sub
    Je ne comprends pas pourquoi car il me semble que la requête est correcte...
    Mais apparemment je me trompe !
    Quelqu'un sait-il pourquoi cela ne fonctionne pas ? Que dois-je modifier?

  5. #5
    Expert éminent sénior
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Points : 16 044
    Points
    16 044
    Par défaut
    Re,

    Et avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim objWord As Word.Document
    Cela donne quoi ?

    Domi2

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 48
    Points : 15
    Points
    15
    Par défaut
    Alors là ça donne le message d'erreur suivant :

    Compile error :
    User-defined type not define

    C'est pour cela que j'avais changé comme précédemment mais c'est peut-être de là que vient l'erreur en fait...

  7. #7
    Expert éminent sénior
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Points : 16 044
    Points
    16 044
    Par défaut
    Re,

    Tu as ajouté la référence Microsoft Word XX.X Object Library (la 11.0 pour toi) ?

    Domi2

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 48
    Points : 15
    Points
    15
    Par défaut
    C'est sans doute une question bête mais comment je sais si cela a été fait et comment le faire si ce n'est pas le cas ?

    Tu as ajouté la référence Microsoft Word XX.X Object Library (la 11.0 pour toi) ?

  9. #9
    Expert éminent sénior
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Points : 16 044
    Points
    16 044
    Par défaut
    C'est sans doute une question bête
    Certainement pas...

    Aller dans l'éditeur VBA, puis menu Outils ==> Références...

    Celles utilisées par le projet sont cochées et en tête de liste.

    Si la référence à Word n'est pas cochée, parcourir la liste (elles sont dans l'ordre alphabétique), la cocher une fois repérée et clic sur ok.

    Puis essaie de compiler ton projet pour voir si l'erreur a disparu...

    Domi2

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 48
    Points : 15
    Points
    15
    Par défaut
    Effectivement ce n'était pas coché et désormais Word.Document est bien reconnu mais l'erreur ne disparaît pas, ou plutot se modifie, puisque Access me dit désormais qu'il ne trouve pas le formulaire RqTotalprestsubform (j'ai essayé avec et sans crochet) auquel le code fait référence...
    Pourtant ce formulaire existe bien... c'est le sous-formulaire dans lequel le bouton de commande est placé.

  11. #11
    Expert éminent sénior
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Points : 16 044
    Points
    16 044
    Par défaut
    Re,

    Si c'est un sous-formulaire, ta syntaxe ici n'est pas correcte.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ...WHERE IDfacture = " & Forms![RqTotalprest subform]![IDfactureproduit]
    Prend connaissance de ce tuto, il est indispensable (et je sais de quoi je parle... ).

    Domi2

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 48
    Points : 15
    Points
    15
    Par défaut
    Merci pour le tuto (si seulement je l'avais trouvé avant, j'aurais perdu moins de temps sur d'autres codes lol)
    J'ai désormais 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
    Public Sub MergeIt()
    Dim objWord As Word.Document
    Set objWord = GetObject("C:\Documents and Settings\Administrator\My Documents\DocAccess\Reservationvisitereguliere.doc")
    objWord.Application.Visible = True
    objWord.MailMerge.OpenDataSource _
            Name:="C:\Documents and Settings\Administrator\My Documents\Avantgarde.mdb", _
            LinkToSource:=True, _
            Connection:="Factures", _
            SQLStatement:="SELECT * FROM Factures WHERE IDfacture = " & Forms.Clients.Factures.RqTotalprestsubform.[IDfactureproduit]
    objWord.MailMerge.Execute
    Set objWord = Nothing
    End Sub
    Mais ça ne fonctionne toujours pas à la perfection.
    Je m'explique :
    d'une part, la fusion prend en compte tous les résultats et non pas seulement celui affiché dans le sous-formulaire...
    d'autre part, après ouverture du fichier Word, une erreur apparaît dans Access :

    Run-time error '438'
    Object doesn't support this property or method

  13. #13
    Expert éminent sénior
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Points : 16 044
    Points
    16 044
    Par défaut
    Bonjour,

    Pour l'erreur 438, je ne sais pas trop... Ca "plante" sur quelle ligne ?

    Et ta syntaxe n'est toujours pas correcte...

    Regarde bien le tuto...

    Forms.nom_form.nom_sousform1.Form.nom_controle
    Domi2

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 48
    Points : 15
    Points
    15
    Par défaut
    Désolée de répondre si tard, je ne suis pas repassée à mon bureau hier, et là je ne suis que de passage quelques instants. Par contre, je serai là demain, fidèle au poste lol

    J'ai modifié ma syntaxe de cette manière
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Forms.Clients.Factures.RqTotalprestsubform.Form.[IDfactureproduit]
    Mais il fusionne toujours tous les résultats du champ. Et l'erreur après ouverture de Word est toujours la même, je te mets en rouge ce qui est surligné en jaune

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Public Sub MergeIt()
    Dim objWord As Word.Document
    Set objWord = GetObject("C:\Documents and Settings\Administrator\My Documents\DocAccess\Reservationvisitereguliere.doc")
    objWord.Application.Visible = True
    objWord.MailMerge.OpenDataSource _
            Name:="C:\Documents and Settings\Administrator\My Documents\Avantgarde.mdb", _
            LinkToSource:=True, _
            Connection:="Factures", _
            SQLStatement:="SELECT * FROM Factures WHERE IDfacture = " & Forms.Clients.Factures.RqTotalprestsubform.Form.[IDfactureproduit]
    objWord.MailMerge.Execute
    Set objWord = Nothing
    End Sub
    La petite flèche jaune du debugger est devant la ligne "SQL Statement"...

    Emye3

  15. #15
    Expert éminent sénior
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Points : 16 044
    Points
    16 044
    Par défaut
    Bonsoir,

    Ben ta syntaxe n'est toujours pas correcte... T as ajouté le .form, ça, c'est bon...

    Mais avant ?

    Peux-tu préciser ta structure exacte ?

    Domi 2

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 48
    Points : 15
    Points
    15
    Par défaut
    La structure du formulaire est la suivante :

    Formulaire principal :Commandes (je l'ai renommé ce week-end après avoir refait le formulaire Clients précédent de façon plus lisible)
    Sous-formulaire 1: Factures
    Sous-formulaire 2 (dans le sous-formulaire 1) : RqTotalprestsubform

    Ma syntaxe actuelle est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Forms.Commandes.Factures.RqTotalprestsubform.Form.[IDfactureproduit]
    Je ne comprends pas quelle est l'erreur sur la syntaxe...

  17. #17
    Expert éminent sénior
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Points : 16 044
    Points
    16 044
    Par défaut
    Bonjour,

    D'abord, "Factures" et "RqTotalprestsubform" font référence à la propriété "Nom" du sous-formulaire et non au nom de l'objet "formulaires" que tu vois dans la fenêtre de base de données. Ce point doit être soigneusement vérifié.

    Ensuite, essaie avec :

    Forms.Commandes.Factures.Form.RqTotalprestsubform.Form.[IDfactureproduit]

    Domi2

  18. #18
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 48
    Points : 15
    Points
    15
    Par défaut
    Pour Factures et RqTotalprestsubform, les noms sont identiques partout. En revanche, pour Commandes, dans le menu de la base de données, le formulaire s'appelle Commandes mais dans la fenêtre Propriétés en mode création, le "caption" est Clients. Lequel dois-je utiliser ?

  19. #19
    Expert éminent sénior
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Points : 16 044
    Points
    16 044
    Par défaut
    Re,

    Tu dois utiliser "Commandes".

    Domi2

  20. #20
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 48
    Points : 15
    Points
    15
    Par défaut
    Re,

    Alors, j'ai maintenant le code suivant qui, si j'ai bien compris, devrait être exact :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Public Sub MergeIt()
    Dim objWord As Word.Document
    Set objWord = GetObject("C:\Documents and Settings\Administrator\My Documents\DocAccess\Reservationvisitereguliere.doc")
    objWord.Application.Visible = True
    objWord.MailMerge.OpenDataSource _
            Name:="C:\Documents and Settings\Administrator\My Documents\Avantgarde.mdb", _
            LinkToSource:=True, _
            Connection:="Factures", _
            SQLStatement:="SELECT * FROM Factures WHERE IDfacture = " & Forms.Commandes.Factures.Form.RqTotalprestsubform.Form.[IDfactureproduit]
    objWord.MailMerge.Execute
    Set objWord = Nothing
    End Sub

    Mais, lorsque je clique sur mon bouton, j'ai une fenêtre me signalant que l'ouverture du fichier Word va entraîner l'exécution de la requête SQL, je clique sur Oui, et ensuite j'ai un message d'erreur dans Word : "This operation cannot be completed because of dialogue or database engine failures. Please try again later". Je valide par Ok pour fermer la fenêtre et Word plante.
    De retour sur Access, j'ai un autre message d'erreur : Run-time error '-2147417851 (80010105)' : Automation error The server threw an exception



    N'y a-t-il pas une autre méthode, plus simple, pour faire fonctionner un publipostage ? J'ai l'impression que je ne vais jamais parvenir à mes fins avec celle-là!

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [Joomla!] recup variables dans module php
    Par herveD dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 7
    Dernier message: 02/03/2007, 14h06
  2. placer un code dans module
    Par nicolovitch dans le forum Access
    Réponses: 2
    Dernier message: 22/09/2006, 10h56
  3. [C#] Mauvais item récupéré dans un DataGridView
    Par sorcer1 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 25/08/2006, 10h35
  4. Réponses: 16
    Dernier message: 01/06/2006, 21h37
  5. erreur Eaccess violation dans module ntdll.dll
    Par cilies38 dans le forum Langage
    Réponses: 1
    Dernier message: 05/05/2006, 20h12

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