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 :

[VBA-E] Imprimer la page souhaitée d'un document word


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 32
    Points : 27
    Points
    27
    Par défaut [VBA-E] Imprimer la page souhaitée d'un document word
    Bonjour,

    Voilà quelques jours que je cherche en vain de lancer à partir d'Excel l'impression d'une page se trouvant dans un document word.

    Le code ci-dessous devrait imprimer uniquement la page 2 du document word. Malheureusement il m'imprime le document en entier

    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
     
    Sub ImprimerDossierWord()
     
    Dim WordApp As Object
    Dim Doc As Object
    Dim NomFichier As String
    Dim Range As Object
     
    NomFichier = "D:\Documents de Geoffray\Geoffray\Impression automatique\test1.doc"
     
    If Dir(NomFichier) <> "" Then
    Set WordApp = CreateObject("Word.Application")
    Set Doc = WordApp.Documents.Open(Filename:=NomFichier)
    Doc.PrintOut , Pages = "2"
    Doc.Close False
    WordApp.Quit
    Set Doc = Nothing: Set WordApp = Nothing
    Else
    MsgBox "Chemin ou fichier introuvable."
    End If
     
    End Sub
    Par ailleurs le document word a tendance a rester en arrière plan. Je pense pourtant utiliser les bonnes commandes pour "tuer l'objet". Peut-être que ce problème intervient parce que lors de mes essais le code plante ?

    Si vous avez une solution je vous en serai très reconnaissant

    Merci. Geoffray

  2. #2
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Essaye:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Doc.PrintOut Pages:="2"
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  3. #3
    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

    tu peux tester

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Doc.PrintOut , Range:=wdPrintFromTo, From:="2", To:="2"


    sinon , il n'y a pas de probleme pour la fermeture du document . le soucis etait sans doute lié aux plantages

    tu pourrais ajouter une gestion d'erreur pour refermer le document en cas de plantage

    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
     
    '
    '
    '
    On Error GoTo Fin
    NomFichier = "D:\Documents de Geoffray\Geoffray\Impression automatique\test1.doc"
     
    If Dir(NomFichier) <> "" Then
    Set WordApp = CreateObject("Word.Application")
    Set Doc = WordApp.Documents.Open(Filename:=NomFichier)
    Doc.PrintOut , Pages:="2"
    Doc.Close False
    WordApp.Quit
    Set Doc = Nothing: Set WordApp = Nothing
    Else
    MsgBox "Chemin ou fichier introuvable."
    End If
     
    Exit Sub
    Fin: 'gestion d'erreur
    Doc.Close False
    WordApp.Quit
    Set Doc = Nothing: Set WordApp = Nothing
    End Sub

    bonne journée
    michel

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 32
    Points : 27
    Points
    27
    Par défaut
    Merci à vous deux pour vos réponses,

    J'ai essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Doc.PrintOut Pages:="2"
    Ca m'imprime toujours le document en entier.

    Quant à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Doc.PrintOut , Range:=wdPrintFromTo, From:="2", To:="2"
    J'obtiens une erreur d'exécution 5148 . Le nombre doit être compris entre -32765 et 32767.

    Pas évident de manipuler word à partir d'excel

  5. #5
    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
    rebonjour

    effectivement si tu ne déclares pas la librairie Word, il faut remplacer la constante wdPrintFromTo par sa valeur

    Fait un essai en utilisant une valeur qui doit etre entre 1 et 5 :
    Si l'aide en ligne est bien faite ,commence par 3

    1. wdPrintAllDocument
    2. wdPrintCurrentPage
    3. wdPrintFromTo
    4. wdPrintRangeOfPages
    5. wdPrintSelection


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Doc.PrintOut , Range:= 3 , From:="2", To:="2"


    bon apres midi
    michel

  6. #6
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    pour utiliser les constantes word... préfixes les par WORD. ..:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Doc.PrintOut , Range:=WORD.wdPrintFromTo, From:="2", To:="2"

  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
    Essaie ça. Au lieu de désigner la page à imprimer, place sur la page et imprime la page courante.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        Selection.GoTo What:=wdGoToPage, Which:=wdGoToNext, Name:="2"
        Application.PrintOut FileName:="", Range:=wdPrintCurrentPage, Item:= _
            wdPrintDocumentContent, Copies:=1     ', Pages:="", PageType:=wdPrintAllPages, _
            Collate:=True, Background:=True, PrintToFile:=False
    En remarque les paramètres facultatifs

    A tout hasard, j'ai l'impression que ton problème est ailleurs

    A+

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 32
    Points : 27
    Points
    27
    Par défaut
    La solution de Skillroad fonctionne

    effectivement si tu ne déclares pas la librairie Word, il faut remplacer la constante wdPrintFromTo par sa valeur

    Fait un essai en utilisant une valeur qui doit etre entre 1 et 5 :
    Si l'aide en ligne est bien faite ,commence par 3

    1. wdPrintAllDocument
    2. wdPrintCurrentPage
    3. wdPrintFromTo
    4. wdPrintRangeOfPages
    5. wdPrintSelection


    Code :
    Doc.PrintOut , Range:= 3 , From:="2", To:="2"

    Merci beaucoup, je testerai également les propositions de bbil et ouskel'n'or.

    Je suis très content d'avoir découvert ce forum et sa communauté
    Bonne journée

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 32
    Points : 27
    Points
    27
    Par défaut
    Bonsoir,

    Dès lors que je remplace le "2" par ma variable qui s'appelle NumPage, mon code plante.

    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
    Dim w
    Set w = CreateObject("Word.Application")
    .
    .
    Case "doc"
                        If Dir(CheminFichier) <> "" Then
                            Set Doc = w.Documents.Open(Filename:=CheminFichier)
                            w.Visible = True
                            Doc.PrintOut Range:=3, From:="2", To:="2"      
                            Doc.Close False
                            w.Quit
                            'Set Doc = Nothing
                        Else
                            MsgBox "Chemin ou fichier introuvable."
                        End If
    .
    .
    J'ai essayé plusieurs solutions telles que : From:="NumPage", To:="NumPage" ,
    From:=" & NumPage & ", To:=" & NumPage & " ou encore From:=NumPage, To:=NumPage. Aucune de ces solutions ne fonctionne.

    Merci d'avance pour vos propositions.

    Bonne soirée Geoffray

  10. #10
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    essai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    doc.PrintOut , Range:=Word.wdPrintFromTo, From:=CStr(Numpage), To:=CStr(Numpage)

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 32
    Points : 27
    Points
    27
    Par défaut
    Ca me renvoit une erreur d'éxécution 424 : objet requis, dommage !

    Ca signigifie quoi Cstr sinon ?

  12. #12
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    si tu n'as pas coché la référence à word .. remplace Word.wdPrintFromTo par 3.. comme dit plus haut..

    ton document word s'ouvre bien ?


    Cstr.. permet de transformer une valeur numérique en chaine...

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 32
    Points : 27
    Points
    27
    Par défaut
    Comme dit plus haut j'ai bien fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Doc.PrintOut Range:=3
    Mon document word s'ouvre bien et la page souhaitée est correctement imprimée quand je fais ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Doc.PrintOut Range:=3, From:="2", To:="2"
    Par contre tu l'auras compris je ne veux pas toujours imprimer la page 2 d'un document word et la ca bloque des lors que je place une variable et je trouve ca très bizarre

  14. #14
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    et ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    doc.PrintOut , Range:=3, From:=CStr(Numpage), To:=CStr(Numpage)

  15. #15
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    A tout hasard et sans avoir testé...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Doc.PrintOut Range:=4, Pages:=Chr(34) & NumPage & Chr(34)
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  16. #16
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 32
    Points : 27
    Points
    27
    Par défaut
    Super

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Doc.PrintOut Range:=4, Pages:=Chr(34) & NumPage & Chr(34)
    Ne marche pas et me renvoie une erreur 5441

    Par contre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    doc.PrintOut , Range:=3, From:=CStr(Numpage), To:=CStr(Numpage)
    Marche très bien et ca c'est une bonne nouvelle ca va me faciliter grandement la vie. Merci les modo de vous être penché sur mon cas

  17. #17
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Dans ce cas, je pense que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Doc.PrintOut Range:=4, Pages:=Cstr(NumPage)
    devrait fonctionner aussi.
    Eventuellement avec une virgule après PrintOut.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  18. #18
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 32
    Points : 27
    Points
    27
    Par défaut
    Bonjour,

    J'ai testé
    Doc.PrintOut Range:=4, Pages:=Chr(NumPage)
    et

    Doc.PrintOut, Range:=4, Pages:=Chr(NumPage)
    les deux ne marchent pas. Mais la solution de bbil me convient tout à fait.

    Mon but était de créer une macro capable de gérer l'impression de fichiers excel et word avec la contrainte de définir des recto et des verso. Tout ca en vue de réaliser des brochures plus efficacement.

    Je vous fais part de mon travail qui est également le votre Macro Impression V2.zip
    Merci à tous
    Geoffray

  19. #19
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    non pas chr .. CStr... alain ne devais pas être bien réveillé ce matin

  20. #20
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 32
    Points : 27
    Points
    27
    Par défaut
    Effectivement ca marche avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Doc.PrintOut, Range:=4, Pages:=CStr(NumPage)

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Imprimer plusieurs pages dans un seul document
    Par mofx71 dans le forum Documents
    Réponses: 0
    Dernier message: 08/12/2008, 21h49
  2. Réponses: 3
    Dernier message: 17/04/2007, 16h55
  3. [VBA-W]Enregistrer sous au format excel un document Word
    Par tazamorte dans le forum VBA Word
    Réponses: 3
    Dernier message: 20/03/2007, 22h03
  4. Réponses: 10
    Dernier message: 19/03/2007, 17h55
  5. [VBA-E] Insérer n° page auto dans un doc Word
    Par tarmin dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 12/05/2006, 09h14

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