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

Excel Discussion :

Impression avec Saut de page et cellule à 0 [XL-2010]


Sujet :

Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Mai 2012
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Distribution

    Informations forums :
    Inscription : Mai 2012
    Messages : 173
    Points : 80
    Points
    80
    Par défaut Impression avec Saut de page et cellule à 0
    Bonjour,

    Un peu de mal à trouver un titre pour ma demande.

    J'ai un fichier Excel qui contient des factures différentes, remplis par un tableau qui se situe sur la même feuille.

    Chaque facture est séparé par un saut de page. Je voudrais savoir si c'est possible de ne pas imprimer les factures dont le total est égale à 0,00. Ce montant se trouve dans une cellule.

    Créer un bouton qui lance l'impression de toutes les factures en omettant celle dont le total est 0,00.

    Lorsque je lance l'impression, il faut que je donne aussi la première et la dernière page à imprimer.

    Cette demande n'est pas demandé où je travaille, mais comme c'est moi qui m'occupe d'imprimer les factures, ça me dérange de devoir imprimer des factures à 0,00 et de devoir les mettre à la poubelle. Et permettre par la même de faire des économies de papier. (cette semaine, j'ai décidé de regarder les factures à 0, et j'en ai 90..., 90 par semaine, 360 par mois soit 4320 par an, environ 9 ramettes en moins).

    Merci pour votre aide

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Le code ci-dessous identifie les sauts de pages. Normalement, selon la facture le nombre de lignes doit être variable, mais il est probable que le montant TTC soit toujours placé au même endroit sur la feuille. En admettant que ce montant TTC soit situé 2 lignes au dessus du saut de page et 3 colonnes à partir du bord gauche de la feuille, il suffirait de tester le montant pour récupérer le numéro de page à ne pas imprimer et de le mémoriser dans une matrice lors d'un premier balayage.

    Puis enclencher l'édition en écartant les feuilles présentes dans la matrice.

    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
    Sub IdentifierLesFacturesAZero()
     
    Dim NbDeFacturesAZero As Integer
    Dim Pb As HPageBreak
     
         NbDeFacturesAZero = 0
     
         For Each Pb In Worksheets(1).HPageBreaks
     
             MsgBox (Pb.Location.Address)
             If Pb.Location.Offset(-2, 3) = 0 Then NbDeFacturesAZero = NbDeFacturesAZero + 1
     
         Next Pb
     
         MsgBox (NbDeFacturesAZero)
     
    End Sub
    Cordialement.

  3. #3
    Membre régulier
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Mai 2012
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Distribution

    Informations forums :
    Inscription : Mai 2012
    Messages : 173
    Points : 80
    Points
    80
    Par défaut
    c'est pas mal du tout, J'ai testé, à part une facture où le montant TTC ne se situe pas au même endroit, il me donne comme résultat 10 factures sur 11.

    Il y a effectivement 11 factures dans la feuille, dont une à 0, il me donne comme résultat 10.

    Par contre, il faut que je note le code cellule que le msgbox m'indique, d'aller voir le numéro de la page et lors de l'impression, rentrer chaque page à imprimer. Ca va pour un fichier avec 11 factures, par contre, j'ai un fichier avec 129 factures, ça risque d'être long.

    Mais merci Eric, c'est très intéressant !!

    EDIT : En fait, non ca ne fonctionne pas, je dois imprimer par défaut les factures de la page 2 à 11, ce qui fait 10 factures à imprimer, et il m'a proposé la facture à 0. Je vais tester pour trouver d'où vient l'erreur lorsque j'ai réécris le code.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Le code que je vous ai transmis indique seulement s'il y a des factures à 0 à partir des sauts de page. Il faut être certain que le TTC apparaisse toujours au même endroit par rapport au saut de page.

    Sinon pour compléter le programme, il faut maintenant identifier les numéros de page à écarter. Il n'est bien sûr pas question de le faire manuellement. L'idée est définir l'aire d'impression pour chaque facture et d'éditer page par page avec une boucle For Next.


    Donc la question était : Est-ce possible ? Il semble que oui, mais il y a encore du code à produire.

    Cordialement.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Avril 2013
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2013
    Messages : 33
    Points : 36
    Points
    36
    Par défaut
    Je pense voir un moyen de t'aider... Pourrais-tu envoyer ton fichier ou une copie pour que je puisse voir le format? (sans données numériques mais en indiquant la cellule où se trouve le total?)

  6. #6
    Membre régulier
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Mai 2012
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Distribution

    Informations forums :
    Inscription : Mai 2012
    Messages : 173
    Points : 80
    Points
    80
    Par défaut
    Bonjour et merci à vous deux,

    Voici le fichier en pièce jointe.
    Le total est "total remit"

    les pages des factures : 2 à 11

  7. #7
    Invité
    Invité(e)
    Par défaut Imprimer les factures sauf celles à 0
    Bonjour,

    Ci-joint, une solution consistant à balayer la colonne G (Total Remit) et à remplir une matrice d'impression repérant le haut, le bas de la page à imprimer pour chaque facture et si le montant est > 0 d'indiquer qu'elle est à imprimer.
    L'impression se fait dans un deuxième temps à partir de l'info "A imprimer" ou non pour chaque facture par balayage de la matrice. J'ai laissé les Msgbox pour comprendre ce que restitue le programme. Ils pourront être neutralisés en mettant ' devant chaque ligne.
    La macro "ImprimerLaFacture" est sans doute à adapter à votre imprimante.

    Ces macros seront à rattacher à un programme principal qui devra pointer sur la feuille à imprimer.

    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
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    Option Explicit
     
    Private SautDePageDuHaut As Long
    Private SautDePageDuBas As Long
    Private NbFactures As Long
    Private DerniereLigneFactures As Long
     
    Private Pb As HPageBreak
     
    Private FactureAZero As Boolean
     
    Private MatriceImpression() As Variant
     
    Private AireAImprimer As Range
     
    Private ShAImprimer As Worksheet
     
     
    Sub ImprimerSansLesFacturesAZero()
     
     
    ' Message dans Développez.com
    ' http://www.developpez.net/forums/d1342967/excel/impression-avec-saut-page-cellule-a-0/#post7288979
     
    Dim ColonneTotalRemit As Long
    Dim LigneTotalRemit As Long
     
    Dim I As Long
     
    Dim Cellule As Range
    Dim AireABalayer As Range
     
    Dim RestitutionSautsDePage As String
     
     
            Set ShAImprimer = ActiveSheet
            ColonneTotalRemit = 7  ' Colonne G
            NbFactures = 0
            DerniereLigneFactures = Cells(ActiveSheet.Rows.Count, ColonneTotalRemit).End(xlUp).Row + 1
     
            ReDim MatriceImpression(3, NbFactures)  ' 0 : numéro, 1 : Ligne du haut, 2 : Ligne du bas, 3 : A imprimer ou rien
     
            Set AireABalayer = Columns(ColonneTotalRemit).Cells
     
            ' Recherche des factures
            '-----------------------
            For Each Cellule In AireABalayer
     
                If Cellule = "TOTAL REMIT" Then
                      LigneTotalRemit = Cellule.Row
                      If Cellule.Offset(0, 1) > 0 Then
                            Call RepererLesSautsDePageEncadrantUneFacture(LigneTotalRemit, True, DerniereLigneFactures)
                      Else
                            Call RepererLesSautsDePageEncadrantUneFacture(LigneTotalRemit, False, DerniereLigneFactures)
                      End If
                      NbFactures = NbFactures + 1
                      ReDim Preserve MatriceImpression(3, NbFactures)
               End If
     
            Next Cellule
     
            I = 0
            For NbFactures = LBound(MatriceImpression, 2) To UBound(MatriceImpression, 2)
                RestitutionSautsDePage = RestitutionSautsDePage & MatriceImpression(0, I) & " " & MatriceImpression(1, I) & " " & MatriceImpression(2, I) & " " & MatriceImpression(3, I) & Chr(10)
                I = I + 1
            Next NbFactures
     
            MsgBox (RestitutionSautsDePage)
     
     
            ' Impression des factures
            '------------------------
            For I = LBound(MatriceImpression, 2) To UBound(MatriceImpression, 2)
                If MatriceImpression(3, I) = "A imprimer" Then
     
                     Set AireAImprimer = Range(Cells(MatriceImpression(1, I), 1), Cells(MatriceImpression(2, I), ColonneTotalRemit + 1))
                     MsgBox ("Facture numéro : " & MatriceImpression(0, I) & " Adresse : " & AireAImprimer.Address & " " & MatriceImpression(3, I))
                     Call ImprimerLaFacture(AireAImprimer)
                     Set AireAImprimer = Nothing
     
                End If
            Next I
     
     
            Set AireABalayer = Nothing
            Set ShAImprimer = Nothing
     
     
    End Sub
     
     
     
    Sub RepererLesSautsDePageEncadrantUneFacture(LigneFacture As Long, TypeFacture As Boolean, LigneFinDePage As Long)
     
    Dim CompteurSautDePage As Long
     
         SautDePageDuHaut = 1
         SautDePageDuBas = 0
         CompteurSautDePage = 0
     
         For Each Pb In Worksheets(1).HPageBreaks
     
             SautDePageDuBas = Pb.Location.Row - 1
     
             If LigneFacture < SautDePageDuBas Then
                MatriceImpression(0, NbFactures) = NbFactures + 1
                MatriceImpression(1, NbFactures) = SautDePageDuHaut
                MatriceImpression(2, NbFactures) = SautDePageDuBas
                If TypeFacture = True Then MatriceImpression(3, NbFactures) = "A imprimer"
                Exit Sub
             End If
     
             CompteurSautDePage = CompteurSautDePage + 1
             SautDePageDuHaut = Pb.Location.Row
     
         Next Pb
     
         If CompteurSautDePage = Worksheets(1).HPageBreaks.Count Then
                MatriceImpression(0, NbFactures) = NbFactures + 1
                MatriceImpression(1, NbFactures) = SautDePageDuHaut
                MatriceImpression(2, NbFactures) = LigneFinDePage
                If TypeFacture = True Then MatriceImpression(3, NbFactures) = "A imprimer"
         End If
     
    End Sub
     
     
     
    Sub ImprimerLaFacture(AireImpression As Range)
     
    ' Impression PdfCreator
    '        ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
    '        IgnorePrintAreas:=False
     
        AireAImprimer.Select
        Application.PrintCommunication = False
        With ActiveSheet.PageSetup
            .PrintTitleRows = ""
            .PrintTitleColumns = ""
        End With
        Application.PrintCommunication = True
        ActiveSheet.PageSetup.PrintArea = AireAImprimer.Address
        Application.PrintCommunication = False
        With ActiveSheet.PageSetup
            .LeftMargin = Application.InchesToPoints(0.196850393700787)
            .RightMargin = Application.InchesToPoints(0.196850393700787)
            .TopMargin = Application.InchesToPoints(0.196850393700787)
            .BottomMargin = Application.InchesToPoints(0.196850393700787)
            .HeaderMargin = Application.InchesToPoints(0)
            .FooterMargin = Application.InchesToPoints(0)
            .PrintHeadings = False
            .PrintGridlines = False
            .PrintComments = xlPrintNoComments
            .CenterHorizontally = True
            .CenterVertically = True
            .Orientation = xlPortrait
            .Draft = False
            .FirstPageNumber = xlAutomatic
            .Order = xlDownThenOver
            .BlackAndWhite = False
            .Zoom = 85
            .PrintErrors = xlPrintErrorsDisplayed
            .OddAndEvenPagesHeaderFooter = False
            .DifferentFirstPageHeaderFooter = False
            .ScaleWithDocHeaderFooter = True
            .AlignMarginsHeaderFooter = False
        End With
        ActiveSheet.PageSetup.PrintArea = ""
     
        Application.PrintCommunication = True
     
    End Sub

    Cordialement.

  8. #8
    Membre régulier
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Mai 2012
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Distribution

    Informations forums :
    Inscription : Mai 2012
    Messages : 173
    Points : 80
    Points
    80
    Par défaut
    Bonjour et merci Eric,

    Je ne pensais pas que ça aurait eu autant de code pour cela. Je n'aurais jamais pu créer tout cela. J'apprend à coder mais je n'ai pas encore toute la logique nécessaire pour créer de tel code.

    Merci, je vais le tester mais c'est très intéressant de comprendre de tel code.

    EDIT : Je reviens sur le test que j'ai effectué et il pose un petit problème, il imprime toutes les pages de la feuille.

    J'ai fait une simulation d'impression par macro, que je donne le code ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ' Impression PdfCreator
             ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
            "C:\Users\ADMIN\Desktop\TEST.pdf", Quality:=xlQualityStandard, _
            IncludeDocProperties:=True, IgnorePrintAreas:=False, From:=2, To:=11, _
            OpenAfterPublish:=True
        Application.WindowState = xlMinimized
        Application.WindowState = xlNormal
    Je pense créer un fichier pdf sur le bureau et donc lancer cette impression par la suite. J'ai modifié le code en conséquence, mais il imprime la facture à 0, au moins, je peux restreindre la plage d'impression, mais ne résout pas encore les factures à 0.

  9. #9
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Il faut ajouter le code suivant dans la macro d'impression

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1, Collate:=True, IgnorePrintAreas:=False

    Pour plus de facilité, remplacez le code du module par celui-ci :

    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
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    Option Explicit
     
    Private SautDePageDuHaut As Long
    Private SautDePageDuBas As Long
    Private NbFactures As Long
    Private DerniereLigneFactures As Long
     
    Private Pb As HPageBreak
     
    Private FactureAZero As Boolean
     
    Private MatriceImpression() As Variant
     
    Private AireAImprimer As Range
     
    Private ShAImprimer As Worksheet
     
     
    Sub ImprimerSansLesFacturesAZero()
     
     
    ' Message dans Développez.com
    ' http://www.developpez.net/forums/d1342967/excel/impression-avec-saut-page-cellule-a-0/#post7288979
     
    Dim ColonneTotalRemit As Long
    Dim LigneTotalRemit As Long
     
    Dim I As Long
     
    Dim Cellule As Range
    Dim AireABalayer As Range
     
    Dim RestitutionSautsDePage As String
     
     
            Set ShAImprimer = ActiveSheet
            ColonneTotalRemit = 7  ' Colonne G
            NbFactures = 0
            DerniereLigneFactures = Cells(ActiveSheet.Rows.Count, ColonneTotalRemit).End(xlUp).Row + 1
     
            ReDim MatriceImpression(3, NbFactures)  ' 0 : numéro, 1 : Ligne du haut, 2 : Ligne du bas, 3 : A imprimer ou rien
     
            Set AireABalayer = Columns(ColonneTotalRemit).Cells
     
            ' Recherche des factures
            '-----------------------
            For Each Cellule In AireABalayer
     
                If Cellule = "TOTAL REMIT" Then
                      LigneTotalRemit = Cellule.Row
                      If Cellule.Offset(0, 1) > 0 Then
                            Call RepererLesSautsDePageEncadrantUneFacture(LigneTotalRemit, True, DerniereLigneFactures)
                      Else
                            Call RepererLesSautsDePageEncadrantUneFacture(LigneTotalRemit, False, DerniereLigneFactures)
                      End If
                      NbFactures = NbFactures + 1
                      ReDim Preserve MatriceImpression(3, NbFactures)
               End If
     
            Next Cellule
     
            I = 0
            For NbFactures = LBound(MatriceImpression, 2) To UBound(MatriceImpression, 2)
                RestitutionSautsDePage = RestitutionSautsDePage & MatriceImpression(0, I) & " " & MatriceImpression(1, I) & " " & MatriceImpression(2, I) & " " & MatriceImpression(3, I) & Chr(10)
                I = I + 1
            Next NbFactures
     
            MsgBox (RestitutionSautsDePage)
     
     
            ' Impression des factures
            '------------------------
            For I = LBound(MatriceImpression, 2) To UBound(MatriceImpression, 2)
                If MatriceImpression(3, I) = "A imprimer" Then
     
                     Set AireAImprimer = Range(Cells(MatriceImpression(1, I), 1), Cells(MatriceImpression(2, I), ColonneTotalRemit + 1))
                   '  MsgBox ("Facture numéro : " & MatriceImpression(0, I) & " Adresse : " & AireAImprimer.Address & " " & MatriceImpression(3, I))
     
                     Call ImprimerLaFacture(AireAImprimer)
     
                     If I = 3 Then Exit Sub
     
                     Set AireAImprimer = Nothing
     
                End If
            Next I
     
     
            Set AireABalayer = Nothing
            Set ShAImprimer = Nothing
     
     
    End Sub
     
     
     
    Sub RepererLesSautsDePageEncadrantUneFacture(LigneFacture As Long, TypeFacture As Boolean, LigneFinDePage As Long)
     
    Dim CompteurSautDePage As Long
     
         SautDePageDuHaut = 1
         SautDePageDuBas = 0
         CompteurSautDePage = 0
     
         For Each Pb In Worksheets(1).HPageBreaks
     
             SautDePageDuBas = Pb.Location.Row - 1
     
             If LigneFacture < SautDePageDuBas Then
                MatriceImpression(0, NbFactures) = NbFactures + 1
                MatriceImpression(1, NbFactures) = SautDePageDuHaut
                MatriceImpression(2, NbFactures) = SautDePageDuBas
                If TypeFacture = True Then MatriceImpression(3, NbFactures) = "A imprimer"
                Exit Sub
             End If
     
             CompteurSautDePage = CompteurSautDePage + 1
             SautDePageDuHaut = Pb.Location.Row
     
         Next Pb
     
         If CompteurSautDePage = Worksheets(1).HPageBreaks.Count Then
                MatriceImpression(0, NbFactures) = NbFactures + 1
                MatriceImpression(1, NbFactures) = SautDePageDuHaut
                MatriceImpression(2, NbFactures) = LigneFinDePage
                If TypeFacture = True Then MatriceImpression(3, NbFactures) = "A imprimer"
         End If
     
    End Sub
     
     
    Sub ImprimerLaFacture(AireImpression As Range)
     
     
        AireAImprimer.Select
        Application.PrintCommunication = False
        With ActiveSheet.PageSetup
            .PrintTitleRows = ""
            .PrintTitleColumns = ""
        End With
        Application.PrintCommunication = True
        ActiveSheet.PageSetup.PrintArea = AireImpression.Address
        Application.PrintCommunication = False
        With ActiveSheet.PageSetup
            .LeftMargin = Application.InchesToPoints(0.196850393700787)
            .RightMargin = Application.InchesToPoints(0.196850393700787)
            .TopMargin = Application.InchesToPoints(0.196850393700787)
            .BottomMargin = Application.InchesToPoints(0.196850393700787)
            .HeaderMargin = Application.InchesToPoints(0)
            .FooterMargin = Application.InchesToPoints(0)
            .PrintHeadings = False
            .PrintGridlines = False
            .PrintComments = xlPrintNoComments
            .CenterHorizontally = True
            .CenterVertically = True
            .Orientation = xlPortrait
            .Draft = False
            .FirstPageNumber = xlAutomatic
            .Order = xlDownThenOver
            .BlackAndWhite = False
            .Zoom = 85
            .PrintErrors = xlPrintErrorsDisplayed
            .OddAndEvenPagesHeaderFooter = False
            .DifferentFirstPageHeaderFooter = False
            .ScaleWithDocHeaderFooter = True
            .AlignMarginsHeaderFooter = False
        End With
     
        Application.PrintCommunication = True
     
        ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1, Collate:=True, IgnorePrintAreas:=False
        ActiveSheet.PageSetup.PrintArea = ""
     
     
    End Sub
    Cordialement.

  10. #10
    Membre régulier
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Mai 2012
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Distribution

    Informations forums :
    Inscription : Mai 2012
    Messages : 173
    Points : 80
    Points
    80
    Par défaut
    Merci Eric !

    C'est presque bon !

    - il voit les 9 factures sur 10 à imprimer (1 facture à 0$)
    - il lance l'impression

    par contre, il s'arrête après 3 feuilles imprimées (il s'arrête page 5)

    C'est rageant mais vraiment cool sinon !

  11. #11
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    C'est normal, j'ai oublié de supprimer la ligne limitant le test :
    dans

    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
            ' Impression des factures
            '------------------------
            For I = LBound(MatriceImpression, 2) To UBound(MatriceImpression, 2)
                If MatriceImpression(3, I) = "A imprimer" Then
     
                     Set AireAImprimer = Range(Cells(MatriceImpression(1, I), 1), Cells(MatriceImpression(2, I), ColonneTotalRemit + 1))
                   '  MsgBox ("Facture numéro : " & MatriceImpression(0, I) & " Adresse : " & AireAImprimer.Address & " " & MatriceImpression(3, I))
     
                     Call ImprimerLaFacture(AireAImprimer)
     
                     If I = 3 Then Exit Sub
     
                     Set AireAImprimer = Nothing
     
                End If
            Next I

    Il suffit donc de mettre l'apostrophe ' devant la ligne de code pour la neutraliser ou de remplacer la macro par celle-ci.

    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
    Sub ImprimerSansLesFacturesAZero()
     
     
    ' Message dans Développez.com
    ' http://www.developpez.net/forums/d1342967/excel/impression-avec-saut-page-cellule-a-0/#post7288979
     
    Dim ColonneTotalRemit As Long
    Dim LigneTotalRemit As Long
     
    Dim I As Long
     
    Dim Cellule As Range
    Dim AireABalayer As Range
     
    Dim RestitutionSautsDePage As String
     
     
            Set ShAImprimer = ActiveSheet
            ColonneTotalRemit = 7  ' Colonne G
            NbFactures = 0
            DerniereLigneFactures = Cells(ActiveSheet.Rows.Count, ColonneTotalRemit).End(xlUp).Row + 1
     
            ReDim MatriceImpression(3, NbFactures)  ' 0 : numéro, 1 : Ligne du haut, 2 : Ligne du bas, 3 : A imprimer ou rien
     
            Set AireABalayer = Columns(ColonneTotalRemit).Cells
     
            ' Recherche des factures
            '-----------------------
            For Each Cellule In AireABalayer
     
                If Cellule = "TOTAL REMIT" Then
                      LigneTotalRemit = Cellule.Row
                      If Cellule.Offset(0, 1) > 0 Then
                            Call RepererLesSautsDePageEncadrantUneFacture(LigneTotalRemit, True, DerniereLigneFactures)
                      Else
                            Call RepererLesSautsDePageEncadrantUneFacture(LigneTotalRemit, False, DerniereLigneFactures)
                      End If
                      NbFactures = NbFactures + 1
                      ReDim Preserve MatriceImpression(3, NbFactures)
               End If
     
            Next Cellule
     
            I = 0
            For NbFactures = LBound(MatriceImpression, 2) To UBound(MatriceImpression, 2)
                RestitutionSautsDePage = RestitutionSautsDePage & MatriceImpression(0, I) & " " & MatriceImpression(1, I) & " " & MatriceImpression(2, I) & " " & MatriceImpression(3, I) & Chr(10)
                I = I + 1
            Next NbFactures
     
            MsgBox (RestitutionSautsDePage)
     
     
            ' Impression des factures
            '------------------------
            For I = LBound(MatriceImpression, 2) To UBound(MatriceImpression, 2)
                If MatriceImpression(3, I) = "A imprimer" Then
     
                     Set AireAImprimer = Range(Cells(MatriceImpression(1, I), 1), Cells(MatriceImpression(2, I), ColonneTotalRemit + 1))
                   '  MsgBox ("Facture numéro : " & MatriceImpression(0, I) & " Adresse : " & AireAImprimer.Address & " " & MatriceImpression(3, I))
     
                     Call ImprimerLaFacture(AireAImprimer)
     
                   '  If I = 3 Then Exit Sub
     
                     Set AireAImprimer = Nothing
     
                End If
            Next I
     
     
            Set AireABalayer = Nothing
            Set ShAImprimer = Nothing
     
     
    End Sub

    Cordialement.

  12. #12
    Membre régulier
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Mai 2012
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Distribution

    Informations forums :
    Inscription : Mai 2012
    Messages : 173
    Points : 80
    Points
    80
    Par défaut
    Suis-je bête...

    Cette semaine, je vais le tester en grandeur nature ! je te dirais où ca en est.

    Si ca fonctionne, je le met en place sur les différents fichiers Excel

  13. #13
    Membre régulier
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Mai 2012
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Distribution

    Informations forums :
    Inscription : Mai 2012
    Messages : 173
    Points : 80
    Points
    80
    Par défaut
    Bonjour Eric,

    Comme prévu je reviens sur le test et je peux le dire que le test est très concluant.

    Sur le petit fichier de 10 factures, il a bien trouvé 2 factures à 0 qu'il n'a pas imprimer !!

    Il me reste à le mettre sur les 2 autres fichiers beaucoup plus important (un peu plus de 200 factures chaque semaine)

    Je te remercie beaucoup Eric, et je met en résolue cette discussion.

  14. #14
    Invité
    Invité(e)
    Par défaut Utiliser la macro dans une macro complémentaire
    Bonjour,

    Plutôt que de mettre la macro sur les autres fichiers, il est plus simple d'utiliser celle-ci dans une macro complémentaire. Ci-joint, la macro complémentaire Factures.xla contenant la macro ImprimerSansLesFacturesAZero.

    Pour cela, installer Factures.xla dans C:\Users\Votre User\AppData\Roaming\Microsoft\AddIns

    Puis dans Options et Compléments, cocher sur Factures, sinon aller chercher la macro avec Parcourir.

    Valider.

    La macro complémentaire apparaît maintenant dans les compléments d'Excel. En cliquant sur Factures, la macro Impression sans les factures à zéro apparaît.

    Cordialement.

  15. #15
    Membre régulier
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Mai 2012
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Distribution

    Informations forums :
    Inscription : Mai 2012
    Messages : 173
    Points : 80
    Points
    80
    Par défaut
    Le problème (enfin pour moi, je ne sais pas si le programme le fait), les autres factures n'ont pas la même disposition, la case TOTAL FACTURE ne se trouve pas a la même place par rapport au saut de pages.

    (il y a même sur un fichier où le total est dans une autre ligne et colonne par rapport au reste)

  16. #16
    Invité
    Invité(e)
    Par défaut
    Le programme teste la présence d'un total facture sur la colonne 7. Il suffit de changer de colonne pour les autres factures.

    Il faudrait expliquer pourquoi cela change et ce qui différencie les factures.

    Cordialement.

  17. #17
    Membre régulier
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Mai 2012
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Distribution

    Informations forums :
    Inscription : Mai 2012
    Messages : 173
    Points : 80
    Points
    80
    Par défaut
    Pas d'explication, les factures changent par rapport aux clients (américains ou canadiens).

    Mais ton programme est très bien !, je vais faire un xla comme tu le proposes et chaque xla correspondra a un fichier excel distinct ou alors je l'intègre dans le fichier mais faudra activer les macros.

    Je te remercie grandement pour ton aide ! Je vais économiser en moyenne 90 feuilles par semaine.

  18. #18
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Il ne faut pas créer autant de macros complémentaires que de cas, mais analyser les différences et :

    -Soit modifier le programme existant pour aller tester la colonne Total Remit et regarder quelles colonnes sont éditées.
    -Soit ajouter plusieurs programmes en fonction des différents cas. Les programmes sont lancées par des commandes supplémentaires dans le menu de la macro complémentaire.

    Cordialement.

  19. #19
    Membre régulier
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Mai 2012
    Messages
    173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Distribution

    Informations forums :
    Inscription : Mai 2012
    Messages : 173
    Points : 80
    Points
    80
    Par défaut
    J'ai bien peur de ne pas être capable de le faire moi-même, mes connaissances en programmation n'est pas basse, mais pas très élevés. Je sais lire le code et j'essaie de le comprendre pour l'écrire mais pour le moment, je ne suis pas encore capable d'écrire de tel programme.

    Le but de ce forum n'est pas de donner un produit tout fait, mais un chemin vers une solution, je trouve que tu as fais un très bon travail et vu mon niveau, ça me satisfait amplement.

    Je ne veux pas "profiter" des utilisateurs de ce forum qui est très bon !

    Rien que sur un des fichiers, il y a la facture totale qui se trouve soit a 5 ou 6 lignes au-dessus du saut de pages, de la colonne F et d'autre où le total se trouve en colonne C a plus de 10 ou 15 lignes au-dessus du saut de page. Je pense que ça fait trop d'inconnus pour arriver à faire quelque chose.

    De toute manière, ce fichier excel permet d'élaborer les factures en incluant sur un tableau, les chiffres des ventes mais le mieux (pour moi) serait de créer des états sur ACCESS.

  20. #20
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Ce qui importe c'est l'emplacement de la colonne TOTAL REMIT et que le total s'appelle bien TOTAL REMIT.

    Pour chaque Total Remit, le programme va chercher les sauts de page encadrant le total, sauf pour la dernière facture. Donc si le nombre de colonnes à éditer est le même, cela devrait être bon.

    Donc la colonne pour la détection des factures est soit 7, 6 ou 3 dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
           ColonneTotalRemit = 7  ' Colonne G
    Et si le total apparaît sous une autre appellation que TOTAL REMIT, il faut modifier la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
               If Cellule = "TOTAL REMIT" Then
    C'est à essayer.



    Cordialement.

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

Discussions similaires

  1. Impression tableau avec sauts de page
    Par pierre24 dans le forum Excel
    Réponses: 3
    Dernier message: 19/03/2014, 09h42
  2. Eviter saut de page dans cellules fusionnées
    Par guga24 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/09/2010, 16h46
  3. Réponses: 0
    Dernier message: 31/03/2010, 18h12
  4. Edition avec saut de page
    Par jaoued dans le forum BIRT
    Réponses: 2
    Dernier message: 05/07/2006, 14h54
  5. Créer un docu avec saut de page
    Par luckyvae dans le forum Langages de programmation
    Réponses: 3
    Dernier message: 26/07/2005, 15h29

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