VBA - Impression

Fermé
Henri - 13 août 2012 à 10:22
 Fybras - 4 janv. 2017 à 12:41
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.

A voir également:

4 réponses

BARET-Ch Messages postés 1 Date d'inscription mercredi 24 juillet 2013 Statut Membre Dernière intervention 24 juillet 2013 1
24 juil. 2013 à 16:26
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
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
f894009 Messages postés 17233 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 29 janvier 2025 1 712
13 août 2012 à 16:37
0
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
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
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
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
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
Votre code fonctionne bien Avec et sans "Application.PrintCommunication". L'erreure alors pourrait venir d'autres codes. Bon courage!
0