Impression

Bonjour

J'ai un fichier dans lequel j'ai des feuilles sommaires et d'autres des feuilles de données. Je vaudrais être en mesure d'imprimer en une seule opérations toutes les feuilles de données (celle-ci sont placé entre feuille "début" et feuille "fin". Toutes les feuilles de données sont protégé par un mot de passe et de plus il y a des colonnes et des lignes que je ne veux pas imprimer. J'ai réussi à faire une macro pour déprotéger, masqué des colonnes, faire un aperçu avant impression, ré-afficher les colonnes et protégé la feuille, par contre je dois faire à chaque feuille. Voici ce que j'ai fait :

Sub imprimeyé()

Range("D2:E3").Select

ActiveSheet.Unprotect "yl"

Columns("D:M").Select

Selection.EntireColumn.Hidden = True

Columns("P:Q").Select

Selection.EntireColumn.Hidden = True

Columns("X:Z").Select

Selection.EntireColumn.Hidden = True

ActiveSheet.PrintPreview

Columns("d:m").Select

Selection.EntireColumn.Hidden = False

Selection.EntireColumn.Hidden = False

Columns("p:q").Select

Selection.EntireColumn.Hidden = False

Columns("x:z").Select

Selection.EntireColumn.Hidden = False

ActiveSheet.Protect "yl", True, True, True

End Sub

Quelqu'un peux m'aider à imprimer toutes mes feuilles de données en même temps ?

Merci à l'avance

Bonjour,

Je ne suis pas sûr d'avoir bien compris tes considérations entre début et fin... !

Sub imprimeyé()
    Dim Col, i%, ii%, f%
    For i = 1 To Worksheets.Count
        If Worksheets(i).Name = "début" Then Exit For
    Next i
    If i > Worksheets.Count Then
        MsgBox "Pas de feuille début !", vbCritical, "Erreur"
        Exit Sub
    End If
    For ii = i + 1 To Worksheets.Count
        If Worksheets(ii).Name = "fin" Then Exit For
    Next ii
    If ii > Worksheets.Count Then
        MsgBox "Pas de feuille fin !", vbCritical, "Erreur"
        Exit Sub
    End If
    Col = Split("D:M P:Q X:Z")
    For f = i To ii
        With Worksheets(f)
            .Unprotect "yl"
            For i = 0 To UBound(Col)
                .Columns(Col(i)).Hidden = True
            Next i
            .PrintPreview
            .Columns.Hidden = False
            .Protect "yl"
        End With
    Next f
End Sub

Cordialement.

Bonjour

Désolé de ne pas avoir été très clair. Je l'ai essayé mais cela ne fonctionne pas, en fait j'ai des feuilles sommaire et des feuilles données et c'est seulement les feuilles données que je veux imprimer, celle-ci sont nommées de 1 à 300. Peut-être que c'est plus clair maintenant

Merci beaucoup de votre aide

Tu disais :

celle-ci sont placé entre feuille "début" et feuille "fin".

Ne fournissant pas de fichier, soit tu décris la structure de ton classeur avec une précision chirurgicale ! soit tu adaptes.

Sachant que la désignation des feuilles n'est pas l'essentiel, il faut simplement que tu fasses une boucle sur les feuilles concernées...

Bonjour

Je vous joint mon fichier, car je suis vraiment débutante, alors vous seriez vraiment gentil de m'aider. Donc je veux imprimer seulement les feuilles de 1 à 20.

Merci beaucoup

5frame-test.xlsm (538.70 Ko)

Je l'ai essayé mais cela ne fonctionne pas

Tu ne t'es pas beaucoup posé de questions pour la faire fonctionner !

Je n'ai pas rien changé ! J'ai juste mis une majucule initiale à Début et Fin, tu avais dit début et fin... VBA est par défaut sensible à la casse, et tu aurais dû être alertée par les messages.

Et j'ai ajouté juste ceci :

    i = i + 1: ii = ii - 1

car tu n'avais pas clairement exprimé que Début et Fin était exclues, et dans le doute je les avais inclues. L'ajustement des 2 variables les élimine de l'impression.

A voir.

Bonjour

Merci beaucoup pour la réponse cela fonctionne très bien, j'ai juste un petit souci (que je n'avais pas pensé) sur les 20 feuilles il y en a environ la moitié que ne serai pas nécessaire d'imprimer car la cellule w66 =0 (sur chaque feuille), alors je vais continuer à chercher pour résoudre ceci. Merci beaucoup pour l'aide que tu m'a apporter et désolé pour le délai de réponse

Si on ne doit imprimer que si W66 est supérieur à 0, il suffit de mettre l'opération sous condition :

   For f = i To ii
        With Worksheets(f)
            If .Range("W66") > 0 Then
                .Unprotect "yl"
                For i = 0 To UBound(Col)
                    .Columns(Col(i)).Hidden = True
                Next i
                .PrintPreview
                .Columns.Hidden = False
                .Protect "yl"
            End If
        End With
    Next f

Cordialement.

Wow merci beaucoup c'est très gentil de me fournir la réponse tout fonctionne à merveille

Bonne continuation.

Bonjour

J'aurai encore besoin de votre aide, cette fois je voudrais masquer des lignes sous certaines condition. je vous joint mon fichier c'est plus simple pour l'explication

Encore une fois merci

Bonsoir,

Cela s'ajoute au masquage des colonnes, ou c'est une opération distincte... ?

Bonjour

oui cela s'ajoute au masquage de colonne

Merci

Bonjour,

Procédure aménagée pour intégrer masquage de lignes.

Sub imprimeyé()
    Dim Col, Lgn, i%, ii%, f%, m%
    For i = 1 To Worksheets.Count
        If Worksheets(i).Name = "Début" Then Exit For
    Next i
    If i > Worksheets.Count Then
        MsgBox "Pas de feuille Début !", vbCritical, "Erreur"
        Exit Sub
    End If
    For ii = i + 1 To Worksheets.Count
        If Worksheets(ii).Name = "Fin" Then Exit For
    Next ii
    If ii > Worksheets.Count Then
        MsgBox "Pas de feuille Fin !", vbCritical, "Erreur"
        Exit Sub
    End If
    i = i + 1: ii = ii - 1
    Col = Split("D:M P:Q X:Z")
    Lgn = Array(0, 24, 29, 33, 37, 42, 46, 50, 55, 59, 63, 0)
    m = Worksheets("Début").Range("B12"): m = Lgn(m)
    For f = i To ii
        With Worksheets(f)
            If .Range("W66") > 0 Then
                .Unprotect "yl"
                If m > 0 And CInt(Worksheets(f).Name) <= 20 Then
                    .Rows(m & ":66").Hidden = True
                End If
                For i = 0 To UBound(Col)
                    .Columns(Col(i)).Hidden = True
                Next i
                .PrintPreview
                .Columns.Hidden = False: .Rows.Hidden = False
                .Protect "yl"
            End If
        End With
    Next f
End Sub

Cordialement.

Bonjour

J'ai testé le tout dans mon vrai fichier et tout fonctionne

Un gros merci

Bonne continuation.

Rechercher des sujets similaires à "impression"