IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Sauts de pages à supprimer dans un code après impression


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier Avatar de lagratteCchouette
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 190
    Points : 74
    Points
    74
    Par défaut 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub razSautsPage_Click()
    Sheets("feuille1").DisplayAutomaticPageBreaks = True
    End Sub
    Et voilà mon code d'impression


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    LagratteCchouette
    La musique donne une âme à nos cœurs et des ailes à la pensée - Platon

  2. #2
    Membre chevronné Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Points : 1 999
    Points
    1 999
    Par défaut
    Apparemment tu n'as pas trop de problèmes s'il ne te reste plus que ça ...

    Il te suffit avant la fin de la macro ou en appelant une nouvelle macro de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim F1 As Worksheet
    ' ------------------------------- '
    ' Parcours les onglets
    ' ------------------------------- '
    For Each F1 In Sheets
    F1.DisplayAutomaticPageBreaks = True
    Next F1

  3. #3
    Membre régulier Avatar de lagratteCchouette
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 190
    Points : 74
    Points
    74
    Par défaut 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 voilà ce que j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    LagratteCchouette
    La musique donne une âme à nos cœurs et des ailes à la pensée - Platon

  4. #4
    Membre chevronné Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Points : 1 999
    Points
    1 999
    Par défaut
    j'aime bien ton code, je le trouve assez original, je ne comprend pas ton plantage, j'ai repris le code, je l'ai exécuter, j'ai fait imprimer et tout a fonctionné sans soucis ?

    Peut être remplace :

    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each F1 In Worksheets
    Mais j'ai un arrêt sur ton code. Peut-être ne l'ai-je pas bien intégré ?
    Quel est le message ?

  5. #5
    Membre régulier Avatar de lagratteCchouette
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 190
    Points : 74
    Points
    74
    Par défaut 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.

    Ah ce n'est pas toujours simple...

    LagratteCchouette
    LagratteCchouette
    La musique donne une âme à nos cœurs et des ailes à la pensée - Platon

  6. #6
    Membre chevronné Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Points : 1 999
    Points
    1 999
    Par défaut
    Relis mon post précédent please

  7. #7
    Membre régulier Avatar de lagratteCchouette
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 190
    Points : 74
    Points
    74
    Par défaut 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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    LagratteCchouette
    La musique donne une âme à nos cœurs et des ailes à la pensée - Platon

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. insérer une page html dans un code php
    Par darckangel01 dans le forum Langage
    Réponses: 5
    Dernier message: 20/12/2008, 11h28
  2. Saut de page conditionnel dans un état
    Par bhp dans le forum IHM
    Réponses: 2
    Dernier message: 27/06/2008, 13h32
  3. Réponses: 4
    Dernier message: 22/05/2007, 10h52
  4. Réponses: 6
    Dernier message: 09/01/2007, 14h12
  5. Réponses: 2
    Dernier message: 28/09/2005, 09h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo