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

VBA Word Discussion :

Word - Acces - Modèle de document [WD-2010]


Sujet :

VBA Word

  1. #1
    Membre régulier
    Inscrit en
    Février 2011
    Messages
    263
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 263
    Points : 100
    Points
    100
    Par défaut Word - Acces - Modèle de document
    Bonjour,

    Je vous en prie, aidez moi je n'en peux plus.
    Je me bagarre avec word et access depuis des heures.

    Voici mon problème :
    J'ai un document access qui me permet de rédiger des contrats.
    En cliquant sur un bouton dans un formulaire j'envoie mes données vers word. Jusque là, pas de soucis.
    Le problème intervient quand je veux fermer mon document. J'ai le droit à un message d'erreur me disant que normal.dot est utilisé par un autre utilisateur.
    J'ai vu plusieurs post sur le sujet mais je n'arrive toujours pas à règler mon problème.

    Voici mon 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
     
    Dim objWord As Word.Document
    Dim docword As Word.Application
    Dim ligne As Integer
     
    ligne = Me.Modifiable14.ListIndex
     
        Set docword = CreateObject("word.application")
        docword.Application.Visible = True
        Set objWord = docword.Documents.Add("Z:\Contrat_Base.dotx", newtemplate:=False, documenttype:=0)
     
        objWord.Bookmarks("sgtDate").Range.Text = Format(Date, "dd mmmm yyyy")
        objWord.Bookmarks("sgtNumero").Range.Text = CStr_(Forms.fiche_marche.Texte5)
        objWord.Bookmarks("sgtLibelle").Range.Text = CStr_(Forms.fiche_marche.Form.Texte7)
        objWord.Bookmarks("sgtAttributaire").Range.Text = Me.Modifiable14.Column(1, ligne) & " - " & Me.Modifiable14.Column(4, ligne) & " - " & Me.Modifiable14.Column(5, ligne) & " - " & Me.Modifiable14.Column(6, ligne)
     
     
        objWord.PrintOut
        objWord.Close (wdDoNotSaveChanges)
        Set objWord = Nothing
        Set docword = Nothing
    End Sub
    Mes instances sont bien fermées non ?

    Merci

  2. #2
    Rédacteur/Modérateur

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

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

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

    Tu dois avoir plus d'ordre dans ton code.


    Chaque objet ouvert doit être fermé.
    Chaque objet affecté doit être libéré.

    Si tu nommes un objet Application, appelle le MonObjetApp ou AppObjet.
    Si tu utilises un document, oDoc, DocObjet, ObjetDoc, ...

    Mais évite de mélanger docword selon moi en lisant le code devrait être un document et pas une application.
    objetWord je pencherais pour une application mais tu en fais un document.
    Mais ce n'est pas la cause de ton problème.

    Tu crées un document, tu le fermes et libères son instance.
    Tu crées une appllication, tu tentes de libérer son instance alors qu'elle n'est pas fermée.
    Et une instance Word bloque toujours l'accès au Normal.dotm puisque par défaut il est ouvert.

  3. #3
    Membre régulier
    Inscrit en
    Février 2011
    Messages
    263
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 263
    Points : 100
    Points
    100
    Par défaut
    Bonjour,

    Désolé de la réponse tardive mais j'étais sur d'autres problèmes

    Je n'y arrive pas. J'ai beau retourner mon code dans tous les sens j'ai quand même le message d'erreur.

  4. #4
    Rédacteur/Modérateur

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

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

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

    C'est quoi ton dernier code ?

  5. #5
    Membre régulier
    Inscrit en
    Février 2011
    Messages
    263
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 263
    Points : 100
    Points
    100
    Par défaut
    Voici mon dernier code.
    J'ai essayer de retourner dans tous les sens mes ouvertures et fermetures d'instances/objets mais rien n'y fait.
    Je ne dois pas avoir la bonne logique.

    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
    Dim vnt As Integer
    Dim ObjWord As Word.Application
    Dim docword As Word.Document
     
    vnt = Forms.Frm_Lettre_Consultation.Form.Liste2.ListCount
     
    Set ObjWord = CreateObject("word.application")
     
    For vnt = 0 To vnt - 1
     
        Set docword = ObjWord.Documents.Add("Z:\Nouveau_Doc\Lettre.dotx")
        ObjWord.Application.Visible = True
     
        With docword
        .Bookmarks("sgtAdresse").Range.Text = Forms.Frm_Lettre_Consultation.Form.Liste2.Column(1, vnt) & vbCrLf & Forms.Frm_Lettre_Consultation.Form.Liste2.Column(2, vnt) & vbCrLf & Forms.Frm_Lettre_Consultation.Form.Liste2.Column(3, vnt) & " " & Forms.Frm_Lettre_Consultation.Form.Liste2.Column(4, vnt)
        .Bookmarks("sgtDate").Range.Text = Format(Date, "dd mmmm yyyy")
        .Bookmarks("sgtInitiales").Range.Text = Forms.Frm_Lettre_Consultation.Form.Texte11
        .Bookmarks("sgtDescription").Range.Text = Me.Texte0
        .Bookmarks("sgtDLRO").Range.Text = Me.Texte3
        .Bookmarks("sgtHLRO").Range.Text = Me.Texte5
        .Bookmarks("sgtComplement").Range.Text = Me.Texte8
        .Bookmarks("sgtModeTransmission").Range.Text = Me.Texte16
        End With
     
    Next vnt
     
    Set docword = Nothing
    Set ObjWord = Nothing

  6. #6
    Rédacteur/Modérateur

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

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

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

    Dans l'ordre.

    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
    Dim wApp As Word.Application
    Dim oDoc As Word.Document
     
    Set wApp = New Word.Application
    Set oDoc = wApp.Documents.Add (".....")
    ....
    ....
    Traitement 
    ....
    ....
     
    oDoc.Close
    wApp.Quit
     
    Set oDoc = Nothing
    set wApp = Nothing
    Le principe est toujoursle même
    1. On déclare un objet
    2. On affecte l'objet
    3. On ferme l'objet
    4. On libère l'objet

    Si une des étapes 1 et 2 est omise, on lève une erreur
    Si une des étapes 3 et 4 est omise, on peut lever une erreur, mais surtout, l'objet reste en utilisation.

    Si tu ne fermes pas l'application avec la méthode Quit, elle reste active et pour chaque utilisation du code, tu gardes une instance de Word ouverte.
    On peutles voir dans le gestionnaire des tâches de Windows.

  7. #7
    Membre régulier
    Inscrit en
    Février 2011
    Messages
    263
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 263
    Points : 100
    Points
    100
    Par défaut
    Merci beaucoup.

    Problème résolu.

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

Discussions similaires

  1. [SP-2010] Modèle de document et champ type, liste word limitée à 30
    Par Tiberium76 dans le forum SharePoint
    Réponses: 3
    Dernier message: 22/01/2013, 14h30
  2. Réponses: 4
    Dernier message: 03/08/2011, 11h24
  3. Réponses: 7
    Dernier message: 18/12/2008, 09h09
  4. Réponses: 11
    Dernier message: 26/04/2005, 09h23
  5. Comment réaliser des modèles de documentations avec XML ?
    Par Dams76 dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 29/08/2003, 02h15

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