Microsoft 365 vba masquer lignes sur plusieurs onglets

Mwadepaname

XLDnaute Junior
Bonjour à tous,

j'essaie de convertir 3 onglets (en masquant les mêmes lignes sur chaque onglet) en pdf.
La macro convertit bien en pdf avec lignes masquées uniquement pour le 1er onglet.
Les onglets 2 et 3 ont toutes les lignes non masquées.
J'ai fait plusieurs tentatives mais sans succès.

Si quelqu'un a la solution :)

Merci et bonne journée
 

Pièces jointes

  • Planning test v1.xlsm
    144.3 KB · Affichages: 19
Solution
VB:
Sub planningPdf()
    Dim i As Integer
    Dim NbFeuilles As Integer
    Dim TabFeuilles() As String
    Const LignesMasquées = "2:2,17:25,61:70,91:99,147:154,172:265"
    Const NomFichierPDF = "C:\Users\xxx\Documents\Planning test v1.pdf"
    'Const NomFichierPDF = "H:\Téléchargements\Test.pdf"
 
    Application.ScreenUpdating = False
    NbFeuilles = ActiveWorkbook.Sheets.Count

    'Pour chaque feuille concernée, masquer les lignes
    For i = NbFeuilles - 1 To NbFeuilles - 3 Step -1
        With ThisWorkbook.Worksheets(i)
            ReDim Preserve TabFeuilles(1 To NbFeuilles - i)
            TabFeuilles(NbFeuilles - i) = .Name
            .Activate
        
            .Range(LignesMasquées).EntireRow.Hidden = True...

Dudu2

XLDnaute Barbatruc
Bonjour,
Essaie ça:
VB:
Option Explicit

Sub planningPdf()
    Dim i As Integer
    Dim NbOnglets As Integer
    Dim Rng as Range

    Application.ScreenUpdating = False
    NbOnglets = ActiveWorkbook.Sheets.Count

    'Pour chaque onglet concerné
    For i = NbOnglets - 1 To NbOnglets - 3 Step -1
        With ThisWorkbook.Worksheets(i)
            .Activate
           
            Set Rng = .Range("2:2,17:25,61:70,91:99,147:154,172:265")
            Rng.EntireRow.Hidden = True
        
            Application.PrintCommunication = False
            .PageSetup.Zoom = 55
            Application.PrintCommunication = True
        
            .ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
                "C:\Users\xxx\Documents\Planning test v1.pdf", Quality:= _
                xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
                OpenAfterPublish:=True
            
            Rng.EntireRow.Hidden = False
        End With
    Next i

    Application.ScreenUpdating = True
End Sub
 
Dernière édition:

Dudu2

XLDnaute Barbatruc
cette fois c'est l'onglet 3 qui a les lignes masquées
Ça ce n'est pas possible. De toutes façons tu ne peux pas le voir puisque l'Application.ScreenUpdating = False tout le temps de la manip et les lignes sont toujours démasquées avant la fin de la manip.

c'est le seul onglet convertit en pdf
C'est normal, le nom de fichier est le même pour tous les onglets, donc il est écrasé à chaque fois.
Modifies le nom de fichier en conséquence, par exemple: "C:\Users\xxx\Documents\Planning test v1-" & i & ".pdf".
 

Jacky67

XLDnaute Barbatruc
Bonjour et merci pour votre réponse.
Je viens d'essayer et cette fois c'est l'onglet 3 qui a les lignes masquées et c'est le seul onglet convertit en pdf.
Bonjour à tous,
Essaye comme ceci
VB:
Sub planningPdf()
    Application.ScreenUpdating = False
    Dim Sh As Worksheet
    For Each Sh In ThisWorkbook.Worksheets
        If Sh.Name <> "Notes" Then
            Sh.Range("17:25,61:70,91:99,147:154,172:265").EntireRow.Hidden = True
            Sh.ExportAsFixedFormat Type:=xlTypePDF, Filename:="C:\Users\xxx\Documents\Planning test du " & Sh.Name & ".pdf"
            Sh.Rows("1:280").Hidden = False
        End If
    Next
End Sub
 
Dernière édition:

Mwadepaname

XLDnaute Junior
Ça ce n'est pas possible. De toutes façons tu ne peux pas le voir puisque l'Application.ScreenUpdating = False tout le temps de la manip et les lignes sont toujours démasquées avant la fin de la manip.
Je me suis mal exprimé, c'est l'onglet 3 qui est en pdf avec les lignes masquées.
Je n'ai pas les autres onglets

C'est normal, le nom de fichier est le même pour tous les onglets, donc il est écrasé à chaque fois.
Modifies le nom de fichier en conséquence, par exemple: "C:\Users\xxx\Documents\Planning test v1-" & i & ".pdf".
Effectivement, c'est le seul qui s'affiche en pdf car il écrase les autres.

Le truc, c'est que je voulais les 3 onglets dans le même pdf car j'envoi le planning toutes les 3 semaines. :/
 

Mwadepaname

XLDnaute Junior
Bonjour à tous,
Essaye comme ceci
VB:
Sub planningPdf()
    Application.ScreenUpdating = False
    Dim Sh As Worksheet
    For Each Sh In ThisWorkbook.Worksheets
        If Sh.Name <> "Notes" Then
            Sh.Range("17:25,61:70,91:99,147:154,172:265").EntireRow.Hidden = True
            Sh.ExportAsFixedFormat Type:=xlTypePDF, Filename:="C:\Users\xxx\Documents\Planning test du " & Sh.Name & ".pdf"
            Sh.Rows("1:280").Hidden = False
        End If
    Next
End Sub
Ça fonctionne :) seulement il me sauvegarde tous mes onglets depuis le début d'année soit 35 onglets. Ce que je souhaite c'est uniquement convertir les 3 derniers onglets et cela sur un seul pdf.

En tout cas merci, c'est déjà très bien :D
 

Mwadepaname

XLDnaute Junior
Effectivement, c'est le seul qui s'affiche en pdf car il écrase les autres.

Le truc, c'est que je voulais les 3 onglets dans le même pdf car j'envoi le planning toutes les 3 semaines. :/

Merci Je viens de faire comme vous avez dit ( C:\Users\xxx\Documents\Planning test v1-" & i & ".pdf" ) et j'ai les 3 derniers onglets :) j'aimerais qu'ils soient sur un seul et même fichier. Si vous avez une idée
 

Mwadepaname

XLDnaute Junior
Perso je ne sais pas faire, sauf à créer une feuille temporaire et y mettre le contenu des 3 feuilles à la suite et générer le PDF sur cette feuille temporaire.
Je peux te le coder si tu veux. Dis-moi...

Sinon tu peux utiliser un des nombreux outils de fusions de PDF. J'utilise PDF Shaper Free.
Malheureusement, je ne peux rien installer sur le pc du travail :( mais oui je suis preneur de la solution avec feuille temporaire.
Merci
 

Dudu2

XLDnaute Barbatruc
VB:
Sub planningPdf()
    Dim i As Integer
    Dim NbFeuilles As Integer
    Dim TabFeuilles() As String
    Const LignesMasquées = "2:2,17:25,61:70,91:99,147:154,172:265"
    Const NomFichierPDF = "C:\Users\xxx\Documents\Planning test v1.pdf"
    'Const NomFichierPDF = "H:\Téléchargements\Test.pdf"
 
    Application.ScreenUpdating = False
    NbFeuilles = ActiveWorkbook.Sheets.Count

    'Pour chaque feuille concernée, masquer les lignes
    For i = NbFeuilles - 1 To NbFeuilles - 3 Step -1
        With ThisWorkbook.Worksheets(i)
            ReDim Preserve TabFeuilles(1 To NbFeuilles - i)
            TabFeuilles(NbFeuilles - i) = .Name
            .Activate
        
            .Range(LignesMasquées).EntireRow.Hidden = True
     
            Application.PrintCommunication = False
            .PageSetup.Zoom = 55
            Application.PrintCommunication = True
        End With
    Next i
 
    'Export PDF des feuilles en 1 seul fichier
    ThisWorkbook.Worksheets(TabFeuilles).Select
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
    Filename:=NomFichierPDF, _
    Quality:=xlQualityStandard, _
    IncludeDocProperties:=True, _
    IgnorePrintAreas:=False, _
    OpenAfterPublish:=True
 
    'Pour chaque feuille concernée, démasquer les lignes
    For i = NbFeuilles - 1 To NbFeuilles - 3 Step -1
        With ThisWorkbook.Worksheets(i)
            .Range(LignesMasquées).EntireRow.Hidden = False
        End With
    Next i

    Application.ScreenUpdating = True
End Sub
Edit: J'ai changé "Onglet" en "Feuille" pour être cohérent mais ça n'a aucun effet sur le code.
 
Dernière édition:

Phil69970

XLDnaute Barbatruc
Bonjour à tous,

Cette macro masque les mêmes lignes sur chaque onglet comme demandé
j'essaie de convertir 3 onglets (en masquant les mêmes lignes sur chaque onglet


Et crée un unique fichier pdf avec les 3 onglets à la suite (avec les lignes masquées)
On a au total 6 pages (2 pages par onglets)
j'ai les 3 derniers onglets :) j'aimerais qu'ils soient sur un seul et même fichier. Si vous avez une idée

VB:
Option Explicit

Sub planningPdfTest()

Application.ScreenUpdating = False

Dim Sh As Worksheet
Dim Sh1 As Worksheet
Dim Sh2 As Worksheet
Dim Sh3 As Worksheet

Dim Cptr As String
Cptr = 1
    
For Each Sh In ThisWorkbook.Worksheets
    If Sh.Name <> "Notes" Then
        Sh.Range("2:2,17:25,61:70,91:99,147:154,172:265").EntireRow.Hidden = True
        
        If Cptr = 1 Then Set Sh1 = ThisWorkbook.Worksheets(Sh.Name)
        If Cptr = 2 Then Set Sh2 = ThisWorkbook.Worksheets(Sh.Name)
        If Cptr = 3 Then Set Sh3 = ThisWorkbook.Worksheets(Sh.Name)
        Cptr = Cptr + 1
     End If
Next
    
'Sheets(Array(Sh1.Name, Sh2.Name, Sh3.Name)).PrintPreview            'Selectionne les feuille à imprimer

With Sheets(Array(Sh1.Name, Sh2.Name, Sh3.Name)).Select

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:="C:\Users\xxxx\Documents\Planning test v1" & ".pdf" _
        , Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
        :=False, OpenAfterPublish:=False
End With

For Each Sh In ThisWorkbook.Worksheets
    Sh.Rows("1:280").Hidden = False
Next
    
Set Sh1 = Nothing
Set Sh2 = Nothing
Set Sh3 = Nothing
Set Sh = Nothing
    
Application.ScreenUpdating = True
    
End Sub

@Phil69970
 

Discussions similaires

Statistiques des forums

Discussions
312 196
Messages
2 086 098
Membres
103 116
dernier inscrit
kutobi87