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 :

Les sous totaux ne s'affichent pas correctement


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué Avatar de BERRACHED SAID
    Inscrit en
    Janvier 2009
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 63

    Informations forums :
    Inscription : Janvier 2009
    Messages : 192
    Points : 125
    Points
    125
    Par défaut Les sous totaux ne s'affichent pas correctement
    Bonjour le forum

    je viens par la présente intervention vous demander votre aide pour améliorer un code qui ne fonctionne pas correctement.

    a savoir : lors des calcules il y a que le premier saut de page qui affiche totaux et sous totaux ainsi que le total général qui bon
    les autres saut de page n'affichent rien.

    touts les explication sont dans le classeur en pièce jointe.

    merci d'avance et bonne journée messieurs dames.
    Fichiers attachés Fichiers attachés

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2012
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2012
    Messages : 20
    Points : 33
    Points
    33
    Par défaut initialise le i et le j
    '===========================================***Partie 3 : gestion des sauts de page ======================================================
    ' le problème tu dois initialiser le i=0 et j=0
    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
    For Each pb In ActiveSheet.HPageBreaks
        i = i + 1 '***incrémente le n°de saut de page général(Permet de gérer le cas de sauts de pages externes à la zone d'impression)
         If pb.Extent = xlPageBreakPartial Then
            j = j + 1  '***incrémente le n°de saut de page de la zone d'impression
            Set Cpb = ActiveSheet.HPageBreaks(i).Location
            If Cpb.Value <> "Report Sous-Total" Then
                ActiveSheet.Range(ActiveSheet.Cells(Cpb.Row - 1, Cpb.Column), ActiveSheet.Cells(Cpb.Row, Cpb.Column)).EntireRow.Insert (xlShiftDown)
                ActiveSheet.Cells(Cpb.Row - 3, Cpb.Column) = "Sous-Total"
                    If j = 1 Then
                        ActiveSheet.Cells(Cpb.Row - 3, "I").Formula = "=SUM(I16:I" & Cpb.Row - 4 & ")"
     
                            With ActiveSheet.Range(ActiveSheet.Cells(Cpb.Row - 3, "D"), ActiveSheet.Cells(Cpb.Row - 2, "I"))
                                .Interior.ColorIndex = 40
                                .Font.Bold = True
                            End With
                    Else
                        k = WorksheetFunction.Max(2, ActiveSheet.HPageBreaks(i - 1).Location.Row)
                        ActiveSheet.Cells(Cpb.Row - 3, "I").Formula = "=SUM(I" & k & ":I" & Cpb.Row - 4 & ")"
     
                            With ActiveSheet.Range(ActiveSheet.Cells(Cpb.Row - 3, "D"), ActiveSheet.Cells(Cpb.Row - 2, "I"))
                                .Interior.ColorIndex = 40
                                .Font.Bold = True
                            End With
                    End If
                ActiveSheet.Cells(Cpb.Row - 2, Cpb.Column) = "Report Sous-Total"
                ActiveSheet.Cells(Cpb.Row - 2, "I") = ActiveSheet.Cells(Cpb.Row - 3, "I")
     
            End If
        End If
    Next

  3. #3
    Membre habitué Avatar de BERRACHED SAID
    Inscrit en
    Janvier 2009
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 63

    Informations forums :
    Inscription : Janvier 2009
    Messages : 192
    Points : 125
    Points
    125
    Par défaut
    salam abdelkhalek

    j'ai initier les variables j et i a zero

    mais il me donne toujours le même résultat une seule page break la 1ere qui affiche totaux et sous totaux les autres non

    a+ merci

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2012
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2012
    Messages : 20
    Points : 33
    Points
    33
    Par défaut modifie le mode d'affichage
    Bonjour;

    Modifie le mode d'affichage dans la barre d’état en aperçu des sauts de page au lieu de normal et exécute ton code

    bn chane

  5. #5
    Membre habitué Avatar de BERRACHED SAID
    Inscrit en
    Janvier 2009
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 63

    Informations forums :
    Inscription : Janvier 2009
    Messages : 192
    Points : 125
    Points
    125
    Par défaut
    Merci abdelkhalek pour ta réponse

    appartement ça marche bien , mais j'ai un autre souci je voudrais limiter le nombre de lignes dans un saut de page a 40 lignes pour avoir une bonne disposition lors de l'impression

    donc j'ai pensée a déclaré une variable disons : Dim h as string puis lui attribué un nombre disons : h = 40 mais sincèrement j'ai pas su ou la mettre dans le présent code :

    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
    Sub InserST()
    Dim pb As Object
    Dim C As Range
    Dim i As Byte, j As Byte, k As Byte
    Dim ReportSTe As Double, ReportSTf As Doubl
    Dim h As Integer
    'Dim Last As Integer
    ActiveWindow.View = xlPageBreakPreview
    '***********************************Partie 1 : Suppression des sous-totaux*******************************************************************************
    With ActiveSheet.Range("D16:D" & Range("D" & Application.Rows.Count).End(xlUp).Row)
        Do
            Set C = .Find("Total")
            If Not C Is Nothing Then
                Cells(C.Row, "D").EntireRow.Delete
            End If
        Loop While Not C Is Nothing
    End With
     
    '***********************************Partie 2 : Définition auto de la zone d'impression*******************************************************************
     
    ActiveSheet.PageSetup.PrintArea = "$D$1:" & Range("I" & Application.Rows.Count).End(xlUp).Address
     
    '***********************************Partie 3 : gestion des sauts de page*********************************************************************************
    i = 0
    j = 0
    For Each pb In ActiveSheet.HPageBreaks
        i = i + 1 '***incrémente le n°de saut de page général(Permet de gérer le cas de sauts de pages externes à la zone d'impression)
        If pb.Extent = xlPageBreakPartial Then
            j = j + 1  '***incrémente le n°de saut de page de la zone d'impression
            Set Cpb = ActiveSheet.HPageBreaks(i).Location
            If Cpb.Value <> "Report Sous-Total" Then
                Range(Cells(Cpb.Row - 1, Cpb.Column), Cells(Cpb.Row, Cpb.Column)).EntireRow.Insert (xlShiftDown)
                Cells(Cpb.Row - 3, Cpb.Column) = "Sous-Total"
                    If j = 1 Then
                        Cells(Cpb.Row - 3, "I").Formula = "=SUM(I16:I" & Cpb.Row - 4 & ")"
     
                            With Range(Cells(Cpb.Row - 3, "D"), Cells(Cpb.Row - 2, "I"))
                                .Interior.ColorIndex = 40
                                .Font.Bold = True
                            End With
                    Else
                        k = WorksheetFunction.Max(9, ActiveSheet.HPageBreaks(i - 1).Location.Row)
                        Cells(Cpb.Row - 3, "I").Formula = "=SUM(I" & k & ":I" & Cpb.Row - 4 & ")"
     
                            With Range(Cells(Cpb.Row - 3, "D"), Cells(Cpb.Row - 2, "I"))
                                .Interior.ColorIndex = 40
                                .Font.Bold = True
                            End With
                    End If
                Cells(Cpb.Row - 2, Cpb.Column) = "Report Sous-Total"
                Cells(Cpb.Row - 2, "I") = Cells(Cpb.Row - 3, "I")
     
            End If
        End If
    Next
     
    '******************************************Partie 4 : Affichage du total bas de page *****************************************************************************************
     
    Last = Range("D" & Application.Rows.Count).End(xlUp).Row
        If Cells(Last, "D") <> "Total Général" Then
            Cells(Last, "D").EntireRow.Insert (xlShiftDown) '**Permet d'étendre la zone d'impression
            Range(Cells(Last + 1, "D"), Cells(Last + 1, "I")).Copy (Cells(Last, "D"))
            Cells(Last + 1, "D").EntireRow.ClearContents
            Cells(Last + 1, "D") = "Total Général"
            ActiveSheet.Cells(Last + 1, "I") = "=SUM(I" & WorksheetFunction.Max(9, Cpb.Row - 2) & ":I" & Last & ")+I5"
            'Cells(Last + 1, "F") = "=SUM(F" & WorksheetFunction.Max(9, Cpb.Row - 2) & ":F" & Last & ")+F5"
     
            With Range(Cells(Last + 1, "D"), Cells(Last + 1, "I"))
                .Interior.ColorIndex = 45
                .Font.Bold = True
            End With
        End If
        ActiveWindow.View = xlNormalView
         'miseEnPageAvantImpression
         'Ajuster
         Application.Dialogs(xlDialogPrint).Show
    End Sub
    Merci beaucoup et d'avance a ceux qui veulent bien m'aider

    e

  6. #6
    Membre habitué Avatar de BERRACHED SAID
    Inscrit en
    Janvier 2009
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 63

    Informations forums :
    Inscription : Janvier 2009
    Messages : 192
    Points : 125
    Points
    125
    Par défaut
    bonjour le forum


    j'ai essayé de modifier ce bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range(Cells(Cpb.Row - 1, Cpb.Column), Cells(Cpb.Row + 40, Cpb.Column)).EntireRow.Insert (xlShiftDown)
    pour limiter le nombre de ligne a 40 dans le saut de page mais vraiment un carnage dans l’aperçu.

    j'attend vos précieuses réponses.
    A+

Discussions similaires

  1. [IE 7] Les sous-menus ne s'affichent pas
    Par slowpoke dans le forum IE
    Réponses: 0
    Dernier message: 07/07/2009, 10h02
  2. Menu CSS : les sous menus ne s'affichent pas
    Par pci130 dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 29/05/2009, 18h33
  3. Réponses: 4
    Dernier message: 31/01/2009, 13h35
  4. [XHTML]Les images survolées ne s'affichent pas sous firefox
    Par Malola dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 19/09/2008, 09h19
  5. les é et è ne s'affiche pas correctement
    Par pierrot10 dans le forum Flash
    Réponses: 4
    Dernier message: 05/03/2007, 09h32

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