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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    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

  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
    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 confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    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

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

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    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

  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
    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 confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    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)

+ 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