Comment imprimer des feuilles masquées dans le classeur ?

sekouausud -  
 sekouausud -
Bonjour,

J'ai dans mon classeur 60 feuilles de même format mais masquées (1 feuille correspond à 1 page) et je peux afficher chacune de ces feuilles à partir de plusieurs boutons insérés dans 1 feuille précise du classeur, exemple, la feuille "WS". Pour le moment, si je veux imprimer 1 de ces feuilles masquées , la feuil "A" par exemple, je clic sur un bouton correspondant de feuil "WS" pour afficher cette feuil "A" avant de l'imprimer.
Sur chaque page à imprimer il y a un bouton "Retour" pour la fermer après impression et retourner à la feuille "WS" de départ où se trouvent les boutons sur lesquels je clic pour ouvrir ces feuilles masquées.
Je me suis rendu compte que cette façon de faire est fastidieuse pour imprimer les 60 pages.

Alors je demande s'il y a une solution pour imprimer en boucle une partie ou toutes ces 60 pages de feuilles masquées à partir d'un seul bouton inséré quelque part dans le classeur ou dans la feuille "WS".
Merci d'avance à toute la communauté de CCM.

5 réponses

  1. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    Bonjour,

    Il faut effectivement faire une boucle sur les feuilles, les afficher puis imprimer et les masquer comme ceci :
    Public Sub imprime()
    Dim feu As Worksheet
    For Each feu In ActiveWorkbook.Sheets
        If feu.Name <> "WS" Then
            feu.Visible = xlSheetVisible
            feu.PrintOut
            feu.Visible = xlSheetHidden
        End If
    Next feu
    End Sub
    
    0
    1. sekouausud
       
      Bonjour,
      Vous m'excusez pour le retard par rapport à ma réaction.
      J'ai essayé votre solution mais toutes toutes les feuilles et toutes les pages du classeur ont été imprimées avec 1 bug n° 1004 : la méthode "visible" de l'objet "worksheet" a échoué
      Je précise :
      - les feuil à imprimer (60 au total) se nomment "NevalA1" jusqu' à "NevalA60";
      - j'ai affecté à chacune de ces 60 feuil 2 macros (écrites automatiquement par la machine après lancement de création de macros) : Pour la feuil "NevalA59", la macro A qui permet de l'afficher à partir de la feuil "SevalA" est écrite comme suit:
      Sub macroA
      Sheets("Neval59").Visible = True
      Sheets("NevalA59).Select
      Range("E6").Select
      End Sub.
      Pour revenir à "SevalA", il y a la macro B que la machine a écrite comme suit :
      Sub macroB
      Sheets("Neval59").Select
      ActiveWindow.SelectedSheets.Visible = False
      Sheets("NevalA").Selec
      Range("A1").Select
      End Sub.

      Cordialement
      0
  2. sekouausud
     
    Bonjour,
    Vous m'excusez pour le retard par rapport à ma réaction.
    J'ai essayé votre solution mais toutes toutes les feuilles et toutes les pages du classeur ont été imprimées avec 1 bug n° 1004 : la méthode "visible" de l'objet "worksheet" a échoué
    Je précise :
    - les feuil à imprimer (60 au total) se nomment "NevalA1" jusqu' à "NevalA60";
    - j'ai affecté à chacune de ces 60 feuil 2 macros (écrites automatiquement par la machine après lancement de création de macros) : Pour la feuil "NevalA59", la macro A qui permet de l'afficher à partir de la feuil "SevalA" est écrite comme suit:
    Sub macroA
    Sheets("Neval59").Visible = True
    Sheets("NevalA59).Select
    Range("E6").Select
    End Sub.
    Pour revenir à "SevalA", il y a la macro B que la machine a écrite comme suit :
    Sub macroB
    Sheets("Neval59").Select
    ActiveWindow.SelectedSheets.Visible = False
    Sheets("NevalA").Selec
    Range("A1").Select
    End Sub.

    S'il est possible d'imprimer ces feuill masquées sans même les afficher, c'est bon, je peux m'en contenter car je pourrais au besoin afficher une feuille donnée à partir des macros que j'ai déjà insérées.

    Merci
    Cordialement
    0
    1. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
       
      Bonjour,
      j'ai testé mon code qui fonctionne chez moi : la feuille qui est affichée s'appelle bien "WS" ?
      Sinon il faut remplacer par le nom réel de la feuille.
      0
    2. sekouausud > gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention  
       
      Bonsoir,
      Alors, le problème est, sans doute, mon niveau avec ma compréhension ou la clarté de mon exposé ;
      En fait, dans la solution que vous me proposez, je crois comprendre que c'est pour afficher et imprimer seulement la feuille"ws" alors que moi je souhaite afficher et imprimer plusieurs feuilles (60 au total) nommées réellement "NevalA1" à "NevalA60".
      Ce sont peut être les autres macros écrites qui empêchent la réussite de la solution à mon niveau ;
      Donc est-ce qu'il peut y avoir 1 autre option, celle qui consisterait à imprimer en boucle (sans les afficher) toutes ces 60 feuilles "NevalA1" à "NevalA60". Il y a dans le classeur d'autres feuilles non cachées et imprimables en dehors du groupes des 60.
      0
    3. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
       
      Bonsoir,

      Essaie avec ceci :
      Public Sub imprime()
      Dim feu As Worksheet
      For Each feu In ActiveWorkbook.Sheets
          If InStr(1, feu.Name, "NevalA") Then
              feu.Visible = xlSheetVisible
              feu.PrintOut
              feu.Visible = xlSheetHidden
          End If
      Next feu
      End Sub
      
      0
    4. sekouausud > gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention  
       
      Bonsoir,
      Très bien, ça marche mais, si c'est pas un souhait de plus ; est-ce que je ne pourrait pas avoir une autre macro inverse (je la lierai à 1 autre bouton à côté du bouton imprimer) pour fermer toutes les feuilles après l'impression) car toutes affichées ont été alors qu'elles étaient cachées auparavant.

      Merci d'avance, vous avez été génial.

      Cordialement
      0
    5. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
       
      Bonsoir,

      Sans doute que l'impression trop lente a bloqué le masquage.
      Pour cacher toutes ces feuilles :
      Public Sub cache_NevalA()
      Dim feu As Worksheet
      For Each feu In ActiveWorkbook.Sheets
          If InStr(1, feu.Name, "NevalA") Then
              feu.Visible = False
          End If
      Next feu
      End Sub
      0
  3. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    Bonjour,
    Cela devrait le faire ainsi :
    Public Sub cache_NevalA()
    Dim feu As Worksheet
    If MsgBox("Voulez-vous imprimer toutes les feuilles ?", vbYesNo, "Impression") = vbNo Then Exit Sub
    For Each feu In ActiveWorkbook.Sheets
        If InStr(1, feu.Name, "NevalA") Then
            feu.[A1].Activate
            feu.Visible = False
       End If
    Next feu
    End Sub
    
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      bonjour, il ne manque pas l'impression?
      0
      1. sekouausud > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Bonjour,
        Je suis perdu dans les liens me conduisant correctement au forum, c'est l'une des causes des doublons : Tous mes messages me reviennent, que faire ?
        .
        Merci à tous pour l'aide concernant le code d'impression, j'ai jubilé après avoir eu la solution mais un autre souci s'est présenté :
        Je voudrais insérer dans le code d'impression une condition pour que la machine n'imprime (toujours en boucle) seulement les feuilles dont la valeur en C20 est supérieure à 0, je cherche par procédé à économiser l'encre et les feuilles car j'ai pas besoin de pages dont la valeur en C20 est égale à 0.
        Je rappelle que toutes les feuilles ont la même disposition et 1 feuille compte 1 page.
        Merci d'avance
        0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. sekouausud
     
    Bonjour,
    Vous avez raison, c'est désagréable d'avoir des discussion en doublon, mais je compte sur la compréhension de tous car je suis limité en informatique et la lenteur associée à l'instabilité de la connexion ne me facilite pas la tâche.
    Merci pour l'aide , j'ai jubilé après avoir eu la solution mais un autre souci s'est présenté :
    Je voudrais insérer dans le code d'impression une condition pour que la machine n'imprime (toujours en boucle) seulement les feuilles dont la valeur en C20 est supérieure à 0, je cherche par procédé à économiser l'encre et les feuilles car j'ai pas besoin de pages dont la valeur en C20 est égale à 0.
    Je rappelle que toutes les feuilles ont la même disposition et 1 feuille compte 1 page.
    Merci d'avance
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      bonjour, si tu as utilisé le code proposé qui contient
      If InStr(1, feu.Name, "NevalA") Then
      , il te suffit de changer cela en:
      If InStr(1, feu.Name, "NevalA") and feu.Cells(3,20) > 0 Then
      0
    2. sekouausud > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
       
      Bonjour,
      Je n'ai aucune réaction après le lancement de l'impression. J'espère que cela n'est pas lié au verrouillage des feuilles à imprimer mais avant la condition sur la valeur de C20 le code avait marché.
      Le nouveau code est le suivant, sauf erreur de ma part.

      Sub imprime()
      Dim feu As Worksheet
      If MsgBox("ATTENTION, Etes-vous sur de vouloir imprimer TOUS les relevés ?", vbYesNo + vbCritical + vbDefaultButton2, "Impression") = vbNo Then Exit Sub
      For Each feu In ActiveWorkbook.Sheets
      If InStr(1, feu.Name, "NevalA") And feu.Cells(3, 20) > 0 Then
      feu.Visible = xlSheetVisible
      feu.PrintOut
      feu.Visible = xlSheetHidden
      End If
      Next feu
      End Sub

      Merci beaucoup
      0
    3. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      Que contient C20, peux-tu donner des exemples?
      0
    4. sekouausud > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
       
      C20 contient le total des points obtenus : "0,05", "11", "192, 5", etc. C'est une formule qui a renvoyé ces valeur dans C20.

      Merci à vous
      0
    5. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      il faut Cells(20,3), pas (3,20)!
      If InStr(1, feu.Name, "NevalA") And feu.Cells(20, 3) > 0 Then
      0