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

Access Discussion :

Communication ACCESS WORD


Sujet :

Access

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 38
    Points : 31
    Points
    31
    Par défaut Communication ACCESS WORD
    Bonjour
    J'ai construit une application ACCESS qui lance des éditions par l'intermédiaire dun mailing Word
    De cette façon, les utilisateurs peuvent modifier les éditions. Mais je souhaiterais faire en sorte que seuls quelques utilisateurs puissent avoir acces à cette modification. Donc je dois faire passer d'Access à Word le contenu d'une variable qui me permettra de gérer cette autorisation dans du code VBA.

    Donc ma question : comment faire passer le contenu d'une variable d'une application à l'autre ?

    Merci

    Jean

  2. #2
    Membre chevronné
    Inscrit en
    Août 2006
    Messages
    1 588
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1 588
    Points : 2 178
    Points
    2 178
    Par défaut
    J'utilise une méthode simple pour passer des données qui consiste à écrire dans un fichier qui devra être lu par Word lors de l'événement Open du Document.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 38
    Points : 31
    Points
    31
    Par défaut Pässage d'infos D'Access à Word
    Je reprécise mon besoin.

    Je veux faire un mailing automatique à partir d'Access, en fait un mailing sur un seul enregistrement. Mais je veux que dans le cas où le mailing serait envoyé par un certain utilisateur, (l'administrateur en l'occurence) le programme propose à l'utilisateur de prendre la main, et que dans les autres cas, Word et donc le mailing s'execute sans possibilité d'intervention de l'opérateur.

    Pour celà, il faut que j'envoie à Word une info sur l'utilisateur, info que je traiterais à l'ouverture du document Word.
    Je ne sais pas faire en utilisant une variable. Je me suis dit que je pouvais stocker cette info dans les données du mailing, mais je ne sais pas les récupérer et les traiter en VB.

    Donc, je suis coincé. L'ecriture dans un fichier peut effectivement être une solution, mais y a-t-il qq chose de plus pertinant ?

    Merci

    Jean

  4. #4
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 086
    Points : 42 925
    Points
    42 925
    Par défaut
    Salut,

    Expliques nous comment tu fais pour le publipostage, si c'est un simple appel de document sans code VBA spécifique, le passage d'une variable en paramètre est pas possible.

    Par contre, si tu utilises un mécanisme d'automation, tu peux passer un paramètre.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 38
    Points : 31
    Points
    31
    Par défaut
    Bonjour


    Mon code (encore à l'état de brouillon) :
    pour la partie dans Access
    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
    Private Sub VersWord_Click()
    'Voici pour la déclaration du code:
    Dim wdapp As Word.Application
     
    'Démarrer Word
    Set wdapp = CreateObject("Word.application")
    chemin = "C:\Documents and Settings\Jean\Bureau\Etat Civil\imprimés\"
    Fichier = "CopieActeNaissance.doc"
    With wdapp
            .Visible = True
            .Documents.Open chemin & Fichier
    End With
     
    'fermer et libérer les objets
    Set wdapp = Nothing
     
    End Sub
    Ce code ouvre donc un Mailing Word, qui fait référence à une table temporaire.

    A l'ouverture de Word, le code suivant s'exécute :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Document_Open()
     
        If MsgBox("prendre la main ?", vbOKCancel) = vbOK Then GoTo rien
     
        On Error GoTo fin
        ActiveDocument.MailMerge.Destination = wdSendToPrinter
        ActiveDocument.MailMerge.Execute
     
    fin:
        Application.Quit True
    rien:
    End Sub
    Mon pb est : comment faire en sorte que la ligne If MsgBox(....., ne soit proposée qu'à certains utilisateurs, par exemple en exploitant une valeur stockée dans ma table temporaire.

    Merci

  6. #6
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 086
    Points : 42 925
    Points
    42 925
    Par défaut
    Salut,

    Une idée en passant :

    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
     
    Private Sub VersWord_Click()
    'Voici pour la déclaration du code:
    Dim wdapp As Word.Application
    Dim oDoc As Word.Document
     
    'Démarrer Word
    Set wdapp = New Word.application
    chemin = "C:\Documents and Settings\Jean\Bureau\Etat Civil\imprimés\"
    Fichier = "CopieActeNaissance.doc"
    With wdapp
            .Visible = True
            Set oDoc = .Documents.Open chemin & Fichier
    End With
    If MsgBox("prendre la main ?", vbOKCancel) = vbOK Then Exit Sub
     
    With oDoc
       .MailMerge.Destination = wdSendToPrinter
       .MailMerge.Execute
    End With
    wdapp.Quit
     
    'fermer et libérer les objets
    Set wdapp = Nothing
     
    End Sub

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 38
    Points : 31
    Points
    31
    Par défaut
    Re bonjour

    Non, c'est pas bon.

    la sub ACCESS doit lancer Word, dans tous les cas.
    A l'arrivée dans word, une fonction doit lire qui est à l'origine de l'appel.

    • Si c'est l'admin, le mailing ne s'execute pas, et l'utilisateur peut, si il le désire, prendre la main pour modifier le fichier word,
    • Si c'est qq d'autre, le mailing s'execute, sans que l'utilisateur puisse prendre la main.


    De cette façon, le fichier Word est protégé contre les modifs et inutilisable en dehors d'un appel provenant d'Access. Celà permet à l'administrateur de la base de donnée et à lui seul, de modifier les éditions.

    Mon code aurait pu ressembler à ceci, sauf que la variable Admin ne passe pas de Access à Word


    Le code que j'aurais aimé mettre dans ACCESS est
    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
    Private Sub VersWord_Click()
    'Voici pour la déclaration du code:
    Dim wdapp As Word.Application
     
    '
    Admin = true
    Démarrer Word
    Set wdapp = CreateObject("Word.application")
    chemin = "C:\Documents and Settings\Jean\Bureau\Etat Civil\imprimés\"
    Fichier = "CopieActeNaissance.doc"
    With wdapp
            .Visible = True
            .Documents.Open chemin & Fichier
    End With
     
    'fermer et libérer les objets
    Set wdapp = Nothing
     
    End Sub
    j'ai rajouté Admin = true

    et dans Word

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Document_Open()
     
        If Admin and MsgBox("prendre la main ?", vbOKCancel) = vbOK Then GoTo rien
     
        On Error GoTo fin
        ActiveDocument.MailMerge.Destination = wdSendToPrinter
        ActiveDocument.MailMerge.Execute
     
    fin:
        Application.Quit True
    rien:
    End Sub
    j'ai rajouté If Admin and MsgBox("prendre


    Mais Word ne reçoit pas la valeur Admin

  8. #8
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 086
    Points : 42 925
    Points
    42 925
    Par défaut
    Salut,

    Peux tu me dire pourquoi quand tu exécutes un code dans Word, il est meilleur que le même dans Access ?

    As-tu essayé ce que j'ai donné ! Il fait exactement la même chose, mais sans exploiter un évènement du document, puisque le document est ouvert par une autre procédure.

    Mais c'est ton choix.

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 38
    Points : 31
    Points
    31
    Par défaut
    Bonjour

    J'aurais préféré ne mettre que du code dans Access, que je maitrise un tout petit peu.
    Je souhaitais mettre le code dans Word pour empecher l'ouverture et la modification du fichier Word en dehors de l'accès par ACCESS.
    Dans la solution que tu me proposes, il n'y a rien dans le fichier Word, et n'importe qui peut donc l'utiliser ou le modifier, ce qui est contraire à mes spécifications.

    Par ailleurs, j'ai bien essayé ton code, mais il y a un truc qui ne marche pas dans la syntaxe :

    With wdapp
    .Visible = True
    Set oDoc = .Documents.Open chemin & Fichier
    End With

    Je n'ai pas réussi à le modifier.

    J'imagine que cette partie de code sert à piloter le fichier Word depuis ACCESS. Si je n'arrive pas à résoudre mon pb de protection autrement, je me dirigerai dans cette voie
    Merci pour ton aide.

  10. #10
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 086
    Points : 42 925
    Points
    42 925
    Par défaut
    Salut,

    Petite erreur de ma part.

    Il faut des ()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set oDoc = .Documents.Open (chemin & Fichier)
    C'est vraie que je ne verrouille pas le document si tu l'ouvre en Word.

    Maintenant, rien ne t'empêches de mettre une protection sur le document pour par exemple du Read Only et de libérer le document lors d'un publipostage pour le verrouiller à nouveau par la suite.

    La syntaxe d'ouverture d'un document protégé est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Documents.Open FileName:="", PasswordDocument:=""
    Ce qui dans ton cas donnerais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Documents.Open ( FileName:=chemin & fichier , PasswordDocument:="LeMotDePasse"
    La solution que tu as envisagée de mettre une protection VBA sur le document est vaine.

    Augmente la sécurité de Word et les macros ne seront pas exécutées et si tu maintiens la touche Shift enfoncée lors de l'ouverture, tu inhibes l'exécution des macro.

    À toi de voir.

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 38
    Points : 31
    Points
    31
    Par défaut
    Merci, ça fonctionne parfaitement. Mais je n'ai pas géré les mots de passe pour l'instant.

    Le code final, pour info :
    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
     
    Private Sub VersWord_Click()
     
        ' l'utilisateur veut-il prendre la main pour modifier ?
        Dim okModif As Boolean  '
        okModif = False
        If TypeUtilisateur = "0" Then
                If MsgBox("Voulez-vous modifier le fichier Word ?", vbYesNo) = vbOK Then
                    okModif = True
                End If
        End If
     
        ' déclarer les docs
        Dim wdapp As Word.Application
        Dim oDoc As Word.Document
     
     
        On Error GoTo fin  ' utile si l'utilisateur clique sur annuler dans la boirte de dialogue impression
        'Démarrer Word
            Set wdapp = New Word.Application
            chemin = "C:\Documents and Settings\Jean\Bureau\Etat Civil\imprimés\"
            Fichier = "CopieActeNaissance.doc"
            With wdapp
                    .Visible = True
            End With
     
            If okModif Then
            ' l'utilisateur à le droit de prendre la main
                    Set oDoc = wdapp.Documents.Open(chemin & Fichier)
            Else
            ' l'utilisateur n'a pas le droit de prendre la main
                    Set oDoc = wdapp.Documents.Open(chemin & Fichier)
                    With oDoc
                       .MailMerge.Destination = wdSendToPrinter
                       .MailMerge.Execute
                    End With
            End If
     
    fin:
        'fermer sans sauvegarder et libérer les objets
        wdapp.Quit False
        Set wdapp = Nothing
     
     
    End Sub
    Une dernière question :

    Chaque impression doit être normalement facturée à son bénéficiaire. Ainsi, si l'utilisateur imprime 3 exemplaires, le bénéficiaire devra payer 3 fois (3 fois pas grand chose mais quand même).

    Pour gérer çà, je vois 3 pistes :
    • récupérer dans ACCESS le nombre d'exemplaires que l'utilisateur a spécifié dans la boite de dialogue impression
    • Interdire la modif du nombre d'impressions
    • ne pas faire le mailing, mais lancer l'impression sans passer par la boite d'impression


    Mais je ne sais faire aucune des 3 méthodes. J'imagine que la dernière est la plus simple.

    Jean

  12. #12
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 086
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 086
    Points : 42 925
    Points
    42 925
    Par défaut
    Salut,

    Dans ce cas, tu ne dois pas ouvrir Word !

    C'est un publipostage pour un seul document ?

    Pas besoin de faire du publipostage.
    Tu peux envoyer les données du forumulaire Access vers des signets du document et imprimer au départ d'Access.

    Gérer le nombre de copies depuis Access lors d'une impression avec Word ne te permettras de gérer la chose convenablement.

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 38
    Points : 31
    Points
    31
    Par défaut
    J'ai trouvé la solution qui me convient, je rempace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        ActiveDocument.MailMerge.Destination = wdSendToPrinter
        ActiveDocument.MailMerge.Execute
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        ActiveDocument.PrintOut
    De cette façon un seul exemplaire est imprimé, sans qu'on ait le choix.

    Les réponses que tu m'a apporté ne sont pas exactement celles que j'attendais, mais elles m'ont permis de régler mon pb.

    Donc, merci

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

Discussions similaires

  1. Communication Access - Word
    Par bulmish dans le forum IHM
    Réponses: 9
    Dernier message: 17/10/2008, 17h07
  2. communication élaborée access->word ou excel
    Par tonnick dans le forum VBA Access
    Réponses: 6
    Dernier message: 11/06/2007, 10h07
  3. dde access-word
    Par en_gel_ho dans le forum Access
    Réponses: 2
    Dernier message: 16/05/2006, 09h27
  4. Liaison automatisée access word
    Par lapinours dans le forum Access
    Réponses: 6
    Dernier message: 13/05/2006, 17h09
  5. Transfert Access => Word
    Par Gebudi. dans le forum Access
    Réponses: 2
    Dernier message: 17/03/2006, 13h41

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