Impressions multiples en vba

Résolu/Fermé
yapluka Messages postés 49 Date d'inscription mardi 30 octobre 2007 Statut Membre Dernière intervention 18 septembre 2011 - 20 mars 2010 à 08:13
yapluka Messages postés 49 Date d'inscription mardi 30 octobre 2007 Statut Membre Dernière intervention 18 septembre 2011 - 24 mars 2010 à 05:22
Bonjour
je ne connais pas beaucoup le vba, mais je crois que c'est la seule façon de réaliser ce que je veux faire; je m'explique:

Un classeur Excel de 50 feuilles chacune nommée et possédant 5 pages à imprimer.

Je désire par exemple:

A partir d'un bouton, imprimer que la page 1 de toutes les feuilles Excel du classeur.
A partir d'un bouton, imprimer que la page 2 de toutes les feuilles Excel du classeur.
A partir d'un bouton, imprimer que la page 3 de toutes les feuilles Excel du classeur.
A partir d'un bouton, imprimer que la page 4 de toutes les feuilles Excel du classeur.
A partir d'un bouton, imprimer que la page 5 de toutes les feuilles Excel du classeur.

en fait comment je peux écrire ces 5 macros ? En VBA sera le mieux je pense car trop de manip autrement. et là j'ai besoin d'aide.

merci pour votre aide
Cordialement

13 réponses

eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 239
21 mars 2010 à 00:24
Bonsoir,

Une proposition que je n'ai pu tester (essaie d'abord sur un classeur avec 2-3 onglet) :
Sub Imprim()
    Dim ws As Worksheet, p As Long
    p = CInt(InputBox("Imprimer la page : ", "Imprimer toutes les feuilles du classeur"))
    If p <= 5 And p > 0 Then
        For Each ws In Worksheets
            ws.Activate
            ActiveWindow.SelectedSheets.PrintOut From:=p, To:=p, Copies:=1, Collate:=True
        Next ws
    End If
End Sub

eric
2
Bonjour,

Une macro enregistrée peu faire l'affaire sous condition que les feuilles ne changent pas nom.
0
yapluka Messages postés 49 Date d'inscription mardi 30 octobre 2007 Statut Membre Dernière intervention 18 septembre 2011
21 mars 2010 à 08:43
merci pour votre réponse, j'essaie l'impression au travail demain.
En fait j'ai 10 pages par feuille, j'ai donc changé la formule comme ça:
Sub Imprim()
Dim ws As Worksheet, p As Long
p = CInt(InputBox("Imprimer la page : ", "Imprimer toutes les feuilles du classeur"))
If p <= 10 And p > 0 Then
For Each ws In Worksheets
ws.Activate
ActiveWindow.SelectedSheets.PrintOut From:=p, To:=p, Copies:=1, Collate:=True
Next ws
End If
End Sub

Mais il me vient une idée:
Garder votre macro d'impression avec choix des feuilles à imprimer et:
faire 10 macros, une pour chaque feuille soit:
Macro 1 imprime toutes les pages 1 de toutes les feuilles du classeur
macro 2 imprime toutes les pages 2 de toutes les feuilles du classeur Ect....
Ce qui permettrait à mes collègues d'imprimer facilement la feuille qu'il désire sans avoir à mémoriser la page du fait de la nomination du bouton de la macro.
Comment écrire la macro1?
ensuite je pourrais écrire les suivantes.......
merci
0
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 239
21 mars 2010 à 10:03
Bonjour,

Essaie comme ça :
Sub Imprim1
Imprim(1)
end sub
Sub Imprim2
Imprim(2)
end sub

Sub Imprim(p)
Dim ws As Worksheet
application.screenupdating=false
For Each ws In Worksheets
ws.Activate
ActiveWindow.SelectedSheets.PrintOut From:=p, To:=p, Copies:=1, Collate:=True
Next ws
worksheets("Feuil1").activate
application.screenupdating=true
End Sub

Et pour faire plus propre je réactive à la fin la feuille où il y a les boutons, remplaceb Feuil1 par son vrai nom.

eric
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
yapluka Messages postés 49 Date d'inscription mardi 30 octobre 2007 Statut Membre Dernière intervention 18 septembre 2011
Modifié par yapluka le 21/03/2010 à 20:30
Encore moi, je fais une erreur ou il y a quelque chose qui ne vas pas:

Première macro pour imprimer la page 1 de toutes les feuilles:

Sub Impression_Semestre_1()
Dim ws As Worksheet
Application.ScreenUpdating = False
For Each ws In Worksheets
ws.Activate
ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1, Collate:=True
Next ws
Worksheets("IMPRESSIONS").Activate
Application.ScreenUpdating = True
End Sub

2ème macro pour imprimer la page 2 de toutes les feuilles:
:
Sub Impression_Semestre_2()
Dim ws As Worksheet
Application.ScreenUpdating = False
For Each ws In Worksheets
ws.Activate
ActiveWindow.SelectedSheets.PrintOut From:=2, To:=2, Copies:=1, Collate:=True
Next ws
Worksheets("IMPRESSIONS").Activate
Application.ScreenUpdating = True
End Sub

Pour les deux cas : erreur d'exécution '1004' La zone soulignnée est fluotée en jaune lorsue je fais débogage
Ou est le problème?
Merci encore
0
yapluka Messages postés 49 Date d'inscription mardi 30 octobre 2007 Statut Membre Dernière intervention 18 septembre 2011
21 mars 2010 à 20:32
A moins que ce soit parce que je n'ai pas d'imprimante et ça je le verrais demain au boulot.......
0
yapluka Messages postés 49 Date d'inscription mardi 30 octobre 2007 Statut Membre Dernière intervention 18 septembre 2011
22 mars 2010 à 19:33
MERCI, MERCI, MERCI, ça marche super bien.......
Cela imprime comme je le souhaitais.
Merci surtout à ERIIC pour ces propositions.

Juste une petite demande complémentaire afin de faire des économies de papier:

Comment puis je ajuster le nombres de feuilles à imprimer
pour l'instant ça imprime toutes les feuilles(51), comment faire pour choisir le nombre de feuilles (46 par exemple)

je ne veux pas abuser mais........

Le VBA me plait beaucoup, quel bouquin acheter, ou puis je apprendre le VBA, l'idée d'être autonome me plairait.....
merci encore pour tout
0
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 239
22 mars 2010 à 20:19
Bonsoir,

Merci pour le retour.
Comment puis je ajuster le nombres de feuilles à imprimer
Par feuilles il faut entendre onglets je suppose ?
Si oui il faut être plus précis.
Les 46 dernier ? 46 premiers ? 46 est à demander ?
Ou ceux dont le nom commence (ou non) par telle chaine ?
Ou bien les onglets sélectionnés ?
Ou .... ???

eric
0
yapluka Messages postés 49 Date d'inscription mardi 30 octobre 2007 Statut Membre Dernière intervention 18 septembre 2011
22 mars 2010 à 20:29
le classeur contient 51 onglets, comment imprimer les 46 premiers par exemple, j'aimerai pouvoir ajuster ce nombre d'onglet à imprimer.
Ou apprendre le vba? ça m' interresse +++, Ecell, les formules je me débrouille bien, les possibilités qu'offre le vba me permettrait de faire encore plus d'outils......

merci
0
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 239
22 mars 2010 à 21:53
Un exemple :
Sub Imprim()
    Dim i As Long
    Application.ScreenUpdating = False
    For i = 1 To InputBox("Nombre d'onglet à imprimer ?")
        Worksheets(i).Activate
    Next i
    ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1, Collate:=True
    Worksheets("Feuil1").Activate
    Application.ScreenUpdating = True
End Sub

Content que tu aies chopé le virus vba ;-)
Pour les livres le mieux est d'en feuilleter plusieurs pour faire ton choix.
Il faut éviter les pavés de 3 kg qu'on hésite à consulter...
Celui que j'utilisais est 'VBA pour excel 2003, le guide complet' chez micro application mais je ne sais pas s'il est toujours édité.
Actuellement tu trouveras plutôt des éditions pour excel 2007, tu peux prendre, il y aura tout 2003 plus les nouveautés.
Et quand tu débutes (et même ensuite) ce qui aide bien c'est l'enregistreur de macro. Pour trouver les fonctions, méthodes et propriétés c'est idéal.
Pour le code généré il y a beaucoup de trucs inutiles à enlever, donc pas forcément à prendre en exemple...

eric
0
yapluka Messages postés 49 Date d'inscription mardi 30 octobre 2007 Statut Membre Dernière intervention 18 septembre 2011
23 mars 2010 à 06:59
Merci pour tous ces conseils et l'aide apportée.
j'ai donc réalisé 10 macros comme si-dessous:

Sub Impression_Semestre_1()
Dim ws As Worksheet
Application.ScreenUpdating = False
For Each ws In Worksheets
ws.Activate
ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1, Collate:=True
Next ws
Worksheets("IMPRESSIONS").Activate
Application.ScreenUpdating = True
End Sub

C'est dans ces macros que j'aimerai pouvoir choisir le nombre d'onglet.
Afin de rendre encore plus simple, j'aimerai paramétrer dans chaque macros le nombre d'onglet sans msgbox.
En fait chaque année le classeur sera différent, cette année seul 46 onglets sont utilisés. l'année prochaine peut être 50......
c'est un paramétrage par défaut afin de n'imprimer que ce qui est nécessaire, pour mes collègues, un clic sur la macro et c'est tout...

En résumé et en espérant être clair: comment ajouter à la formule ci-dessus l'impression des 46 premiers onglets.

Je vais aller acheter le livre, je ne comprend pas encore ce que signifie tous ces termes dans les formules.....

merci encore........

c'est
0
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 239
23 mars 2010 à 07:53
Je te ramène à mon post de 20:19 : soit plus précis.
Qu'est-ce qui distingue les onglets à imprimer des autres ? Excel n'a aucun don divinatoire...
0
yapluka Messages postés 49 Date d'inscription mardi 30 octobre 2007 Statut Membre Dernière intervention 18 septembre 2011
Modifié par yapluka le 23/03/2010 à 21:35
Bonsoir
afin de préciser ce que je veux faire:
En fait j'aimerais ajouter à la formule suivante qui imprime toutes pages du classeur

Sub Impression_Semestre_1()
Dim ws As Worksheet
Application.ScreenUpdating = False
For Each ws In Worksheets
ws.Activate
ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1, Collate:=True
Next ws
Worksheets("IMPRESSIONS").Activate
Application.ScreenUpdating = True
End Sub

la possibilité d''imprimer un nombre d'onglets définis par moi même sans boite de dialogue, que ce soit un paramétrage par défaut soit les 46 premiers onglets sur les 51 présents pour cette année.
Ta dernière formule :
Dim i As Long
Application.ScreenUpdating = False
For i = 1 To InputBox("Nombre d'onglet à imprimer ?")
Worksheets(i).Activate
Next i
ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1, Collate:=True
Worksheets("Feuil1").Activate
Application.ScreenUpdating = True
End Sub

permet de le faire en le choisissant par l'intermédiaire d'une boite de dialogue.
j'aimerais paramétrer les macos moi même par défaut au nombre de pages que j'ai choisi en lien avec le nombre d'étudiants de la promotion sans boite de dialogue afin que mes collègues n'aient rien à faire lorsqu'elle veulent imprimer un semestre.

Mon application concerne la gestion de promotions d'étudiants qui sont sur 3 ans. Chaque nouvelle promotion concerne un nombre d'étudiants qui est variable. Je désirerais paramétrer ces macros au début de chaque promotion. Un classeur dure 3 ans. J'ai prévu ces classeurs avec un supplément d'onglets au cas ou les étudiants seraient plus important).

Donc avec la formule actuelle, cette dernière imprime aussi les onglets mis en attente au cas ou des promotions seraient plus importante en nombre d'étudiants.

pour résumer, je voudrais mixer tes deux formules mais je n'ai pas encore assez de connaissances......
en espérant avoir été plus clair, mais c'est pas toujours évident d'expliquer quand on est dans son application.
Merci pour ta patience et l'aide apportée

Jean-Yves
0
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 239
Modifié par eriiic le 23/03/2010 à 23:56
Bonsoir,

Je ne pensais pas que tu voulais que ce soit codé en dur...
Mais on aurait tout aussi bien pu prévoir que ne s'impriment que les feuilles qui commencent par 'E_'. Dans ce cas il suffit de renommer la feuille pour qu'elle soit prise en compte, même si tu es en congé 1 mois...

code du 1er bouton :
Sub Impression_Semestre_1()       
  Imprim(1) ' 1 est passé en paramètre pour imprimer la page 1      
end sub


code du 2ème bouton :
Sub Impression_Semestre_2()       
  Imprim(2) ' 2 est passé en paramètre pour imprimer la page 2      
end sub

.....
etc

code général appelé par les boutons :
(donc 1 seul code à modifier pour tous les boutons en cas d'évol)
Sub Imprim(p) 
    Dim i As Long 
    Application.ScreenUpdating = False 
    ' imprimer de la feuille 1 à 46 
    For i = 1 To 46 
        ' activer la feuille 
        Worksheets(i).Activate 
        ' imprimer la page p 
        ActiveWindow.SelectedSheets.PrintOut From:=p, To:=p, Copies:=1, Collate:=True 
    Next i 
    ' réactiver la feuille avec les boutons 
    Worksheets("Feuil1").Activate 
    Application.ScreenUpdating = True 
End Sub


eric
0
yapluka Messages postés 49 Date d'inscription mardi 30 octobre 2007 Statut Membre Dernière intervention 18 septembre 2011
Modifié par yapluka le 24/03/2010 à 05:20
Merci à toi Eric pour l'aide apportée, j'espère d'ici quelques mois avoir fait des progrés
Merci pour l'écoute et la disponibilité dont tu as fait preuve.
MERCI, MERCI, MERCI
0
yapluka Messages postés 49 Date d'inscription mardi 30 octobre 2007 Statut Membre Dernière intervention 18 septembre 2011
24 mars 2010 à 05:22
Je marque ce post résolu, J'ai encore une question concernant le VBA mais c'est un autre problème et j'ouvre donc un autre post.
Merci Eric,
Vraiment super ce site
0