Impressions multiples en vba

Résolu
yapluka Messages postés 50 Statut Membre -  
yapluka Messages postés 50 Statut Membre -
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

  1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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
  2. Migou
     
    Bonjour,

    Une macro enregistrée peu faire l'affaire sous condition que les feuilles ne changent pas nom.
    0
  3. yapluka Messages postés 50 Statut Membre
     
    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
  4. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. yapluka Messages postés 50 Statut Membre
     
    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
  7. yapluka Messages postés 50 Statut Membre
     
    A moins que ce soit parce que je n'ai pas d'imprimante et ça je le verrais demain au boulot.......
    0
  8. yapluka Messages postés 50 Statut Membre
     
    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
    1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      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
  9. yapluka Messages postés 50 Statut Membre
     
    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
  10. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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
  11. yapluka Messages postés 50 Statut Membre
     
    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
    1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      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
  12. yapluka Messages postés 50 Statut Membre
     
    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
  13. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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
    1. yapluka Messages postés 50 Statut Membre
       
      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
  14. yapluka Messages postés 50 Statut Membre
     
    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