OVH Cloud OVH Cloud

macro complète d'impression

9 réponses
Avatar
lsh
Bonjour à tous,

Je cherche un macro me permettant d'imprimer à partir d'un classeur excel
certaines feuilles d'un classeur excel externe dans un ordre où je donne le
nom de feuilles. Mais je ne voudrai pas que ce calsseur externe s'ouvre ou
s'active à l'écran
Avec le choix de la mise en page, je crois que c before.print

J'ai trouvé ce 2 macros qui pourraient correspondre :

Private Sub le_marche()
With CreateObject(Class:="Excel.Application")
.Documents.Open("C:/mondossier/le_fichier .xls").PrintOut
.quit
End With
End Sub

Private Sub CommandButton1_Click()
Sheets(Array("feuille1", "feuille2")).Select
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
Sheets("Annexe 1").Select
End Sub

merci d'avance de votre aide

9 réponses

Avatar
michdenis
Bonjour lsh,

Tu copies le script suivant dans l'application "notePad"
Tu enregistres sur le bureau le document. Assure-toi
que le nom du fichier ait une extension .vbs à l'enregistrement.

Dans le script : indique correctement le fichier à imprimer
et le nom de la macro "imprimer" de ton
fichier à imprimer que la procédure doit
lancer pour l'impression.
La macro doit être dans un module Standard... sinon
tu dois ajouter le nom du module devant le nom de la procédure
Feuil1.Imprimer

Si tu double-cliques sur le fichier, tu vas lancer l'impression.

'-----------------------------
Dim Xl
Dim Wk
Set Xl = WScript.CreateObject("EXCEL.application")
Xl.Visible = False
Set Wk = Xl.Workbooks.Open("c:FichieràImprimer.xls")
Xl.Run "Imprimer"
Wk.Close
Xl.Quit
Set Xl = Nothing
'-----------------------------

Est-ce que cela répond à ton besoin ?


Salutations!


"lsh" a écrit dans le message de news:
Bonjour à tous,

Je cherche un macro me permettant d'imprimer à partir d'un classeur excel
certaines feuilles d'un classeur excel externe dans un ordre où je donne le
nom de feuilles. Mais je ne voudrai pas que ce calsseur externe s'ouvre ou
s'active à l'écran
Avec le choix de la mise en page, je crois que c before.print

J'ai trouvé ce 2 macros qui pourraient correspondre :

Private Sub le_marche()
With CreateObject(Class:="Excel.Application")
.Documents.Open("C:/mondossier/le_fichier .xls").PrintOut
.quit
End With
End Sub

Private Sub CommandButton1_Click()
Sheets(Array("feuille1", "feuille2")).Select
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
Sheets("Annexe 1").Select
End Sub

merci d'avance de votre aide
Avatar
lsh
salut, merci de ta réponse elle est très instructive et pourra me servir,
néamoins ce que je voudrai faire ( je me suis peut etre mal exprimé) c'est
que sur mon classeur 1 (menu général, sorte de tableau de bord) j'ai des
boutons qui ouvrent différents classeurs (2,3,4) externes.

Je voudrai qu'à partir de ce menu général je puisse imprimer ces classeurs
soit tous d'un coup avec un seul bouton, ainsi que d'autre bouton pour
imprimer un classeur choisi. Et ce sans etre obligé d'ouvir ceux-ci

C'ets pour cette raison que je pensai que la macro pouvais ressembler à
celle que que j'avai mise ci-desous.

cordialement
Avatar
michdenis
Essaie quelque chose comme ceci :

Attache cette macro "LancerImpressionau" bouton de commande
qui lanera l'impression.

Ne pas oublier d'adapter le nom du fichier et le nom de la macro
dans la procédure.

'-------------------------------
Sub LancerImpression()

Dim Xl As New Excel.Application
Dim Wk As Workbook
Dim LaMacro As String

'Imprimer = Nom de la macro servant à imprimer
' le classeur.
'Cette macro est réputée être écrite dans un
'module standard...

'Après tes tests, lorsque tout fonctionnera
'tu affectes False à la propriét visible -> rien voir
Xl.Visible = True
Set Wk = Xl.Workbooks.Open("c:Classeur1.xls")
LaMacro = "'" & Wk.Name & "'!Imprimer"
Application.Run LaMacro
Wk.Close False
Xl.Quit
Set Wk = Nothing: Set Xl = Nothing
End Sub


Cette macro doit être dans un module standard de ton
fichier que tu veux imprimer
'--------------------------------
Sub Imprimer()

Dim Arr As Variant
'Définir les feuilles à imprimer

Arr = Array("Feuil1", "Feuil3")
Sheets(Arr).Select
For Each Sh In ActiveWindow.SelectedSheets
Sh.PrintOut
Next
Sheets(Arr(1)).Select
End Sub
'--------------------------------


Salutations!




"lsh" a écrit dans le message de news:
salut, merci de ta réponse elle est très instructive et pourra me servir,
néamoins ce que je voudrai faire ( je me suis peut etre mal exprimé) c'est
que sur mon classeur 1 (menu général, sorte de tableau de bord) j'ai des
boutons qui ouvrent différents classeurs (2,3,4) externes.

Je voudrai qu'à partir de ce menu général je puisse imprimer ces classeurs
soit tous d'un coup avec un seul bouton, ainsi que d'autre bouton pour
imprimer un classeur choisi. Et ce sans etre obligé d'ouvir ceux-ci

C'ets pour cette raison que je pensai que la macro pouvais ressembler à
celle que que j'avai mise ci-desous.

cordialement
Avatar
lsh
salut et merci pour ta réponse

j'ai suivi à la letre tes consigne et voici ce qui se passe .

lorsque j'exécute la macro imprimer placée dans les les dossier cibles pas
de problème ça s'imprime.

Par contre lorsque j'écute la macro maitre ça me met pour un fichier:
la méthode "run" de l'objet _application à échoué alors que j'ai vérifié la
cible et c'est bien le bon fichier

Et aussi pour un autre classeur erreur d'éxécution 9 l'indice n'appartient
pas à la sélécetion.
Faut il déterminer des plages . Car j'ai défini un zone d'impression
manuellement ainsi que le fait que je veuille un ajustement 1 page sur 1

je regarde dans l'aide mais rien y fait, je bloque.

L'autre élement c'est que
Avatar
lsh
tdésolé ça met porpose de déboguer cete ligne

Sheets(Arr).Select
Avatar
michdenis
Bonjour lsh,


C'est à toi d'adapter les macros.

| Sheets(Arr).Select

Le tableau "Arr" contient 2 feuilles dans la macro que je t'ai soumise "Feuil1" et "Feuil3".
Ce n'est qu'un exemple...Quelle est le nom de la feuille ou des feuilles que tu veux imprimer...
dudit classeur ? Je n'en ai aucune idée !

Le copier-coller c'est bien, mais il faut prendre quand même un peu de temps pour
essayer de comprendre comment fonctionne les macros et en cas de besoin, poser
une ou des questions additionnelles.


Salutations!




"lsh" a écrit dans le message de news:
tdésolé ça met porpose de déboguer cete ligne

Sheets(Arr).Select
Avatar
lsh
rebonjour,

merci de ton aide, je partage exctement lameme opinion que toi concernant
les demande d'aide. Je ne pose pas des question juste ds un but de faire
ttravailler les autres à ma place et j'ai horreur de ne pas comprendre, aussi
en tant que newbies je me suis plus à décortiquer et comprndre le
fonctionnement de ta macro.
J'avais d'ailleurs bien compris et changé le nom de mes feuilles mais
malheureusement il y a un bug sans que je comprenne d'ou cela vient enfn je
crois déceler.
En fait lors de l'exe lancer impression le classeur externe se lance mais
j'i un pop qui me dit que le classeur contient des liaisopns qui ne peuvent
etr mises à jour.

Je me vois donc proposer soit de cliquer sur continuer et la rien ne s'opère
et on retrouve l'erreur 9.
Soit je chosit de modifer les liaisons. En cliquant dessus je vois le lien
avec mon propre classeur et il est ok. De plus l'invite commande est censé
mettre à jour en auto ss rien demander. Je chosi donc fermer et ça ne passe
pas, retour à la case départ.
Le pb est donc lié a cette mise en jour qui stoppe la procédure.
Avatar
michdenis
Bonjour Lsh,

Essaie cette procédure, elle désactive la mise à jour des liens externes
en passant l'application Excel en mode : Calcul manuel.

'------------------------------------------
Sub LancerImpression()

Dim Xl As New Excel.Application
Dim Wk As Workbook, W As Workbook
Dim LaMacro As String

'Imprimer = Nom de la macro servant à imprimer
' le classeur.
'Cette macro est réputée être écrite dans un
'module standard...

'Après tes tests, lorsque tout fonctionnera
'tu affectes False à la propriét visible -> rien voir
Xl.Visible = True
Xl.Workbooks.Add
Xl.Calculation = xlCalculationManual
Set Wk = Xl.Workbooks.Open("c:Classeur1.xls")
LaMacro = "'" & Wk.Name & "'!Imprimer"
Application.Run LaMacro
Xl.Calculation = xlCalculationAutomatic
For Each W In Xl.Workbooks
Wk.Close False
Next
Xl.Quit
Set Wk = Nothing: Set Xl = Nothing

End Sub
'------------------------------------------


Salutations!



"lsh" a écrit dans le message de news:
rebonjour,

merci de ton aide, je partage exctement lameme opinion que toi concernant
les demande d'aide. Je ne pose pas des question juste ds un but de faire
ttravailler les autres à ma place et j'ai horreur de ne pas comprendre, aussi
en tant que newbies je me suis plus à décortiquer et comprndre le
fonctionnement de ta macro.
J'avais d'ailleurs bien compris et changé le nom de mes feuilles mais
malheureusement il y a un bug sans que je comprenne d'ou cela vient enfn je
crois déceler.
En fait lors de l'exe lancer impression le classeur externe se lance mais
j'i un pop qui me dit que le classeur contient des liaisopns qui ne peuvent
etr mises à jour.

Je me vois donc proposer soit de cliquer sur continuer et la rien ne s'opère
et on retrouve l'erreur 9.
Soit je chosit de modifer les liaisons. En cliquant dessus je vois le lien
avec mon propre classeur et il est ok. De plus l'invite commande est censé
mettre à jour en auto ss rien demander. Je chosi donc fermer et ça ne passe
pas, retour à la case départ.
Le pb est donc lié a cette mise en jour qui stoppe la procédure.
Avatar
lsh
salut, je comprendrai que tu en ai marre de m'aider. J'ai parcouru le forum
pour connaitre ce pb de mise à jour des liaisons et j'ai également paramétré
le classeur pour que la mise se fasse en auto.

Le pb avcec la macro imprimer se situe sur cette ligne Sheets(Arr).Select
j'ai essayé en masquatn démasquant les onglet mais rien n'y fait.

Crois tu que je doive mettre un script comme suis à la place?
Sub imprimer()

Sheets("Fevrier").Select
Application.Run "Tableaudesallotements.xls!ImpTA"
End Sub

J'ai testé c passé mais le pb c'est que le classeur en question ne se ferme
pas à l'issue et j'ai au moin 10 feuille du classeur maitre qui s'impriment

Je suis a bout j'ai tt essayé