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

Macros et VBA Excel Discussion :

problème wdSendToPrinter si variable word object


Sujet :

Macros et VBA Excel

  1. #1
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut problème wdSendToPrinter si variable word object
    Salut les gars (et les filles)

    j'ai une question sur un problème qui commence à me

    Pour un publipostage j'utilise des variables object pour manipuler word

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Dim appWord As Object
    Dim docWord As Object
     
    Set appWord = CreateObject("Word.Application")
    Set docWord = appWord.Documents.Open(ThisWorkbook.Path & "\formulaire attestation de non conduite")

    Jusque la pas de problème

    par contre quand j'arrive a la partie ou je lui demande d'imprimer le publipostage, il ne semble pas reconnaitre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Destination = wdSendToPrinter
    car il le gere comme si c'était un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Destination = wdSendToNewDocument
    et donc n'imprime pas mes documents mais me propose de les enregistrer

    Ce qui me semble bizard c'est que si j'ai une référence word dans mon projet, ca fonctionne très bien. idem si j'utilise des variable Word.application etc.

    Avez vous une idée?


    PS : pour le moment je j'ai fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    appWord.PrintOut
    Application.Wait TimeSerial(Hour(Now), Minute(Now), Second(Now) + 10)
    le wait étant la pour laisser le temps à l'imprimante de se reveiller sinon ca sort avant de sortir une feuille
    Jérôme

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Et si tu ajoutes la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    .Destination = wdSendToPrinter
    .Execute Pause:=True
    S'il y a une erreur, il te l'indiquera... A tout hasard. Mais il est vrai qu'il faut laisser le temps à Word "d'inspirer" l'imprimante... et des fois, ces petites bêtes mettent du temps à se décider.
    En outre, je mettrais des DoEvents un peu partout pour voir (à la place de ton Wait)
    Juste une idée

  3. #3
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    la ligne
    est bien présente, mais c'est le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Destination = wdSendToPrinter
    qui pose problème puisque il se comporte comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Destination = wdSendToNewDocument
    Pour info j'ai testé sur 2 machines différentes
    Jérôme

  4. #4
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Je met le code de la macro au cas ou

    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
     
    Public Sub publipostage(ByVal pageFin As Integer)
    'Nécessite d'activer la référence "Microsoft Word xx.x Object Library"
    '
    Dim appWord As Object
    Dim docWord As Object
     
    'Dim appWord As Word.Application
    'Dim docWord As Word.Document
     
    Dim NomBase As String
     
    NomBase = ThisWorkbook.Path & "\" & ThisWorkbook.Name
     
    Application.ScreenUpdating = False
     
    Set appWord = CreateObject("Word.Application")
    'Set appWord = New Word.Application
     
    appWord.Visible = False
     
    'Ouverture du document principal Word
    Set docWord = appWord.Documents.Open(ThisWorkbook.Path & "\formulaire attestation de non conduite")
     
    'fonctionnalité de publipostage pour le document spécifié
    With docWord.mailMerge
     
        'Ouvre la base de données
        .OpenDataSource Name:=NomBase, _
        Connection:="Driver={Microsoft Excel Driver (*.xls)};" & _
        "DBQ=" & NomBase & "; ReadOnly=True;", _
        SQLStatement:="SELECT * FROM [Saisie$]"
     
        'Spécifie la fusion vers l'imprimante
        '.Destination = wdSendToPrinter
        .Destination = wdSendToNewDocument
        .suppressBlankLines = True
        'Prend en compte l'ensemble des enregistrements
     
        With .DataSource
            .firstRecord = 2
            .LastRecord = pageFin
     
        End With
     
        'Exécute l'opération de publipostage
        .Execute Pause:= True
    End With
     
    'Edition
     
    'Code si wdSendToNewDocument en commentaire si wdSendToPrinter
    appWord.PrintOut
    Application.ScreenUpdating = True
    Application.Wait TimeSerial(Hour(Now), Minute(Now), Second(Now) + 10)
     
    'Fermeture du document Word
    docWord.Close False
    appWord.Quit False
     
    End Sub
    Jérôme

  5. #5
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Il y a un truc qui m'étonne dans ton code, tu fixes les pages à imprimer après avoir envoyé le résultat de la fusion vers l'imprimante. J'ai vérifié dans l'aide Word, et j'ai eu ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    With ActiveDocument.MailMerge
        .DataSource.FirstRecord = 1
        .DataSource.LastRecord = 4
        .Destination = wdSendToPrinter
        .SuppressBlankLines = True
        .Execute
    End With
    Ensuite, il faut laisser au système le temps de traiter... J'ajouterais un doevents sur la ligne suivante. Sans garantie quant à l'efficacité, mais ton Wait pallie ce problème au cas où ce serait insuffisant.
    Tu testes pour nous ?
    A+

  6. #6
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    mettre le FirstRecord avant ne change rien.

    je ne pense pas qu'il y ait un problème sur cette partie, puisque'il fonctionne si j'ajoute la référence word 11.
    C'est quand je la retire que ca ne fait rien (pas d'erreur et pas d'impression. Juste word qui s'ouvre et se ferme avec le fichier de publipostage)
    Jérôme

  7. #7
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Qu'est-ce qui t'ennuie avec le Printout ?
    Tu as essayé avec DoEvents ?

  8. #8
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Je crois que je me suis mal exprimé (c'est ce qui arrive quand sa sonne de partout

    Je reprend.

    Le code ci dessous fonctionne si la référence Microsoft Word 11 est ajouté au projet
    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
    46
    47
    48
    49
    50
    51
    52
    53
     
     
    Public Sub publipostage(ByVal pageFin As Integer)
    'Nécessite d'activer la référence "Microsoft Word xx.x Object Library"
    '
    Dim appWord As Object
    Dim docWord As Object
     
     
    Dim NomBase As String
     
    NomBase = ThisWorkbook.Path & "\" & ThisWorkbook.Name
     
    Application.ScreenUpdating = False
     
    Set appWord = CreateObject("Word.Application")
     
    appWord.Visible = False
     
    'Ouverture du document principal Word
    Set docWord = appWord.Documents.Open(ThisWorkbook.Path & "\formulaire attestation de non conduite")
     
    'fonctionnalité de publipostage pour le document spécifié
    With docWord.mailMerge
     
        'Ouvre la base de données
        .OpenDataSource Name:=NomBase, _
        Connection:="Driver={Microsoft Excel Driver (*.xls)};" & _
        "DBQ=" & NomBase & "; ReadOnly=True;", _
        SQLStatement:="SELECT * FROM [Saisie$]"
     
        'Spécifie la fusion vers l'imprimante
        .Destination = wdSendToPrinter
     
        .suppressBlankLines = True
        'Prend en compte l'ensemble des enregistrements
     
        With .DataSource
            .firstRecord = 2
            .LastRecord = pageFin
     
        End With
     
        'Exécute l'opération de publipostage
        .Execute Pause:= True
    End With
     
     
    'Fermeture du document Word
    docWord.Close False
    appWord.Quit False
     
    End Sub
    Vu que le but d'utiliser des variables object est de ne pas avoir de référence qui pourraient faire planter le code si l'utilisateur n'a pas la meme version, je supprime donc la référence Microsoft Word 11.
    Et la malheureusement ca n'imprime plus
    Jérôme

  9. #9
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 144
    Points
    20 144
    Par défaut
    bonjour Jerome, bonjour Ouskel'n'or

    Si tu n'utilises pas la référence Word, remplace wdSendToPrinter par sa valeur , en l'occurence: 1.


    Si tu veux connaitre la valeur des différentes constantes, ouvre Word pour faire des essais et utilise ce type de macro


    bonne soirée
    michel

  10. #10
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Super SilkyRoad ca marche parfaitement.
    j'avais vu cette histoire de 1 mais je ne pensais pas que ca pouvait bloquer l'impression.

    Merci aussi ouskel'n'or pour ton aide
    Jérôme

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 31/08/2005, 10h05
  2. [PERL] problème désallocation de variable
    Par LE NEINDRE dans le forum Langage
    Réponses: 11
    Dernier message: 24/08/2005, 10h07
  3. Problème d'initialisation variable tableau
    Par HeZiX dans le forum Langage
    Réponses: 3
    Dernier message: 08/06/2005, 16h30
  4. Problèmes avec les variables final
    Par casolaro dans le forum Langage
    Réponses: 7
    Dernier message: 09/12/2004, 14h29
  5. Réponses: 6
    Dernier message: 28/05/2004, 09h39

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