Sauts de pages à supprimer dans un code après impression
Bonjour à tous.
Voilà mon problème :
Je souhaite par un code vba lancer une impression de mes feuilles contenues dans mon classeur.
J’ai donc trouvé un code qui marche très bien et avec un userform qui me permet de sélectionner dans une liste contenant toutes les feuilles de mon classeur celles que je souhaite imprimer.
Mais miracle d’excel ; si on lance une impression par un code ou une macro regroupant plusieurs feuilles les sauts de pages sont ensuite impossible à modifier (là c’est un mystère).
Menu : Affichage / aperçu des sauts de pages
Sur la ligne bleue le curseur de la souris n’a plus d’effets.
J’ai donc trouvé un code qui rétablit les choses, qui marche très bien activé par un bouton macro.
Je voudrais l’intégrer à mon code vba d’impression pour qu’il rétablisse la possibilité de modifier à nouveau les sauts de pages sur celles que je viens d’imprimer.
Pouvez-vous m’aider –svp
Code:
1 2 3 4
|
Private Sub razSautsPage_Click()
Sheets("feuille1").DisplayAutomaticPageBreaks = True
End Sub |
Et voilà mon code d'impression
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
|
Private Sub imprimante_Click()
'Attribute VB_Name = "BoiteDialogueImprimerFeuilles"
'construit une boite de dialogue temporaire pour sélectionner
'les feuilles que l'on souhaite imprimer dans un classeur
'Sub ChoixImpressionFeuilles()
'd'après un code diffusé par René Roy, mpfe
Dim I As Integer, Arr(), x&
Dim TopPos As Integer
Dim SheetCount As Integer
Dim PrintDlg As DialogSheet
Dim CurrentSheet As Worksheet
Dim cb As CheckBox
Application.ScreenUpdating = False
If Sheets.Count > 40 Then
MsgBox "Trop de feuilles pour la boite de dialogue..."
Exit Sub
End If
' Ajoute une feuille de dialogue temporaire
If ActiveWindow.SelectedSheets.Count > 1 Then Sheets(1).Activate
Set PrintDlg = ActiveWorkbook.DialogSheets.Add
PrintDlg.Visible = xlSheetHidden
SheetCount = 0
' Ajoute les boutons d'option
TopPos = 40
For I = 1 To ActiveWorkbook.Worksheets.Count
Set CurrentSheet = ActiveWorkbook.Worksheets(I)
' Ne tient pas compte des feuilles vide ou masquées
If Application.CountA(CurrentSheet.Cells) <> 0 And _
CurrentSheet.Visible Then
SheetCount = SheetCount + 1
PrintDlg.CheckBoxes.Add 78, TopPos, 120, 16.5
PrintDlg.CheckBoxes(SheetCount).Text = CurrentSheet.Name
TopPos = TopPos + 13
End If
Next I
' Positionne les boutons OK et Annuler
PrintDlg.Buttons.Left = 200
' Dimensionne la hauteur, la largeur et le titre de la bte de dialogue
With PrintDlg.DialogFrame
.Height = Application.Max _
(68, PrintDlg.DialogFrame.Top + TopPos - 34)
.Width = 200
.Caption = "Feuille(s) à imprimer ? "
End With
' Change l'ordre de tabulation des boutons OK et Annuler
' afin de donner le focus au premier bouton d'option
PrintDlg.Buttons("Button 2").BringToFront
PrintDlg.Buttons("Button 3").BringToFront
' Affiche la boîte de dialogue
Application.ScreenUpdating = True
If SheetCount <> 0 Then
If PrintDlg.Show = True Then
x = -1
Application.ScreenUpdating = False
For I = 1 To SheetCount
If PrintDlg.CheckBoxes(I).Value = xlOn Then
x = x + 1: ReDim Preserve Arr(x)
Arr(x) = PrintDlg.CheckBoxes(I).Caption
End If
Next I
Else: Exit Sub
End If
Else
MsgBox "Toutes les feuilles sont vides."
End If
' Compte le nombre de page à imprimer
'Sheets("garde").Range("E41").Value = (Wsh.VPageBreaks.Count + 1) * (Wsh.HPageBreaks.Count + 1)
' NbPages = (Wsh.VPageBreaks.Count + 1) * (Wsh.HPageBreaks.Count + 1)
'MsgBox ExecuteExcel4Macro("Get.Document(50)")
' Supprime la feuille de dialogue temporaire (sans message d'avertissement)
Application.DisplayAlerts = False
PrintDlg.Delete
If x = -1 Then Exit Sub
' Sélectionne les feuilles et montre un aperçu avant impression
Sheets(Arr).Select
ActiveWindow.SelectedSheets.PrintPreview
End Sub |
Merci par avance
LagratteCchouette
Sauts de pages à supprimer dans un code après impression
Super merci pour ta réactivité.
Mais j'ai un arrêt sur ton code. Peut-être ne l'ai-je pas bien intégré ?
A ce niveau
Code:
Dim F1 As Worksheet
voilà ce que j'ai fait :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
|
Private Sub imprimante_Click()
'Attribute VB_Name = "BoiteDialogueImprimerFeuilles"
'construit une boite de dialogue temporaire pour sélectionner
'les feuilles que l'on souhaite imprimer dans un classeur
'Sub ChoixImpressionFeuilles()
'd'après un code diffusé par René Roy, mpfe
Dim I As Integer, Arr(), x&
Dim TopPos As Integer
Dim SheetCount As Integer
Dim PrintDlg As DialogSheet
Dim CurrentSheet As Worksheet
Dim cb As CheckBox
Application.ScreenUpdating = False
If Sheets.Count > 40 Then
MsgBox "Trop de feuilles pour la boite de dialogue..."
Exit Sub
End If
' Ajoute une feuille de dialogue temporaire
If ActiveWindow.SelectedSheets.Count > 1 Then Sheets(1).Activate
Set PrintDlg = ActiveWorkbook.DialogSheets.Add
PrintDlg.Visible = xlSheetHidden
SheetCount = 0
' Ajoute les boutons d'option
TopPos = 40
For I = 1 To ActiveWorkbook.Worksheets.Count
Set CurrentSheet = ActiveWorkbook.Worksheets(I)
' Ne tient pas compte des feuilles vide ou masquées
If Application.CountA(CurrentSheet.Cells) <> 0 And _
CurrentSheet.Visible Then
SheetCount = SheetCount + 1
PrintDlg.CheckBoxes.Add 78, TopPos, 120, 16.5
PrintDlg.CheckBoxes(SheetCount).Text = CurrentSheet.Name
TopPos = TopPos + 13
End If
Next I
' Positionne les boutons OK et Annuler
PrintDlg.Buttons.Left = 200
' Dimensionne la hauteur, la largeur et le titre de la bte de dialogue
With PrintDlg.DialogFrame
.Height = Application.Max _
(68, PrintDlg.DialogFrame.Top + TopPos - 34)
.Width = 200
.Caption = "Feuille(s) à imprimer ? "
End With
' Change l'ordre de tabulation des boutons OK et Annuler
' afin de donner le focus au premier bouton d'option
PrintDlg.Buttons("Button 2").BringToFront
PrintDlg.Buttons("Button 3").BringToFront
' Affiche la boîte de dialogue
Application.ScreenUpdating = True
If SheetCount <> 0 Then
If PrintDlg.Show = True Then
x = -1
Application.ScreenUpdating = False
For I = 1 To SheetCount
If PrintDlg.CheckBoxes(I).Value = xlOn Then
x = x + 1: ReDim Preserve Arr(x)
Arr(x) = PrintDlg.CheckBoxes(I).Caption
End If
Next I
Else: Exit Sub
End If
Else
MsgBox "Toutes les feuilles sont vides."
End If
'& Application.ExecuteExcel4Macro("GET.DOCUMENT(50)") _
Sheets("garde").Range("E41").Value = ExecuteExcel4Macro("GET.DOCUMENT(50)") & " Page(s)"
' Compte le nombre de page à imprimer
'Sheets("garde").Range("E41").Value = (Wsh.VPageBreaks.Count + 1) * (Wsh.HPageBreaks.Count + 1)
' NbPages = (Wsh.VPageBreaks.Count + 1) * (Wsh.HPageBreaks.Count + 1)
'MsgBox ExecuteExcel4Macro("Get.Document(50)")
' Supprime la feuille de dialogue temporaire (sans message d'avertissement)
Application.DisplayAlerts = False
PrintDlg.Delete
If x = -1 Then Exit Sub
' Sélectionne les feuilles et montre un aperçu avant impression
Sheets(Arr).Select
ActiveWindow.SelectedSheets.PrintPreview
'===================================================================
' Ajout du code de suppressions des sauts de pages
Dim F1 As Worksheet
' ------------------------------- '
' Parcours les onglets
' ------------------------------- '
For Each F1 In Sheets
F1.DisplayAutomaticPageBreaks = True
Next F1
'===================================================================
'pour imprimer :
' ActiveWindow.SelectedSheets.PrintOut
'End Sub
End Sub |
Sauts de pages à supprimer dans un code après impression
Là je me perd.
Moi il fait un point d'arrêt mon débugeur sur cette ligne exactement.
Code:
For Each F1 In Sheets
Ah ce n'est pas toujours simple...
LagratteCchouette
Sauts de pages à supprimer dans un code après impression
MERCIIIIIIIIIIIIIIIII.
Tu es génial. Je n'avais pas vu ta 2ème hypothèses.
c'est bien cela, cela marche super bien.
voilà donc le code définitif pour tous ceux qui en ont besoin :ccool:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
|
Private Sub imprimante_Click()
'Attribute VB_Name = "BoiteDialogueImprimerFeuilles"
'construit une boite de dialogue temporaire pour sélectionner
'les feuilles que l'on souhaite imprimer dans un classeur
'Sub ChoixImpressionFeuilles()
'd'après un code diffusé par René Roy, mpfe
Dim I As Integer, Arr(), x&
Dim TopPos As Integer
Dim SheetCount As Integer
Dim PrintDlg As DialogSheet
Dim CurrentSheet As Worksheet
Dim cb As CheckBox
Application.ScreenUpdating = False
If Sheets.Count > 40 Then
MsgBox "Trop de feuilles pour la boite de dialogue..."
Exit Sub
End If
' Ajoute une feuille de dialogue temporaire
If ActiveWindow.SelectedSheets.Count > 1 Then Sheets(1).Activate
Set PrintDlg = ActiveWorkbook.DialogSheets.Add
PrintDlg.Visible = xlSheetHidden
SheetCount = 0
' Ajoute les boutons d'option
TopPos = 40
For I = 1 To ActiveWorkbook.Worksheets.Count
Set CurrentSheet = ActiveWorkbook.Worksheets(I)
' Ne tient pas compte des feuilles vide ou masquées
If Application.CountA(CurrentSheet.Cells) <> 0 And _
CurrentSheet.Visible Then
SheetCount = SheetCount + 1
PrintDlg.CheckBoxes.Add 78, TopPos, 120, 16.5
PrintDlg.CheckBoxes(SheetCount).Text = CurrentSheet.Name
TopPos = TopPos + 13
End If
Next I
' Positionne les boutons OK et Annuler
PrintDlg.Buttons.Left = 200
' Dimensionne la hauteur, la largeur et le titre de la bte de dialogue
With PrintDlg.DialogFrame
.Height = Application.Max _
(68, PrintDlg.DialogFrame.Top + TopPos - 34)
.Width = 200
.Caption = "Feuille(s) à imprimer ? "
End With
' Change l'ordre de tabulation des boutons OK et Annuler
' afin de donner le focus au premier bouton d'option
PrintDlg.Buttons("Button 2").BringToFront
PrintDlg.Buttons("Button 3").BringToFront
' Affiche la boîte de dialogue
Application.ScreenUpdating = True
If SheetCount <> 0 Then
If PrintDlg.Show = True Then
x = -1
Application.ScreenUpdating = False
For I = 1 To SheetCount
If PrintDlg.CheckBoxes(I).Value = xlOn Then
x = x + 1: ReDim Preserve Arr(x)
Arr(x) = PrintDlg.CheckBoxes(I).Caption
End If
Next I
Else: Exit Sub
End If
Else
MsgBox "Toutes les feuilles sont vides."
End If
'& Application.ExecuteExcel4Macro("GET.DOCUMENT(50)") _
Sheets("garde").Range("E41").Value = ExecuteExcel4Macro("GET.DOCUMENT(50)") & " Page(s)"
' Compte le nombre de page à imprimer
'Sheets("garde").Range("E41").Value = (Wsh.VPageBreaks.Count + 1) * (Wsh.HPageBreaks.Count + 1)
' NbPages = (Wsh.VPageBreaks.Count + 1) * (Wsh.HPageBreaks.Count + 1)
'MsgBox ExecuteExcel4Macro("Get.Document(50)")
' Supprime la feuille de dialogue temporaire (sans message d'avertissement)
Application.DisplayAlerts = False
PrintDlg.Delete
If x = -1 Then Exit Sub
' Sélectionne les feuilles et montre un aperçu avant impression
Sheets(Arr).Select
ActiveWindow.SelectedSheets.PrintPreview
Dim F1 As Worksheet
' ------------------------------- '
' Parcours les onglets
' ------------------------------- '
'For Each F1 In Sheets
For Each F1 In Worksheets
F1.DisplayAutomaticPageBreaks = True
Next F1
'pour imprimer :
' ActiveWindow.SelectedSheets.PrintOut
'End Sub
End Sub |
LagratteCchouette