VBA - Impression

Henri -  
 Fybras -
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. BARET-Ch Messages postés 1 Statut Membre 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
  2. Fybras
     
    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
  3. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    0
    1. Henri
       
      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
  4. alena20
     
    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. Henri
       
      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. alena20
       
      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. Henri
       
      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. alena20
       
      Votre code fonctionne bien Avec et sans "Application.PrintCommunication". L'erreure alors pourrait venir d'autres codes. Bon courage!
      0