Code apercu qui fait défaut

bonjour a vous tous

j'ai un code pour l'aperçu qui fonctionne bien quand la feuille est remplie avec un minimum de 18 lignes dessous l'entête qui en comporte elle 18 lignes, mais lorsqu'il n'y a qu'une où 17 lignes d'écrite il bug a

 ElseIf DerLig = T(K) Then

voici le code complet

Private Sub Aperçu_Click()
  Dim Sh As Worksheet, DerLig As Long
Dim Hb As HPageBreak, Nb As Long, T()
Dim K As Long, A As Long
Dim X As VbMsgBoxResult

Set Sh = Feuil9 ' Worksheets("Facture")
liste_boutons.Hide
    'Aperçu avant impression de la Feuil1
    Application.EnableEvents = False

    With Sh
        DerLig = .Cells.Find("*", LookIn:=xlValues, _
                    SearchOrder:=xlByRows, _
                    SearchDirection:=xlPrevious).Row

        'Nécessaire pour le hpagebreaks
        Application.Goto .Range("A" & DerLig)

        'Déterminer la dernière ligne pour chaque saut horizontal
        'et les placer dans une variable tableau (T)
        If .HPageBreaks.Count > 0 Then
            For Each Hb In .HPageBreaks
                K = K + 1
                ReDim Preserve T(1 To K)
                T(K) = Hb.Location.Row - 1
            Next
        End If
        Application.ScreenUpdating = True
        'Détermine le nombre de pages à imprimer

        If DerLig < 19 Then
            Application.ScreenUpdating = True
            Application.EnableEvents = True
            MsgBox "Aucune donnée dans le tableau." & vbCrLf & _
                "L'impression est annulée.", vbCrLf & _
                vbCrLf & vbInformation + vbOKOnly, "Attention"
            Exit Sub
        ElseIf DerLig = T(K) Then
           Nb = UBound(T)
        Else
            If DerLig > T(K) Then
            Nb = UBound(T) + 1
        End If

        X = MsgBox("Vous allez lancer une impression de " & Nb & " page(s)." & vbCrLf & vbCrLf & _
            "Désirez-vous affectuer une prévisualisation du document qui " & _
            "sera imprimé?", vbYesNoCancel + vbInformation, "Attention")

        'Annulation de l'impression
        If X = vbCancel Then
            .DisplayPageBreaks = False
            Application.EnableEvents = True
            Application.Goto .Range("A1"), True
            Application.ScreenUpdating = True
            Exit Sub
        End If
        Application.ScreenUpdating = False
        DoEvents
 'End With
        'Afficher / masquer les lignes à imprimer
        For A = 1 To Nb
            Select Case A
                Case 1
                    'Afficher seulement la section à imprimer
                    With .Range("D" & .Range("D18").End(xlDown).Row, .Cells(.Range("D18").End(xlDown).Row, "M")).Borders(xlEdgeBottom)
                        .LineStyle = xlContinuous
                        .Weight = xlThin
                        .Color = 0
                    End With

                Case Else
                    If A < Nb - 1 Then
                        'Afficher seulement la section à imprimer
                        With .Range("D" & T(A), .Cells(T(A), "M")).Borders(xlEdgeBottom)
                            .LineStyle = xlContinuous
                            .Weight = xlThin
                            .Color = 0
                        End With
                    Else
                        With .Range("C" & T(A - 1), .Cells(DerLig, "M")).Borders(xlEdgeBottom)
                            .LineStyle = xlContinuous
                            .Weight = xlThin
                            .Color = 0
                        End With
                    End If
            End Select
         Next
        With .PageSetup
            .PrintTitleRows = Sh.Rows("17:18").Address
        End With
        If X = vbYes Then
            .PrintPreview
        ElseIf X = vbNo Then
            .PrintOut
        End If
        .DisplayPageBreaks = False
        Application.Goto .Range("A1"), True
    End If
    End With
    Application.EnableEvents = True
    Application.ScreenUpdating = True
    liste_boutons.Show
End Sub

Pascal

Bonjour,

Le problème vient peut-être de ta zone d'impression

Cdlt

HPageBreaks, objet

Collection des sauts de page horizontaux situés dans la zone d'impression.

Lorsque la propriété Application, la propriété Count, la propriété Item, la propriété Parent ou la méthode Add est utilisée avec la propriété HPageBreaks :

1 - Pour une zone d'impression automatique, la propriété HPageBreaks s'applique uniquement aux sauts de page de la zone d'impression.

2 - Pour une zone d'impression personnalisée de la même plage, la propriété HPageBreaks s'applique à tous les sauts de page.

bonjour Jean-Eric

Merci de ta réponse mais en fait comment dois je procédé car le cas ne s'était pas réaliser avant car mes essais se sont fait avec plusieurs lignes

Pascal

Bonjour,

Si tu as défini une zone d'impression, dans gestionnaire de noms, elle doit apparaître

Sinon envoies ton fichier afin que le forum intervienne.

Cdlt

Bonjour Jean-Eric

voici mon fichier

d'ailleurs https://forum.excel-pratique.com/excel/mofifier-mode-d-enregistrement-t40939.html est du meme fichier

Pascal

Re,

A méditer. Cdlt

Sub CompterPagesImprimables()
Dim HFull As Integer, VFull As Integer, Total As Integer
'Nombre de pages imprimable dans la feuille active

    Set tbl = ActiveSheet.Range("A1").CurrentRegion
    Plage = tbl.Address
    'DernièreLigne = tbl.Rows.Count
    'DernièreColonne = tbl.Columns.Count
    MsgBox Plage
    ActiveSheet.PageSetup.PrintArea = maplage
    Set tbl = Nothing

    'ou plus simplement
    ActiveSheet.PageSetup.PrintArea = Range("A1").CurrentRegion.Address
    For Each PB In ActiveSheet.VPageBreaks
        If PB.Extent = xlPageBreakFull Then
            VFull = VFull + 1
        Else
            VPartial = VPartial + 1
        End If
    Next
    'Comme on ne compte que les sauts de pages
    VPartial = VPartial + 1
    MsgBox VFull & " sauts de page plein écran, " & VPartial & _
    " sauts de page de la zone d'impression"

    For Each PB In ActiveSheet.HPageBreaks
        If PB.Extent = xlPageBreakFull Then
            HFull = HFull + 1
        Else
            HPartial = HPartial + 1
        End If
    Next
    'Comme on ne compte que les sauts de pages
    HPartial = HPartial + 1
    MsgBox HFull & " sauts de page plein écran, " & HPartial & _
    " sauts de page de la zone d'impression"
    MsgBox "Nombre de pages total : " & (VPartial * HPartial)
    'Relecture (*)
    With ActiveSheet.PageSetup
        MsgBox "Nb pages horizontales " & .FitToPagesWide 'Marche pas (*)
        MsgBox "Nb pages verticales " & .FitToPagesTall 'Marche pas (*)
    End With

    With ActiveSheet.PageSetup
            .PaperSize = xlPaperA4
            .Zoom = 100
            .FitToPagesWide = HPartial
            .FitToPagesTall = VPartial
    End With
    Set tbl = Nothing

    'Obtenir le nombre de page total selon SilkyRoad
    MsgBox "Nombre de page total : " & ExecuteExcel4Macro("GET.DOCUMENT(50)")
End Sub
'La première Colonne des pages de gauche et la première ligne des pages du haut est 1
'Les autres commencent à PageBreak + 1
'C'est pourquoi la première ligne = 0 (AdV(0) = 0)...
'... et la première colonne = 0 (AdH(0) = 0) afin de pouvoir ajouter 1 à toutes...
'... les premières lignes et première colonnes des pages de la zone d'impression

Bonjour Jean Eric

merci du lien et de ta réponse qui ont fait mon afffaire , désoler du retard mais travail oblige

d'ailleurs celui ci n'est pas résolu

https://forum.excel-pratique.com/excel/mofifier-mode-d-enregistrement-t40939.html

Pascal

Bonsoir,

Penses à clore ce sujet.

Cdlt

Rechercher des sujets similaires à "code apercu qui fait defaut"