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 :

Méthode select de la classe range a échoué


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 Méthode select de la classe range a échoué
    Bonjour le Forum
    Merci Ashireon

    ça marche très bien merci encore pour le coup de main.

    j'apprécier énormément

    je galéré encore sur un autre code pour finaliser le projet c'est toujours cette Select que je n'arrive pas contourner j'ai essayé avec With
    mais rien a faire "la méthode select de la classe range a échoué"

    voila le code originale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Feuil2.Range("F" & Application.Rows.Count).End(xlUp).Select
    voila ce que j'ai modifier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With Worksheets("Imprim")
        .Range("F" & Application.Rows.Count).End(xlUp).Select
        End With
    il régénéré la même erreur dans les deux cas.

    Merci encore et bonne journée.

  2. #2
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonjour à tou(te)s,

    A mon avis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With Worksheets("Imprim")
        .Range("F" & .Rows.Count).End(xlUp).Select
    End With
    Mais souvent les "Select" sont inutiles

  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
    Bonjour casefayere et merci

    même avec ta proposition elle renvoi le meme erreur.

    bonne journée

  4. #4
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    A tout hasard, vérifies le nom de ta feuille "Imprim" car je trouve cette erreur bizarre, vérifies également si F contient bien des données, une erreur d'écriture dans le code est toujours possible

  5. #5
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    A tout hasard, esssaie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Feuil2.Activate
    Feuil2.Range("F" & Application.Rows.Count).End(xlUp).Select

  6. #6
    Invité
    Invité(e)
    Par défaut Bonjour test ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Worksheets("Imprim").Select
     
    With Worksheets("Imprim")
        .Range("F" & .Rows.Count).End(xlUp).Select
    End With

  7. #7
    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 beaucoup aux gens qui on bien voulu m'aider

    sachez messieurs que j'ai essayé tous ces bout de codes mais
    l'erreur persiste toujours du fait biensure que je travaille sur une Interface utilisateur et toutes les manipulations se font a partir de cette interface a l'aide de divers Userformes destinées a modifier,supprimer, saisie,imprimer
    les autres feuilles utilisées comme base de données sont inaccessible a l’utilisateur de ce projet il me parait logique quant tu utilise Select a partir de l'interface il renvoi l'erreur mais car il y a toujours un mais comment contourner le problème.

    je vous remis le code qui sert a me faire les totaux et sous totaux avec les reports dans saut de page pour la feuill2 biensure.

    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
    Sub soustotal()
    Dim pb As Object
    Dim C As Range
    Dim i As Byte, k As Byte, PBc As Byte
    Dim ReportSTe As Double, ReportSTf As Double
    Dim Last As Integer
    'Application.ScreenUpdating = False
     
    j = 0
    '***Partie 1 : Suppression des sous-totaux et des messages d'alerte
    Set Plage = Feuil2.Range("A2:E" & Range("E" & Application.Rows.Count).End(xlUp).Row)
    With Plage
        Do
            Set C = .Find("Total")
            If Not C Is Nothing Then
                Cells(C.Row, "A").EntireRow.Delete
            End If
        Loop While Not C Is Nothing
    End With
     
    '***Suppression des messages d'alerte spécifique à news
    'With Range("C2:E" & Range("E" & Application.Rows.Count).End(xlUp).Row)
        '.ClearContents
        '.Interior.ColorIndex = xlNone
    'End With
    '*******************************************************
     
     
    'Application.ScreenUpdating = True
     
    '***Partie 3 : Définition auto de la zone d'impression
     
    ActiveSheet.PageSetup.PrintArea = "$A$1:" & Feuil2.Range("E" & Application.Rows.Count).End(xlUp).Address
     
    '***Partie 4 : gestion des sauts de page
     
    PBinit = 1
    Do
        Call GestSautPage
     
     
    '- ------------------ ERREUR ICI
    Feuil2.Range("E" & Application.Rows.Count).End(xlUp).Select
      '----------------------
        PBc = ActiveSheet.HPageBreaks.Count
     
    Loop While PBinit <= PBc
     
    '***Partie 5 : Affichage du total bas de page
    Application.ScreenUpdating = False
    Last = Feuil2.Range("A" & Application.Rows.Count).End(xlUp).Row
    Feuil2.Range(Feuil2.Cells(Last, "A"), Feuil2.Cells(Last + 1, "A")).EntireRow.Insert (xlShiftDown) '**Permet d'étendre la zone d'impression
    Feuil2.Range(Feuil2.Cells(Last + 2, "A"), Feuil2.Cells(Last + 2, "E")).Copy (Feuil2.Cells(Last, "A"))
    Feuil2.Cells(Last + 2, "A").EntireRow.ClearContents
    Feuil2.Cells(Last + 2, "A") = "Total Général"
    Feuil2.Cells(Last + 1, "A") = "Sous-Total"
     
        If j = 0 Then
            Feuil2.Cells(Last + 2, "C") = "=SUM(C2:C" & Last & ")" '+J5"
            Feuil2.Cells(Last + 2, "D") = "=SUM(D2:D" & Last & ")" '+K5"
            Feuil2.Cells(Last + 2, "E") = "=SUM(E2:E" & Last & ")" '+L5"
     
     
            Feuil2.Cells(Last + 1, "C") = "=SUM(C2:C" & Last & ")"
            Feuil2.Cells(Last + 1, "D") = "=SUM(D2:D" & Last & ")"
            Feuil2.Cells(Last + 1, "E") = "=SUM(E2:E" & Last & ")"
     
     
        Else
            Feuil2.Cells(Last + 2, "C") = "=SUM(C" & WorksheetFunction.Max(2, Cpb.Row - 2) & ":C" & Last & ")" '+J5"
            Feuil2.Cells(Last + 2, "D") = "=SUM(D" & WorksheetFunction.Max(2, Cpb.Row - 2) & ":D" & Last & ")" '+K5"
            Feuil2.Cells(Last + 2, "E") = "=SUM(E" & WorksheetFunction.Max(2, Cpb.Row - 2) & ":E" & Last & ")" '+L5"
     
     
            Feuil2.Cells(Last + 1, "C") = "=SUM(C" & WorksheetFunction.Max(2, Cpb.Row - 2) & ":C" & Last & ")"
            Feuil2.Cells(Last + 1, "D") = "=SUM(D" & WorksheetFunction.Max(2, Cpb.Row - 2) & ":D" & Last & ")"
            Feuil2.Cells(Last + 1, "E") = "=SUM(E" & WorksheetFunction.Max(2, Cpb.Row - 2) & ":E" & Last & ")"
     
        End If
     
        '***Suppression spécifique à news
        With Feuil2.Cells(Last + 2, "E")
            .Interior.ColorIndex = xlNone
        End With
        '********************************
     
        With Feuil2.Range(Feuil2.Cells(Last + 1, "A"), Feuil2.Cells(Last + 1, "E"))
            .Interior.ColorIndex = 40
            .Font.Bold = True
        End With
     
        With Feuil2.Range(Feuil2.Cells(Last + 2, "A"), Feuil2.Cells(Last + 2, "E"))
            .Interior.ColorIndex = 45
            .Font.Bold = True
        End With
     
     Application.ScreenUpdating = True
     
    End Sub
    l'erreur est coloré en jaune ligne 43

    Merci a vous tous et j'apprécier votre aide énormément

  8. #8
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    Bonjour,

    tu n'as pas répondu :

    Citation Envoyé par casefayere Voir le message
    A tout hasard, vérifies le nom de ta feuille "Imprim" car je trouve cette erreur bizarre, vérifies également si F contient bien des données, une erreur d'écriture dans le code est toujours possible

    et à quoi sert ton instruction Select ?

  9. #9
    Invité
    Invité(e)
    Par défaut
    Bonjour le fil, bonjour Said

    Juste une chose, il est fortement recommandé de ne pas utiliser de "select" avec une interface utilisateur comme tu l'appelles

    Que contient ta Sub GestSautPage ?

    Sinon, essaye
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Feuil2.Range("E" & Feuil2.Rows.Count).End(xlUp).Select
    A+

  10. #10
    Membre expérimenté
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Points : 1 499
    Points
    1 499
    Par défaut methode select de la classe range a échoué
    Bonjour,

    Que cherches-tu à faire avec end(xlup) :
    je ne pense pas que tu veux remonter à chaque passage dans la boucle à la première ligne du fichier sinon mieux vaut écrire directement le numéro de cette ligne.
    Si par contre tu cherches à te positionner sur la dernière ligne, cette instruction ne vaut que si tu te trouves au delà de cette ligne, ce qui est peu probable.

    Par ailleurs PbInit n'est pas déclarée.

    cordialement.

  11. #11
    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

    salut Bruno content de te revoir ça fait un bail

    j'ai vérifier le nom de la feuille ainsi le contenu de la cellule je crois qu'il y problème de se coté la.

    cette ligne sert a déterminer les sauts de pages pour pouvoir poser les totaux et sous totaux.

    pour la question de bruno je vous met l'autre macro,j'ai remplacé par ce que tu m'a proposé c'est toujours la même erreur.

    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
    Sub GestSautPage()
    'Application.ScreenUpdating = False
    For i = PBinit To ActiveSheet.HPageBreaks.Count
        If ActiveSheet.HPageBreaks(i).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
                Feuil2.Range(Cells(Cpb.Row - 1, Cpb.Column), Cells(Cpb.Row, Cpb.Column)).EntireRow.Insert (xlShiftDown)
                Feuil2.Cells(Cpb.Row - 3, Cpb.Column) = "Sous-Total"
                    If j = 1 Then
                        Feuil2.Cells(Cpb.Row - 3, "C").Formula = "=SUM(C2:C" & Cpb.Row - 4 & ")"
                        Feuil2.Cells(Cpb.Row - 3, "D").Formula = "=SUM(D2:D" & Cpb.Row - 4 & ")"
                        Feuil2.Cells(Cpb.Row - 3, "E").Formula = "=SUM(E2:E" & Cpb.Row - 4 & ")"
     
     
                            With Feuil2.Range(Cells(Cpb.Row - 3, "A"), Cells(Cpb.Row - 2, "E"))
                                .Interior.ColorIndex = 40
                                .Font.Bold = True
                            End With
                    Else
                        k = WorksheetFunction.Max(2, ActiveSheet.HPageBreaks(i - 1).Location.Row)
                        Feuil2.Cells(Cpb.Row - 3, "C").Formula = "=SUM(C" & k & ":C" & Cpb.Row - 4 & ")"
                        Feuil2.Cells(Cpb.Row - 3, "D").Formula = "=SUM(D" & k & ":D" & Cpb.Row - 4 & ")"
                        Feuil2.Cells(Cpb.Row - 3, "E").Formula = "=SUM(E" & k & ":E" & Cpb.Row - 4 & ")"
     
     
                            With Feuil2.Range(Cells(Cpb.Row - 3, "A"), Cells(Cpb.Row - 2, "E"))
                                .Interior.ColorIndex = 40
                                .Font.Bold = True
                            End With
                    End If
     
                Feuil2.Cells(Cpb.Row - 2, Cpb.Column) = "Report Sous-Total"
                Feuil2.Cells(Cpb.Row - 2, "C") = Cells(Cpb.Row - 3, "C")
                Feuil2.Cells(Cpb.Row - 2, "D") = Cells(Cpb.Row - 3, "D")
                Feuil2.Cells(Cpb.Row - 2, "E") = Cells(Cpb.Row - 3, "E")
            End If
        End If
    Next
    PBinit = i
    'Application.ScreenUpdating = True
    End Sub
    excellente journée a tout(e)s
    merci beaucoup

  12. #12
    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
    Salut tous le monde

    je me suis cassé la tête tout la journée en nettoyant le code j'ai parvenu a l'améliorer un peu seulement un petit réglage est nécessaire je m'explique :

    pour un fichier contenant 39 lignes (Enregistrements) il m'affiche Total Général mais il calcule rien les colonnes C,D,E vide.

    je l'ai essayé sur un autre fichier contenant 97 lignes (Enregistrements) il fonctionne bien avec totaux sous totaux report et total general.

    je tourne en rond presque la journée si quelqu'un a une idée je suis preneur merci

    voici le 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 saut_de_zaza()
    Dim pb As Object
    Dim Cpb As Range, C As Range
    Dim i As Byte, j As Byte, k As Byte
    Dim ReportSTe As Double, ReportSTf As Double
    Dim Last As Integer
    On Error Resume Next
     
    '=====================================***Partie 1 : Suppression des sous-totaux=============================================================
    With Feuil2.Range("A2:A" & Range("A" & Application.Rows.Count).End(xlUp).Row)
        Do
            Set C = .Find("Total")
            If Not C Is Nothing Then
                Feuil2.Cells(C.Row, "A").EntireRow.Delete
            End If
        Loop While Not C Is Nothing
    End With
     
    '***Partie 2 : Définition auto de la zone d'impression
     
    Feuil2.PageSetup.PrintArea = "$A$2:" & Range("E" & Application.Rows.Count).End(xlUp).Address '"$F$52"
     
    '===========================================***Partie 3 : gestion des sauts de page ======================================================
     
    For Each pb In Feuil2.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 = Feuil2.HPageBreaks(i).Location
            If Cpb.Value <> "Report Sous-Total" Then
                Feuil2.Range(Feuil2.Cells(Cpb.Row - 1, Cpb.Column), Feuil2.Cells(Cpb.Row, Cpb.Column)).EntireRow.Insert (xlShiftDown)
                Feuil2.Cells(Cpb.Row - 3, Cpb.Column) = "Sous-Total"
                    If j = 1 Then
                        Feuil2.Cells(Cpb.Row - 3, "C").Formula = "=SUM(C2:C" & Cpb.Row - 4 & ")"
                        Feuil2.Cells(Cpb.Row - 3, "D").Formula = "=SUM(D2:D" & Cpb.Row - 4 & ")"
                        Feuil2.Cells(Cpb.Row - 3, "E").Formula = "=SUM(E2:E" & Cpb.Row - 4 & ")"
                            With Feuil2.Range(Feuil2.Cells(Cpb.Row - 3, "A"), Feuil2.Cells(Cpb.Row - 2, "E"))
                                .Interior.ColorIndex = 40
                                .Font.Bold = True
                            End With
                    Else
                        k = WorksheetFunction.Max(2, Feuil2.HPageBreaks(i - 1).Location.Row)
                        Feuil2.Cells(Cpb.Row - 3, "C").Formula = "=SUM(C" & k & ":C" & Cpb.Row - 4 & ")"
                        Feuil2.Cells(Cpb.Row - 3, "D").Formula = "=SUM(D" & k & ":D" & Cpb.Row - 4 & ")"
                        Feuil2.Cells(Cpb.Row - 3, "E").Formula = "=SUM(E" & k & ":E" & Cpb.Row - 4 & ")"
                            With Feuil2.Range(Feuil2.Cells(Cpb.Row - 3, "A"), Feuil2.Cells(Cpb.Row - 2, "E"))
                                .Interior.ColorIndex = 40
                                .Font.Bold = True
                            End With
                    End If
                Feuil2.Cells(Cpb.Row - 2, Cpb.Column) = "Report Sous-Total"
                Feuil2.Cells(Cpb.Row - 2, "C") = Feuil2.Cells(Cpb.Row - 3, "C")
                Feuil2.Cells(Cpb.Row - 2, "D") = Feuil2.Cells(Cpb.Row - 3, "D")
                Feuil2.Cells(Cpb.Row - 2, "E") = Feuil2.Cells(Cpb.Row - 3, "E")
            End If
        End If
    Next
     
    '=====================================***Partie 4 : Affichage du total bas de page ====================================================
     
    Last = Feuil2.Range("A" & Application.Rows.Count).End(xlUp).Row
        If Feuil2.Cells(Last, "A") <> "Total Général" Then
        Feuil2.Cells(Last, "A").EntireRow.Insert (xlShiftDown) '**Permet d'étendre la zone d'impression
            Feuil2.Range(Feuil2.Cells(Last + 1, "A"), Feuil2.Cells(Last + 1, "E")).Copy (Feuil2.Cells(Last, "A"))
            Feuil2.Cells(Last + 1, "A").EntireRow.ClearContents
            Feuil2.Cells(Last + 1, "A") = "Total Général"
            Feuil2.Cells(Last + 1, "C") = "=SUM(C" & WorksheetFunction.Max(2, Cpb.Row - 2) & ":C" & Last & ")+C5"
            Feuil2.Cells(Last + 1, "D") = "=SUM(D" & WorksheetFunction.Max(2, Cpb.Row - 2) & ":D" & Last & ")+D5"
            Feuil2.Cells(Last + 1, "E") = "=SUM(E" & WorksheetFunction.Max(2, Cpb.Row - 2) & ":E" & Last & ")+E5"
     
            With Feuil2.Range(Feuil2.Cells(Last + 1, "A"), Feuil2.Cells(Last + 1, "E"))
                .Interior.ColorIndex = 45
                .Font.Bold = True
            End With
        End If
     
    End Sub
    Merci d'avance et excellente soirée

  13. #13
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    Bonjour,
    Enleve le On error resume next et traite serieusement les erreurs s'il y as lieu ... plutot que simplement les ignorer..

  14. #14
    Membre expérimenté
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Points : 1 499
    Points
    1 499
    Par défaut methode select de la classe range a échoué
    Bonjour,

    Ci-joint fichier reprenant la procédure appelante et la procédure appelée (première version saut de page).

    J'ai rajouté l'argument pbinit à l'appel de procédure.

    Il n'y a plus le bocage 1004 sur la ligne indiquée et les totaux sont bien là.
    par contre il bloque pour un dépassement de capacité après le else sur la variable k; ce qui l’empêche de faire les derniers totaux.

    Est-ce le résultat auquel tu arrives ?

    cordialement.
    Fichiers attachés Fichiers attachés

  15. #15
    Membre averti
    Homme Profil pro
    Responsable Maintenance
    Inscrit en
    Août 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable Maintenance

    Informations forums :
    Inscription : Août 2012
    Messages : 478
    Points : 442
    Points
    442
    Par défaut
    Hello,

    Donc pour sélectionnée une cellule il faut être sur que la feuille concernée soit activé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Sheets("Imprim").activate
    Sheets("Imprim").range("F" & rows.count).end(xlup).select
    JE viens de tester si je lance la macro d'origine et que je suis sur la bonne feuille effectivement Ton code marche mais il suffit que la feuille ne soit pas active et que je soit dans une autre feuille cette dernière ne fonctionne pas.
    Si tu active la feuille avant ta sélection tout va bien...
    Par contre assure toi que tu aie au moins une valeur dans la colonne F de la feuille ("Imprim")

  16. #16
    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 bonjour Ashireon

    Merci pour ta réponse

    jusqu’à maintenant je n'arrive pas a bien faire fonctionner se code pourtant il
    fonctionne bien pour au delà d'un saut de page mais pour un seul saut il calcule rien du tous j'ai enlevé on error resume next pour voir un peu ou il bloque
    il s'est arrête sur cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Feuil2.Cells(Last + 1, "C") = "=SUM(C" & WorksheetFunction.Max(9, Cpb.Row - 2) & ":C" & Last & ")+C5"
    variable objet ou variable de bloc with non définie, en cherchant plus loin je crois que le problème provient certainement de la variable Cpb et pb dés le départ elle sont Vide on les consultants ça donne Nothing

    je crois devant cette récalcitrante erreur je finirais par abandonner

    merci et bonne journée

    voici la totalité du code en question :

    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
    Dim pb As Object
    Dim Cpb As Range, C As Range
    Dim I As Byte, j As Byte, k As Byte
    Dim ReportSTe As Double, ReportSTf As Double
    Dim Last As Integer
    'On Error Resume Next
     
    '=====================================***Partie 1 : Suppression des sous-totaux=============================================================
    With Feuil2.Range("A2:A" & Range("A" & Application.Rows.Count).End(xlUp).Row)
        Do
            Set C = .Find("Total")
            If Not C Is Nothing Then
                Feuil2.Cells(C.Row, "A").EntireRow.Delete
            End If
        Loop While Not C Is Nothing
    End With
     
    '***Partie 2 : Définition auto de la zone d'impression
     
    Feuil2.PageSetup.PrintArea = "$A$2:" & Range("E" & Application.Rows.Count).End(xlUp).Address '"$F$52"
     
    '===========================================***Partie 3 : gestion des sauts de page ======================================================
     
     
    For Each pb In Feuil2.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 = Feuil2.HPageBreaks(I).Location
            If Cpb.Value <> "Report Sous-Total" Then
                Feuil2.Range(Feuil2.Cells(Cpb.Row - 1, Cpb.Column), Feuil2.Cells(Cpb.Row, Cpb.Column)).EntireRow.Insert (xlShiftDown)
                Feuil2.Cells(Cpb.Row - 3, Cpb.Column) = "Sous-Total"
                    If j = 1 Then
                        Feuil2.Cells(Cpb.Row - 3, "C").Formula = "=SUM(C2:C" & Cpb.Row - 4 & ")"
                        Feuil2.Cells(Cpb.Row - 3, "D").Formula = "=SUM(D2:D" & Cpb.Row - 4 & ")"
                        Feuil2.Cells(Cpb.Row - 3, "E").Formula = "=SUM(E2:E" & Cpb.Row - 4 & ")"
                            With Feuil2.Range(Feuil2.Cells(Cpb.Row - 3, "A"), Feuil2.Cells(Cpb.Row - 2, "E"))
                                .Interior.ColorIndex = 40
                                .Font.Bold = True
                            End With
                    Else
                        k = WorksheetFunction.Max(9, Feuil2.HPageBreaks(I - 1).Location.Row)
                        Feuil2.Cells(Cpb.Row - 3, "C").Formula = "=SUM(C" & k & ":C" & Cpb.Row - 4 & ")"
                        Feuil2.Cells(Cpb.Row - 3, "D").Formula = "=SUM(D" & k & ":D" & Cpb.Row - 4 & ")"
                        Feuil2.Cells(Cpb.Row - 3, "E").Formula = "=SUM(E" & k & ":E" & Cpb.Row - 4 & ")"
                            With Feuil2.Range(Feuil2.Cells(Cpb.Row - 3, "A"), Feuil2.Cells(Cpb.Row - 2, "E"))
                                .Interior.ColorIndex = 40
                                .Font.Bold = True
                            End With
                    End If
                Feuil2.Cells(Cpb.Row - 2, Cpb.Column) = "Report Sous-Total"
                Feuil2.Cells(Cpb.Row - 2, "C") = Feuil2.Cells(Cpb.Row - 3, "C")
                Feuil2.Cells(Cpb.Row - 2, "D") = Feuil2.Cells(Cpb.Row - 3, "D")
                Feuil2.Cells(Cpb.Row - 2, "E") = Feuil2.Cells(Cpb.Row - 3, "E")
            End If
        End If
    Next
     
    '=====================================***Partie 4 : Affichage du total bas de page ====================================================
     
    Last = Feuil2.Range("A" & Application.Rows.Count).End(xlUp).Row
        If Feuil2.Cells(Last, "A") <> "Total Général" Then
        Feuil2.Cells(Last, "A").EntireRow.Insert (xlShiftDown) '**Permet d'étendre la zone d'impression
            Feuil2.Range(Feuil2.Cells(Last + 1, "A"), Feuil2.Cells(Last + 1, "E")).Copy (Feuil2.Cells(Last, "A"))
            Feuil2.Cells(Last + 1, "A").EntireRow.ClearContents
            Feuil2.Cells(Last + 1, "A") = "Total Général"
     
     
            Feuil2.Cells(Last + 1, "C") = "=SUM(C" & WorksheetFunction.Max(9, Cpb.Row - 2) & ":C" & Last & ")+C5"
            Feuil2.Cells(Last + 1, "D") = "=SUM(D" & WorksheetFunction.Max(9, Cpb.Row - 2) & ":D" & Last & ")+D5"
            Feuil2.Cells(Last + 1, "E") = "=SUM(E" & WorksheetFunction.Max(9, Cpb.Row - 2) & ":E" & Last & ")+E5"
     
            With Feuil2.Range(Feuil2.Cells(Last + 1, "A"), Feuil2.Cells(Last + 1, "E"))
                .Interior.ColorIndex = 45
                .Font.Bold = True
            End With
        End If
     
    End Sub

  17. #17
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    Bonsoir,

    ben je crois que tu as la solution si pb est nul Cpb est nul ... et donc tu dois réfléchir à ce que tu dois faire dans ce cas la ...

    c'est à dire lorsque tu ne passe pas dans ta boucle FOR pb...

  18. #18
    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 bonjour bbil

    Merci bbil pour le conseil

    j'ai trouvé une autre alternative a mon problème c'est en créant un autre module qui s'en charge des totaux quant le nombre de lignes et < 50 puisque le premier code ne le fait pas appelant ça un module sous-traitant j’espère qui continue a fonctionner convenablement, avec le VBA sait-on jamais ?

    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 InserST2()
      Dim lig As Long
     
      If lig > 50 Then
      Exit Sub
      End If
     
          For lig = Feuil2.Cells(Rows.Count, "A").End(xlUp).Row To 2 Step -1
            If Feuil2.Cells(lig, "A") = "Total Général" Then
            Feuil2.Range(Feuil2.Cells(lig, "A"), Feuil2.Cells(lig, "A")).EntireRow.Insert (xlShiftDown)
            Feuil2.Cells(lig + 1, "C") = "=SUM(C2:C" & lig & ")"
            Feuil2.Cells(lig + 1, "D") = "=SUM(D2:D" & lig & ")"
            Feuil2.Cells(lig + 1, "E") = "=SUM(E2:E" & lig & ")"
            End If
            Next lig
     
    End Sub
    j'aimerais bien avoir vos avis la dessus

    Bonne journée et encore merci pour l'aide que vous avez bien eu l'obligeance de me fournir.

  19. #19
    Membre expérimenté
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Points : 1 499
    Points
    1 499
    Par défaut methode select de la classe range a échoué
    bonjour,

    je propose en lieu et place de ta routine ci-dessu de modifier la partie 4 comme ceci:

    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
    '
    =====================================***Partie 4 : Affichage du total bas de page ====================================================
     
    Last = Feuil2.Range("A" & Application.Rows.Count).End(xlUp).Row
    If Feuil2.Cells(Last, "A") <> "Total Général" Then
    Feuil2.Cells(Last + 1, "A").EntireRow.Insert (xlShiftDown) '**Permet d'étendre la zone d'impression
    Feuil2.Cells(Last + 1, "A") = "Total Général"
     
    With Feuil2.Range(Feuil2.Cells(Last + 1, "A"), Feuil2.Cells(Last + 1, "E"))
                .Interior.ColorIndex = 45
                .Font.Bold = True
    End With
     
    If Cpb.Row = Lastinit Then
       Feuil2.Cells(Last + 1, "C") = "=SUM(C2:C" & Last & ")+C5"
       Feuil2.Cells(Last + 1, "D") = "=SUM(D2:D" & Last & ")+D5"
       Feuil2.Cells(Last + 1, "E") = "=SUM(E2:E" & Last & ")+E5"
    Else
       Feuil2.Cells(Last + 1, "C") = "=SUM(C" & WorksheetFunction.Max(9, Cpb.Row - 2) & ":C" & Last & ")+C5"
       Feuil2.Cells(Last + 1, "D") = "=SUM(D" & WorksheetFunction.Max(9, Cpb.Row - 2) & ":D" & Last & ")+D5"
       Feuil2.Cells(Last + 1, "E") = "=SUM(E" & WorksheetFunction.Max(9, Cpb.Row - 2) & ":E" & Last & ")+E5"
    End If
     
        ' End If
     
    End Sub
    pour cela, il convient de rajouter en partie 2 après la ligne feuil2 .......

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Lastinit = Feuil2.Range("A" & Application.Rows.Count).End(xlUp).Row
    Set Cpb = Cells(Lastinit, 1)
    je te rappelle par ailleurs que ta routine gestionsaut initiale pouvait être appelée sans problème si tu avais déclaré public pbinit dans le module

    cordialement.

  20. #20
    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 nibeldispo

    c'est merveilleux du beau travail

    mais il y a un souci j'ai déclarer la variable Lastinit As Integer elle n’était pas déclarer a savoir si c'est bon ou non ?

    le souci c'est quant j’exécute le code tout en étant positionné sur la feuil2 c'est impeccable les totaux et les sous totaux, mais quant je l’exécute a partir de l'interface il me donne que le total général sans les sous totaux.

    pourquoi ? Reste a savoir mais quand même on frôle la perfection.

    c'est du beau travail chapeau

    merci

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 11
    Dernier message: 09/07/2014, 16h40
  2. [XL-2010] Méthode Select de la classe Range échoué
    Par Identifiant_Anonyme dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 29/05/2014, 10h06
  3. Réponses: 4
    Dernier message: 26/08/2010, 13h40
  4. Réponses: 13
    Dernier message: 29/06/2007, 18h03
  5. la methode select de la classe range a échoué
    Par shrekos007 dans le forum Macros et VBA Excel
    Réponses: 31
    Dernier message: 26/05/2007, 15h51

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