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
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
A voir également:
- Impressions multiples en vba
- Vba attendre 1 seconde ✓ - Forum VB / VBA
- Vba récupérer valeur cellule ✓ - Forum VB / VBA
- Mkdir vba ✓ - Forum VB / VBA
- Excel compter cellule couleur sans vba - Guide
- Vba range avec variable ✓ - Forum VB / VBA
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
21 mars 2010 à 00:24
Bonsoir,
Une proposition que je n'ai pu tester (essaie d'abord sur un classeur avec 2-3 onglet) :
eric
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
Bonjour,
Une macro enregistrée peu faire l'affaire sous condition que les feuilles ne changent pas nom.
Une macro enregistrée peu faire l'affaire sous condition que les feuilles ne changent pas nom.
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
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
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
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
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
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
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
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
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
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
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.......
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
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
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
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
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
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
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
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
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
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
22 mars 2010 à 21:53
Un exemple :
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
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
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
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
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
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
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...
Qu'est-ce qui distingue les onglets à imprimer des autres ? Excel n'a aucun don divinatoire...
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
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
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
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
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 :
code du 2ème bouton :
.....
etc
code général appelé par les boutons :
(donc 1 seul code à modifier pour tous les boutons en cas d'évol)
eric
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
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
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
Merci pour l'écoute et la disponibilité dont tu as fait preuve.
MERCI, MERCI, MERCI
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
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
Merci Eric,
Vraiment super ce site