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 :

De l'utilisation des objets et du With


Sujet :

VBA Access

  1. #1
    Membre régulier
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2014
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2014
    Messages : 64
    Points : 94
    Points
    94
    Par défaut De l'utilisation des objets et du With
    Bonjour a Tous,

    Dans le cadre d'un publipostage initialisé depuis Access2010 (qui lance l'activeX Word)
    J'ai dans un premier temps suivi une reponse donnée sur le site (dans un tuto de ClaudeLeloup)
    qui propose (hors ce qui est commentaire) :

    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
     
    Dim Appwd As Word.Application
    'Dim wdapp As Word.Document
     
    Set Appwd = CreateObject("Word.Application")
    With Appwd
        .Visible = True
        .Documents.Open yCheminApplication & "\" & pDoc
        .Activate
     
    '    Set wdapp = Appwd.Documents(1)
     
    On Error Resume Next
    '    	With wdapp
            	.Documents(1).MailMerge.OpenDataSource _
                 		Name:=yCheminApplication & "\" & yNomApplication, _
                 		LinkToSource:=True, _
                 		Connection:=pQuery, _
                 		SQLStatement:=pSelect
            	.Documents(1).MailMerge.Execute
            	.Documents(1).SaveAs2 pSave
    '    	End With
        	.Documents.Close SaveChanges:=wdDoNotSaveChanges, OriginalFormat:=wdPromptUser
    On Error GoTo 0
    End With
    '    Set wdapp = Nothing
    Set Appwd = Nothing
    Aucun problème, cela fonctionne.

    Et j'ai voulu "ameliorer" un peu en ajoutant ce qui est en commentaire, c'est a dire un objet Word.document affecté à Appwd.documents(1), en supprimant evidemment les références .Documents(1) pour le MailMerge.

    Et ca ne fonctionne plus, le SaveAs2 sauvegarde le fichier modèle de publipostage au lieu de sauvegarder le fichier fusionné.
    Et deux instances restent ouvertes en fin de procédure (le modèle fusionné et une lettre-type).

    Quelqu'un peut-il m'expliquer pourquoi ?
    Jusqu'à maintenant je pensais que la syntaxe With .. end with n'était qu'un raccourci de présentation
    et que la création d'un objet intermédiaire ne changeait pas le comportement des propriétés et methodes sous-jacentes.

    Merci de votre aide.
    Cordialement.

  2. #2
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 647
    Points : 14 624
    Points
    14 624
    Par défaut
    Bonsoir,
    Jusqu'à maintenant je pensais que la syntaxe With .. end with n'était qu'un raccourci de présentation
    l'objet wdapp est peut-être mal chargé :
    si tu écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set wdapp = Appwd.Documents(1)
    et que tu utilises :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    With wapp
    .Documents(1).MailMerge.OpenDataSource
    cela donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Appwd.Documents(1).Documents(1).MailMerge.OpenDataSource
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  3. #3
    Membre régulier
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2014
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2014
    Messages : 64
    Points : 94
    Points
    94
    Par défaut
    Bonsoir Tee_grandbois :
    Une lecture attentive de mon post infirme cette réponse.
    J'ai bien précisé que l'utilisation de l'objet wdapp et du with associé avait aussi entrainé la suppression de .documents(1) dans les instructions du mailmerge ,
    donc au final j'ai bien un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    appwd.documents(1).mailmerge.opendatasource
    ou, du moins, j'aimerais avoir !!

    Cordialement
    Caramel13

  4. #4
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 647
    Points : 14 624
    Points
    14 624
    Par défaut
    Une lecture attentive de mon post infirme cette réponse.
    dont acte. Malheureusement, je n'ai pas d'autres (meilleures ) idées, d'autant plus que je ne suis pas un spécialiste de la manipulation de Word via Access.
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  5. #5
    Membre éprouvé
    Femme Profil pro
    Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Inscrit en
    Août 2017
    Messages
    358
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 56
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Secteur : Finance

    Informations forums :
    Inscription : Août 2017
    Messages : 358
    Points : 931
    Points
    931
    Par défaut Le problème est peut-être moins dans le with que dans le set ?
    Bonsoir Caramel13,

    J'ai un peu cherché, sans trouver de contre-indication à l'imbrication des with... end with.
    Par contre, dans ta modification, tu as tout de même implémenté un nouvel objet, ce qui ne me paraît pas neutre.
    As-tu essayé :

    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
     
    Dim Appwd As Word.Application
     
    Set Appwd = CreateObject("Word.Application")
    With Appwd
        .Visible = True
        .Documents.Open yCheminApplication & "\" & pDoc
        .Activate
     
    On Error Resume Next
        	With .Documents(1)
            	.MailMerge.OpenDataSource _
                 		Name:=yCheminApplication & "\" & yNomApplication, _
                 		LinkToSource:=True, _
                 		Connection:=pQuery, _
                 		SQLStatement:=pSelect
            	.MailMerge.Execute
            	.SaveAs2 pSave
        	End With
        	.Documents.Close SaveChanges:=wdDoNotSaveChanges, OriginalFormat:=wdPromptUser
    On Error GoTo 0
    End With
     
    Set Appwd = Nothing
    Cela ressemble davantage aux exemples d'imbrication que l'on peut trouver ça et là.

    Cordialement,
    Paraffine.
    Les problèmes sont des opportunités en vêtements de travail. Henry H. Kaiser
    Il n'est pas de problème dont une absence de solution ne finisse par venir à bout. Henri Queuille

  6. #6
    Membre régulier
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2014
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2014
    Messages : 64
    Points : 94
    Points
    94
    Par défaut
    Bonjour Paraffine,

    Merci de ton intérêt pour ce sujet,
    mais c'est bien la question que je me pose :

    Pourquoi est-ce que ce n'est pas neutre ?
    Normalement un objet intermédiaire avec ''With/end with'' devrait se contenter de ''raccourcir'' la syntaxe.
    Or dans le cas décrit à l'origine du message, suivant que j'utilise ta syntaxe (que j'ai essayé et qui fonctionne) ou celle que je voulais faire, le comportement de la séquence d'instruction change :
    Dans un cas, le SaveAs2 du MailMerge me sauve le modèle au lieu du document fusionné. Dans l'autre, c'est bien le document fusionné qui est sauvé.

    D'ou la question, ... qui porte plus sur ''l interne'' du fonctionnement du ''with'' que sur ''trouver la bonne programmation''.

  7. #7
    Membre éprouvé
    Femme Profil pro
    Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Inscrit en
    Août 2017
    Messages
    358
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 56
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Service informatique presque à moi seule (TPE), ex-architecte fonctionnel
    Secteur : Finance

    Informations forums :
    Inscription : Août 2017
    Messages : 358
    Points : 931
    Points
    931
    Par défaut
    Bonjour Caramel13,

    Ce que je voulais dire, c'est que l'implémentation de l'objet a un impact (ne serait-ce que sur la mémoire). Donc le code n'est pas strictement équivalent. A mon sens, ce que je t'ai proposé l'est, et c'est pour cela que je voulais savoir si tu pouvais l'essayer (je ferais bien un test maintenant, mais je suis un peu à court de temps d'ici dimanche soir). Inversement, on pourrait voir si le comportement de ton code change avec
    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
     
    Dim Appwd As Word.Application
    Dim wdapp As Word.Document
     
    Set Appwd = CreateObject("Word.Application")
    With Appwd
        .Visible = True
        .Documents.Open yCheminApplication & "\" & pDoc
        .Activate
     
        Set wdapp = Appwd.Documents(1)
     
    On Error Resume Next
     
            	wdapp.MailMerge.OpenDataSource _
                 		Name:=yCheminApplication & "\" & yNomApplication, _
                 		LinkToSource:=True, _
                 		Connection:=pQuery, _
                 		SQLStatement:=pSelect
            	wdapp.MailMerge.Execute
            	wdapp.SaveAs2 pSave
     
        	.Documents.Close SaveChanges:=wdDoNotSaveChanges, OriginalFormat:=wdPromptUser
    On Error GoTo 0
    End With
        Set wdapp = Nothing
    Set Appwd = Nothing
    Si le comportement de ton code en est affecté, le mystère change d'objet, c'est le cas de le dire. Sinon, la "culpabilité" du with est plus évidente.
    Bonne journée,
    Paraffine.
    Les problèmes sont des opportunités en vêtements de travail. Henry H. Kaiser
    Il n'est pas de problème dont une absence de solution ne finisse par venir à bout. Henri Queuille

Discussions similaires

  1. Réponses: 3
    Dernier message: 24/02/2007, 00h04
  2. Utilisation des objets COM
    Par jdelges dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 26/01/2007, 23h52
  3. Utiliser des objets automation dans Oracle
    Par WebPac dans le forum Forms
    Réponses: 10
    Dernier message: 29/11/2006, 19h17
  4. Utiliser des objets SWING dans une vue RCP
    Par manuga72 dans le forum Eclipse Platform
    Réponses: 1
    Dernier message: 20/10/2006, 17h26
  5. Erreur lors de l' utilisation des objets ADO
    Par aityahia dans le forum Bases de données
    Réponses: 10
    Dernier message: 24/03/2006, 13h46

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