Inprimer des feuilles en fonction du nombre X dans une case
Bonjour,
J'ai un fichier Excel contenant plusieurs feuilles, certaines étant cachées et d'autres affichées. Je voudrais savoir si quelqu'un peut modifier mon BVA Excel permettant de parcourir toutes les feuilles (cachées et affichées) et de vérifier la valeur de la cellule X16.
- Si X16 = 0, alors ne rien imprimer et passer à la feuille suivante. (déjà réaliser)
- Si X16 = 1, alors imprimer uniquement la première page. (déjà réaliser)
- Si X16 > 1 (par exemple, si X16 = 3), alors imprimer trois pages (pages 1, 2 et 3), correspondant à la plage entre les colonnes AA15 et AA16. (moitié réaliser, il m’imprime les 3 page en une seul feuille et moi je voudrais chacun dans une feuille appart)
De plus, si possible, j'aimerais que le nombre de pages indiqué dans la cellule H4 s'actualise automatiquement en fonction des impressions.(je ne sais pas faire)
Merci d'avance
Sub ImprimerToutesLesFeuillesDansUnPDF()
Dim ws As Worksheet
Dim cheminFichier As String
Dim fichierDialogue As FileDialog
Dim feuillesVisibleAvantImpression As Collection
Set feuillesVisibleAvantImpression = New Collection
Dim plageImpression As String
' Demande à l'utilisateur de choisir l'emplacement et le nom du fichier
Set fichierDialogue = Application.FileDialog(msoFileDialogSaveAs)
fichierDialogue.Title = "Sélectionnez l'emplacement pour enregistrer le PDF"
fichierDialogue.InitialFileName = "ToutesLesFeuilles_Impression.pdf"
fichierDialogue.FilterIndex = 2
If fichierDialogue.Show = -1 Then
cheminFichier = fichierDialogue.SelectedItems(1)
Else
Exit Sub
End If
' Mise en place de l'impression
Application.ScreenUpdating = False
Application.DisplayAlerts = False
' Afficher toutes les feuilles avant l'impression
For Each ws In ThisWorkbook.Worksheets
Application.ScreenUpdating = True
Application.DisplayAlerts = True
' Sauvegarde l'état de visibilité de chaque feuille avant l'impression
If ws.Visible <> xlSheetVisible Then
ws.Visible = xlSheetVisible
feuillesVisibleAvantImpression.Add ws ' Ajouter à la collection des feuilles visibles avant l'impression
End If
' Vérification du nom de la feuille et définir la plage à imprimer
If ws.Name Like "Process ph##" Or ws.Name Like "Process ph###" Then
' Plage de A1 à J55 pour "Process ph..."
ws.PageSetup.PrintArea = "A1:J55"
ElseIf ws.Name Like "Outils ph##" Or ws.Name Like "Outils ph###" Then
' Vérification de la valeur de X16 dans la feuille "Outils ph..."
If ws.Range("X16").Value = 1 Then
' Plage de A1 à J55 pour X16 = 1
ws.PageSetup.PrintArea = "A1:J55"
plageImpression = "A1:J55" ' Ajouter cette plage à imprimer
ElseIf ws.Range("X16").Value = 2 Then
' Plage de A1 à J55 et A56:J108 pour X16 = 2
ws.PageSetup.PrintArea = "A1:J55"
plageImpression = "A1:J55" ' Ajouter cette plage à imprimer
' Ajouter la plage A56:J108 à imprimer
ws.PageSetup.PrintArea = plageImpression & ",A56:J108"
End If
ElseIf ws.Name Like "Contrôle ph##" Or ws.Name Like "Contrôle ph###" Then
' Plage de A1 à I19 pour "Contrôle ph..."
ws.PageSetup.PrintArea = "A1:I19"
ElseIf ws.Name Like "Annexe d'auto-contrôle ph##" Or ws.Name Like "Annexe d'auto-contrôle ph###" Then
' Plage de A1 à T34 pour "Annexe d'auto-contrôle ph..."
ws.PageSetup.PrintArea = "A1:T34"
ElseIf ws.Name Like "Annexe Contrôle final ph##" Or ws.Name Like "Annexe Contrôle final ph###" Then
' Plage de A1 à T37 pour "Annexe Contrôle final ph..."
ws.PageSetup.PrintArea = "A1:T37"
End If
Next ws
' Masquer les feuilles avec X16 = 0
For Each ws In ThisWorkbook.Worksheets
If ws.Range("X16").Value = 0 Then
ws.Visible = xlSheetVeryHidden ' Masquer la feuille de manière très cachée
End If
Next ws
' Exporter toutes les feuilles visibles dans un seul fichier PDF
On Error GoTo ExportError
ThisWorkbook.ExportAsFixedFormat Type:=xlTypePDF, Filename:=cheminFichier, Quality:=xlQualityStandard
' Masquer de nouveau toutes les feuilles qui ont été rendues visibles avant l'impression
For Each ws In feuillesVisibleAvantImpression
ws.Visible = xlSheetVeryHidden ' Masquer la feuille de manière très cachée
Next ws
Exit Sub
ExportError:
MsgBox "Une erreur est survenue lors de l'exportation en PDF. Veuillez vérifier le chemin et les feuilles d'impression.", vbCritical
End SubSalut,
Le problème vient probablement du fait que tu as ''Ajusté'' l'échelle de ta feuille.
Essaie de choisir ''Réduire/agrandir à" et indique "100% de la taille normale". Ensuite, soit tu ajustes la hauteur des lignes afin que chaque tableau vienne sur une feuille ou tu ajustes ce "% de la taille normale" ; à toi de voir.
Tu devrais placer l'instruction
Application.ScreenUpdating = Falseau début de ta macro Sub ImprimerToutesLesFeuillesDansUnPDF() afin de réduire le temps de création de tes fichiers PDF.
Cordialement.