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 Access Discussion :

Comportement étrange - publipostage d'une image [AC-2003]


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 371
    Par défaut Comportement étrange - publipostage d'une image
    Bonjour,

    M'inspirant de l'inépuisable tuto sur le publipostage Access, j'essaie de faire pareil avec une photo dont le chemin (localisation sur mon disque) est stocké dans un champ de ma base et que je voudrai insérer dans un document word au niveau d'un signet préalablement défini. Ca fonctionne bien mais seulement une fois sur deux! quand ça plante j'ai un message d'erreur 462.

    Le code en question (et ce qui est surligné par le déboggeur):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    stSQL07 = "Select * from Plan where NumCD =" & idctrt
    Set rs07 = db.OpenRecordset(stSQL07) 'définition du second recordset table Plan
        With wApp
            .ActiveDocument.Bookmarks("Plan").Select
            If IsNull(rs07.Fields("Plan")) Then .ActiveDocument.Bookmarks("Plan").Range.Text = "Pas de photos des lieux" Else Selection.InlineShapes.AddPicture FileName:=rs07.Fields("Plan"), linktofile:=False, savewithdocument:=True 'Selection.InlineShapes.AddPicture FileName:=rs07.Fields("Plan"), linktofile:=False, savewithdocument:=True    
    End With
    Je lance le code une première fois, OK l'image est bien là où il faut. Je ferme le doc word et relance le code... et là pas d'image mais un message d'erreur.
    Je ferme le doc word et relance le code et ça fonctionne!
    J'ai en plus remarquer que si un document précédent (qui aurait du contenir l'image) reste ouvert quand je lance le code une nouvelle fois, c'ets dans ce document que l'image apparait et pas dans le nouveau qui vient d'être créé.

    A mon avis, il doit y avoir derrière ce comportement quelque chose comme "un indicateur qui ne libère pas l'accès à l'image après une première ouverture réussie"

    Avez-vous une suggestion pour résoudre ce bug?

    Merci a tous!

  2. #2
    Expert confirmé
    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Par défaut
    bjr,

    évitez l'utilisation d'objets word sans les préfixer
    c'est à dire que dans le code donné, Selection est appelé directement sans préciser quelle sélection on cible
    Access utilise le premier objet Selection trouvé (qui n'est pas forcément celui qu'on souhaite) et garde un pointeur en mémoire vers cet objet; pointeur qui n'est pas libéré et qui bloque le processus word.

    il faut préciser donc préciser toujours l'objet sur lequel on souhaite agir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wApp.Selection.InlineShapes.AddPicture ...
    de manière générale, évitez les objets Active... et Selection qui peuvent être problématiques car on n'est pas toujours certain de ce qui est actif ou sélectionné (surtout si l'utilisateur a la main et fait autre chose sur word en même temps que le code de publipostage)
    précisez bien l'objet ciblé explicitement
    le document en cours de traitement devrait être identifié par un objet oDoc, par exemple si le document est créé vierge :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim oDoc As Word.Document
    Set oDoc = wApp.Documents.Add
    Ensuite on utilise cet objet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    oDoc.Bookmarks("Plan").Range.InlineShapes.AddPicture ....
    On n'est ainsi certain de ce que représente oDoc, même si l'objet Application contient plusieurs documents, on cible l'objet oDoc même s'il n'est pas actif.

    Remarque : Inutile de sélectionner le Bookmark pour y faire appel, c'est une opération gourmande qui n'est pas utile.

    Comme on a un objet, on peut le libérer en fin de traitement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Set oDoc = Nothing
    Set oApp = Nothing
    Bonne continuation.

  3. #3
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 371
    Par défaut
    Bonjour Arkham46,

    Merci pour ces conseils clairs et précis. Ca fonctionne impec!

    A une prochaine et encore merci!!

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 16/07/2007, 10h54
  2. Réponses: 1
    Dernier message: 22/11/2006, 18h11
  3. Comportement différent entre un bouton et une image
    Par MicheMTP13 dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 07/11/2005, 09h47
  4. Comportement étrange apres une désinstallation
    Par Sunchaser dans le forum Excel
    Réponses: 4
    Dernier message: 06/08/2005, 20h44
  5. comportement étrange d'une jointure ...
    Par amenis dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 10/02/2005, 22h27

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