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 :

Impression Word bloquée lors d'une macro d'impression


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 21
    Par défaut Impression Word bloquée lors d'une macro d'impression
    Bonjour,

    J'aurais besoin de votre aide concernant le code que j'utilise pour imprimer un document Word.

    Je m'explique : je dois imprimer un document selon la langue choisie dans une liste. J'ai récupéré un code dans le même fichier qui marche très bien mais dans cette nouvelle macro, rien à faire, l'impression bloque.

    Voici le code utilisé (raccourci car plusieurs langues)

    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
     
    Sub imprimer_quickstart()
     
    Dim langue As String
    langue_quickstart = Range("'Fiche broyeur'!B14") 'cellule avec les langues via une liste
    Dim appWrd As Word.Application
    Dim docWord As Word.Document
    Dim Fichier As String
     
     
        Select Case langue_quickstart
        Case Is = "Allemand"
     
            Fichier = "S:\Service technique\Quick Start\quick start ALL.docx"
            Set appWrd = CreateObject("Word.Application") 'creation session Word
     
            appWrd.DisplayAlerts = True
            Set docWord = appWrd.Documents.Open(Fichier)
            docWord.PrintOut 'impression
            docWord.Close 'fermer le document Word
            appWrd.Quit 'fermer la seesionWord
     
     
        Case Is = "Anglais"
     
            Fichier = "S:\Service technique\Quick Start\quick start ANG.docx"
            Set appWrd = CreateObject("Word.Application") 'creation session Word
     
            appWrd.DisplayAlerts = True
            Set docWord = appWrd.Documents.Open(Fichier)
            docWord.PrintOut 'impression
            docWord.Close 'fermer le document Word
            appWrd.Quit 'fermer la seesionWord
     
        Case Is = "Espagnol"
     
            Fichier = "S:\Service technique\Quick Start\quick start ESP.docx"
            Set appWrd = CreateObject("Word.Application") 'creation session Word
     
            appWrd.DisplayAlerts = True
            Set docWord = appWrd.Documents.Open(Fichier)
            docWord.PrintOut 'impression
            docWord.Close 'fermer le document Word
            appWrd.Quit 'fermer la seesionWord
     
        Case Is = "Français"
     
            Fichier = "S:\Service technique\Quick Start\quick start FR.docx"
            Set appWrd = CreateObject("Word.Application") 'creation session Word
     
            appWrd.DisplayAlerts = True
            Set docWord = appWrd.Documents.Open(Fichier)
            docWord.PrintOut 'impression
            docWord.Close 'fermer le document Word
            appWrd.Quit 'fermer la seesionWord
     
            Case Else
        End Select
    End Sub
    Alors, je pense pas que ce soit la meilleure manière de faire, mais je suis pas très bon en VBA donc je fais avec ce qui marche (normalement ^^).

    Quand je clique sur la macro, il y a deux choses qui se passent :
    - Excel me demande d'enregistrer le document Word avant de le fermer (alors que je ne le modifie pas)
    - Quel que soit mon choix, une fenêtre apparaît avec le message "Merci de patienter quelques instants le temps que Word termine l'impression" et ce message ne disparait pas, et le document n'est pas imprimé.

    Auriez-vous une idée de l'erreur ?

    Merci d'avance !

    Cordialement,
    Romain

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2010
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 194
    Par défaut
    Bonjour,

    alors j'ai testé ton code et je ne vois pas de problème particularité car cela fonctionne chez moi mais :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim langue As String
    langue_quickstart = Range("'Fiche broyeur'!B14") 'cellule avec les langues via une liste
    Pour commencer, une variable "langue" est dimensionnée mais pas la variable "langue_quickstart" !

    De plus, par habitude de rigueur je préfère appeler un objet en ayant préalablement définit son/ses parent(s) . Et pour limiter les risques d'erreurs il est important de spécifier la propriété de l’objet que l'on veut utiliser. Donc la on est dans l’interprétation pure que peut faire le VBA lors de l’exécution car tu cumules variable non dimensionnée et pas de propriété définit !!!

    donc il est préférable de faire comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim langue_quickstart As String
    langue_quickstart = Thisworkbook.Worksheets("Fiche broyeur").Range("B14").Value 'cellule avec les langues via une liste
    D'autre part, la méthode que ton code utilise pour ouvrir une session Word est dite "Liaison anticipé" ce qui t'oblige à référencer word.
    Pour limiter les plantages liés à ce référencement et amélioré la portabilité d'un fichier il est préférable de faire de la liaison dite "Liaison tardive" qui ne demande aucun référencement à word.
    Pour ce faire c'est simple il suffit de dimensionner tes variables objets word et document word comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim appWrd As Object
    Dim docWord As Object
    Enfin, ton code est très compliqué pour juste pouvoir géré le fait que le nom du fichier français est différencié par 2 lettres(FR) à contrario des autres qui sont différenciés par 3(ALL,ANG,ESP). En utilisant 3 lettre(FRA) pour le Français plus toutes les suggestions du dessus ton code serait :

    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
    Sub imprimer_quickstart()
     
    Dim langue_quickstart As String
     
    Dim appWrd As Object
    Dim docWord As Object
    Dim Fichier As String
     
        langue_quickstart = Worksheets("Fiche broyeur").Range("B14").Value 'cellule avec les langues via une liste
        langue_quickstart = UCase(Left(langue_quickstart, 3)) 'on recupere les 3 premieres lettres et on s'assure de les passer en majuscule
     
     
        Fichier = "S:\Service technique\Quick Start\quick start " & langue_quickstart & ".docx"
     
        Set appWrd = CreateObject("Word.Application") 'creation session Word
     
        appWrd.DisplayAlerts = True 'inutile !!!
        Set docWord = appWrd.Documents.Open(Fichier)
        docWord.PrintOut 'impression
        docWord.Close False 'fermer le document Word le False sert à fermer sans enregistrer
        appWrd.Quit 'fermer la seesionWord
     
    End Sub
    Ceci étant dit, je suppose que le disque S: du chemin des fichiers à imprimer est un disque réseau. Si c'est bien le cas peut être que le problème vient plutôt de la car si tes fichiers sont gros et/ou ta connexion vers ce disque est instable cela peu engendrer des temps long voir, plantage...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 21
    Par défaut
    Merci pour votre réponse !

    C'est incroyable ce qu'on peut faire en VBA, vraiment en plus vos explications sont claires !

    Malheureusement, je ne dirais pas que ça marche pas car ça me fait exactement la même, donc c'est que comme vous l'avez indiqué ça doit venir du serveur. Je trouve ça bizarre qu'il y a une autre macro dans le fichier assez similaire avec ce que j'ai avant (j'ai vraiment copié le code et essayé de l'adapter pour ces fichiers là) et que ça marche avec celle-ci... Les différences réelles sont l'emplacement des fichiers (qui se trouvent pourtant dans la même hauteur de dossier) et que les autres word sont des words qui récupèrent des infos sur le Excel pour modifier des valeurs (dates, numéro de série etc...).

    Je sais pas si ça peut éclairer concernant ce problème, mais voilà les seules différences avec les deux codes sources...

    Si vous me dites que ça ne change rien, il faudra que je trouve une autre solution :/

    Encore merci ! J'attends encore un peu avant de le passer en résolu (même si ce n'est pas le cas) au cas où certains auraient des idées ou si je trouve quelque chose d'ici ce soir !

  4. #4
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Ton code simplifié :

    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
    Sub imprimer_quickstart()
        Dim langue As String,  Fichier As String
        Dim docWord As Word.Document
     
        langue = Range("'Fiche broyeur'!B14") 'cellule avec les langues via une liste
     
        Select Case langue
        Case "Allemand"
            Fichier = "ALL"
        Case "Anglais"
            Fichier = "ANG"
        Case "Espagnol"
            Fichier = "ESP"
        Case "Français"
            Fichier = "FR"
        Case Else
            Exit Sub
        End Select
     
        Set docWord = GetObject("S:\Service technique\Quick Start\quick start " & Fichier & ".docx")
        docWord.PrintOut
        docWord.Close SaveChanges:=wdDoNotSaveChanges
    End Sub
    Il serait possible de faire encore plus simple si tu mettais dans ton fichier Excel une table de correspondance entre la langue et l'abréviation pour le fichier.
    Pour ça, il suffirait peut-être juste de rajouter une colonne à la liste qui sert de source à ta liste déroulante.

    Pour ce qui est du problème d'impression, ça vient peut-être d'une option de PrintOut.
    Lire ça : https://docs.microsoft.com/fr-fr/off...ument.printout

Discussions similaires

  1. Afficher année/semestre lors d'une macro d'archivage
    Par arkorrigan dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 29/05/2008, 10h07
  2. Disparition sablier lors d"une macro excel
    Par dprost dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 13/12/2007, 20h00
  3. [VBA-Word] Obligation de lancer une macro avant de quitter
    Par perophron dans le forum VBA Word
    Réponses: 5
    Dernier message: 22/05/2007, 15h07
  4. Formulaire bloqué lors d'une ouverture par macro.
    Par Monsieur Peck dans le forum IHM
    Réponses: 6
    Dernier message: 16/06/2006, 17h41
  5. Réponses: 12
    Dernier message: 21/02/2006, 11h47

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