Comment imprimer des feuilles masquées dans le classeur ?

Fermé
sekouausud - 6 janv. 2017 à 19:23
 sekouausud - 8 janv. 2017 à 15:31
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.
A voir également:

5 réponses

gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
6 janv. 2017 à 22:53
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
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
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
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
7 janv. 2017 à 18:32
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
sekouausud > gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020
7 janv. 2017 à 18:57
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
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
7 janv. 2017 à 19:05
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
sekouausud > gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020
7 janv. 2017 à 19:47
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
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
7 janv. 2017 à 21:26
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
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
8 janv. 2017 à 11:38
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
yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
8 janv. 2017 à 11:40
bonjour, il ne manque pas l'impression?
0
sekouausud > yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024
8 janv. 2017 à 13:27
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
Mike-31 Messages postés 18313 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 5 073
8 janv. 2017 à 11:49
0

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

Posez votre question
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
yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
8 janv. 2017 à 13:51
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
sekouausud > yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024
8 janv. 2017 à 14:15
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
yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
8 janv. 2017 à 14:24
Que contient C20, peux-tu donner des exemples?
0
sekouausud > yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024
8 janv. 2017 à 14:32
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
yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
8 janv. 2017 à 14:51
il faut Cells(20,3), pas (3,20)!
If InStr(1, feu.Name, "NevalA") And feu.Cells(20, 3) > 0 Then
0