VBA - Impression

Bonjour tout le monde,

Je souhaiterais pouvoir imprimer en vba. Voici le code, trouvé sur le net, que j'utilise pour la mise en page :

Application.PrintCommunication = False

Je règle les modifs puis

Application.PrintCommunication = True

Or on me dit qu'il y a un problème avec l'application ou l'objet ici :
Application.PrintCommunication = True

Je ne comprends pas que je puisse mettre =False mais pas =True.

Pourriez-vous m'aider svp?

Merci d'avance.

4 réponses

  1. Bonjour,

    J'ai eu le même problème avec un script écrit sur Excel 2010 lorsque je l'ai exécuté sur Excel 2013.

    Ma solution :
    Pour résoudre mon problème j'ai simplement retirer la ligne ".PrintQuality = 600"
    Il semblerait que l'erreur "la méthode printcommunication a échoué" survient lorsqu'une des lignes du "PageSetup" est en erreur....en l'occurence ".PrintQuality" que j'ai retiré et tout est rentré dans l'ordre
    1
    1. Je pense que ton problème provient des paramètres locaux de la machine. J'ai rencontré le problème avec un micro réglé à la française et une multi-zone d'impression
      Pour l'envoyer sous VBA, il faut utiliser un format standard (avec virgule comme séparateur de liste
      ActiveSheet.PageSetup.PrintArea = "$A$3:$H$34,$J$3:$Q$34"
      Mais quand on le relit, il revient avec un format local (avec un point virgule comme séparateur
      A$=ActiveSheet.PageSetup.PrintArea : "$A$3:$H$34;$J$3:$Q$34"

      Il me semble que lors de la réactivation de la communication avec le driver d'imprimante, il y a un échange avec renvoi de la zone d'impression pour calcul du coeficient de reduction. Si le format n'est pas correct cela plante

      Ma solution

      J'ai vidé la zone d'impression
      ActiveSheet.PageSetup.PrintArea = ""

      J'ai envoyé le Pagesetup. Cela ne semble pas le gêner de ne pas avoir de zone d'impression

      Application.PrintCommunication = False
      With ActiveSheet.PageSetup
      .LeftMargin = Application.InchesToPoints(0.5)
      .RightMargin = Application.InchesToPoints(0.75)
      .TopMargin = Application.InchesToPoints(1.5)
      .BottomMargin = Application.InchesToPoints(1)
      .HeaderMargin = Application.InchesToPoints(0.5)
      .FooterMargin = Application.InchesToPoints(0.5)
      .Orientation = xlLandscape
      End With
      Application.PrintCommunication = True

      Puis j'ai rétabli la zone d'impression
      ActiveSheet.PageSetup.PrintArea = "$A$3:$H$34,$J$3:$Q$34"

      Chez moi cela fonctionne
      1
      1. Bonjour,

        Voici le code qui j'ai trouvé et qui me semble logique. Cette proprieté marche que avec Excel 2010. J'ai le testé en Excel 2010 et ca marche. Est-ce que c'est possible que vous utilisez une version inferieure d'Excel ? Sinon vous pouvez passer directement en PageSetup, ca prendra un peu plus de temps pour le traitement. Dans tous les cas voici le code:
        
        Sub TryToPrint2()
        
        Application.PrintCommunication = False
        
        With ActiveSheet.PageSetup
        
         .LeftMargin = Application.InchesToPoints(0.5)
         .RightMargin = Application.InchesToPoints(0.75)
         .TopMargin = Application.InchesToPoints(1.5)
         .BottomMargin = Application.InchesToPoints(1)
         .HeaderMargin = Application.InchesToPoints(0.5)
         .FooterMargin = Application.InchesToPoints(0.5)
        .Orientation = xlLandscape
        
        End With
        
        Application.PrintCommunication = True
        
        ActiveSheet.PrintOut
        
        End Sub
        


        J'espere que j'ai pu vous aider.
        Cord,
        Alena
        0
        1. Bonjour Alena,

          Merci pour votre réponse.

          J'utilise effectivement Excel 2010 (mon fichier est en .xlsm). De plus le logiciel accepte Application.PrintCommunication = False mais n'accepte pas Application.PrintCommunication = True.
          Le code que vous proposez est quasiment identique au mien. Je l'ai tout de même testé et le même message d'erreur apparait.
          Si j'utilise le même code en retirant Application.PrintCommunication = False et Application.PrintCommunication = True, je constate que le fichier est ralenti le temps d'effectuer cette partie du code mais il ne tient pas compte des modifications : le document est toujours en mode portrait.

          J'ai beau me dire que le logiciel a toujours raison (et donc que la faute m'incombe) il y a par moment des choses suspectes avec Excel.
          0
        2. Hmmm..c'est vraiment bizzare..si vous pouvez me passer votre fichier avec le code , comme ca je puisse regarder directement. Voici le lien avec mon fichier et le code qui marche
          http://cjoint.com/?BHoowyNmHMH
          Cord,
          Alena
          0
        3. Votre code fonctionne correctement sur mon pc.
          Le code que j'utilise pour imprimer est imbriqué dans 6000 lignes de code.
          Je l'ai donc copié/collé dans un autre fichier pour simplifier et là il marche... Avec et sans "Application.PrintCommunication".
          En revanche dans le code original il ne marche toujours pas alors que c'est réellement du copié/collé...
          Peut être verrez-vous là où j'aurais pu faire une erreur.
          http://cjoint.com/?BHoplEbBV0e

          Merci!
          0
        4. Votre code fonctionne bien Avec et sans "Application.PrintCommunication". L'erreure alors pourrait venir d'autres codes. Bon courage!
          0
      2. 0
        1. Merci pour votre soutien.

          J'ai testé le code en exemple. Quand je rajoute .orientation = xlLandscape à cet exemple, le même problème revient à savoir un message d'erreur indiquant "La méthode 'Printcommunication' de l'objet '_Application' a échoué" .

          Auriez-vous un élément de réponse concernant cette erreur?
          0