Sommes des lignes Erreur d'exécution '6' ; Dépassement de capacité

Bonjour,

Je viens de créer une macro avec le code ci-dessous. Je souhaite calculer la somme par ligne et l'indiquer dans une colonne. Ma macro me fait un bug.

Exemple :

J'aimerai calculer la somme de mon tableau qui commence à la ligne 7 (jusqu'à... mon tableau est variable)

J'aimerai faire une première somme de mes colonnes E,F,G,H,I,J,K (5,6,7,8,9,10,11) et indiquer dans la colonne L(11) mon résultat puis faire de même (toujours sur la même ligne) colonne M,N,O,P,Q,R,S (13,14,15,16,17,18) et mettre la somme en colonne T (20)

La première ligne de mon tableau commence à 7

J'ai commencé à créer une macro mais il m'indique une erreur après avoir calculé les 16 premières lignes (Erreur d'exécution '6' ; Dépassement de capacité) et me mets en jaune : résultat = Application.WorksheetFunction.Sum(plage)

Pourriez-vous m'aider à corriger ma macro ?

Sub Sommes_Result_Lignes()
Dim i As Long, plage As Range, résultat As Integer
 With Sheets("Feuil1")
 For i = 5 To .Range("E65356").End(xlUp).Row
    Set plage = .Range("E" & i & ":K" & i)
     résultat = Application.WorksheetFunction.Sum(plage)
   .Range("L" & i) = résultat
  Next i
 End With
End Sub

Bonjour,

La variable résultat est de type entier, elle ne peut donc contenir qu'un nombre entier limité à 32 767 (voir ici). Si le résultat est supérieur, vous aurez une erreur. Plutôt que de changer le type de la variable résultat, je vous conseille tout simplement de la supprimer...

résultat = Application.WorksheetFunction.Sum(plage)
.Range("L" & i) = résultat
'DEVIENT :
.Range("L" & i) = Application.WorksheetFunction.Sum(plage)

Bonjour,

Merci cela fonctionne très bien :)

J'ai créé une deuxième macro qui fait la même chose pour mes colonnes d'après.

Est-ce possible de le mettre dans la même macro ? ou je dois faire comme ça ?

Sub Sommes_Results_Lignes()
'Déclaration des variables
Dim i As Long, plage As Range, résultat As Integer

'avec la feuil 1
 With Sheets("Feuil1")
'Je recherche de la première ligne de la colonne E jusque la dernière ligne pleine
For i = 7 To .Range("E65356").End(xlUp).Row
  'j'indique qu'elle est la plage à calculer
    Set plage = .Range("E" & i & ":K" & i)
  'j'indique que pour cette plage j'utilise la fonction somme
  'j'affiche le résultat dans la colonne L à la ligne qui correspond
   .Range("L" & i) = Application.WorksheetFunction.Sum(plage)

   Next i
 End With

End Sub
Sub Sommes_Results_Lignes1()
'Déclaration des variables
Dim i As Long, plage As Range, résultat As Integer

'avec la feuil 1
 With Sheets("Feuil1")
'Je recherche de la première ligne de la colonne E jusque la dernière ligne pleine
For i = 7 To .Range("M65356").End(xlUp).Row
  'j'indique qu'elle est la plage à calculer
    Set plage = .Range("M" & i & ":S" & i)
  'j'indique que pour cette plage j'utilise la fonction somme
  'j'affiche le résultat dans la colonne L à la ligne qui correspond
   .Range("T" & i) = Application.WorksheetFunction.Sum(plage)

   Next i
 End With

End Sub

Une possibilité :

Sub Sommes_Results_Lignes()

Dim i As Long 'Déclaration des variables

With Sheets("Feuil1")
    For i = 7 To .Range("M65356").End(xlUp).Row
        .Range("L" & i) = Application.Sum(.Range("E" & i & ":K" & i))
        .Range("T" & i) = Application.Sum(.Range("M" & i & ":S" & i))
    Next i
End With

End Sub

Bonjour tout le monde,

Wow, le retour de Pedro22

J'espère que ça va bien dans le Grand Ouest

Merci Pedro ! Cela fonctionne du Tonnerre !

Bonjour tout le monde,

Wow, le retour de Pedro22

J'espère que ça va bien dans le Grand Ouest

Salut Noël !

Il pleut, donc tout est normal ici...

Bonjour Pedro,

J'ai ajouté ta macro dans mon fichier. Elle fonctionne mais elle est extrêmement longue à réaliser.

Je sais que mon fichier est lourd. J'ai une autre macro qui me calcule les colonnes et qui va "plus vite" quand je la lance.

Je mets mon fichier en calcul manuel pour réduire le temps.

Saurais-tu pourquoi celle des calculs de mes colonnes est rapide et pas celui des lignes ?

Y aurait-il un moyen pour que cela se calcule plus rapidement ?

Bien à toi,

Sub Sommes_Results_Lignes()

Dim i As Long 'Déclaration des variables

With Sheets("Feuil1")
    For i = 7 To .Range("M65356").End(xlUp).Row
        .Range("L" & i) = Application.Sum(.Range("E" & i & ":K" & i))
        .Range("T" & i) = Application.Sum(.Range("M" & i & ":S" & i))
    Next i
End With

End Sub

Bonjour,

Cela prend peut-être plus de temps parce qu'il y a plus de lignes que de colonnes ?

Tu créés une boucle qui passe en revue toutes les lignes, et tu demandes à excel d'écrire une formule dans chaque ligne.

Cela revient à écrire ta première formule et à l'étendre sur toute ta plage. Regarde du côté de la méthode autofill, tu devrais avoir ta réponse 😉

bonjour à tous,

ceci devrait aller plus vite

Sub Sommes_Results_Lignes()
    Dim s1(), s2(), t
    Dim i As Long, j As Long, dl As Long 'Déclaration des variables

    With Sheets("Feuil1")
        dl = .Range("M" & Rows.Count).End(xlUp).Row
        ReDim s1(1 To dl, 1 To 1), s2(1 To dl, 1 To 1)
        t = .Range("A1").Resize(dl, 19)
        For i = 7 To dl
            For j = 5 To 11
                s1(i, 1) = s1(i, 1) + t(i, j)
                s2(i, 1) = s2(i, 1) + t(i, j + 8)
            Next j
        Next i
        .Range("L1").Resize(dl, 1) = s1
        .Range("T1").Resize(dl, 1) = s2
    End With
End Sub

Bonjour ! Merci pour ta macro. Il me crée un msg d'erreur sur la ligne s2(i, 1) = s2(i, 1) + t(i, j + 8)

Pour info je souhaiterai calculer mes lignes qui commencent à la ligne 14, des colonnes E,F,G,H,I,J,K et qu'il mette le résultat en colonne K et de même pour mes colonnes M,N,O,P,Q,R,S pour mettre le résultat en colonne T

Bonjour,

la macro fait la somme des données E,F,G,H,I,J,K à partir de la ligne 7 et met le résultat en colonne L et la somme des cdonnées M,N,O,P,Q,R,S et met le résultat en colonne T, comme demandé. Remplace le 7 par un 14 pour commencer à la ligne 14.

je n'ai pas d'erreur quand j'exécute cette macro.

donc

1 quel message d'erreur ?

2 merci de mettre un fichier exemple représentatif dans lequel tu as pu reproduire l'erreur.

3 merci de (re)lire les instructions avant de poster un message.

Bah alors je ne sais pas ce qu'il s'est passé ...j'ai tout refait et tout fonctionne bien. Je reteste encore le fichier mais je pense que c'est bon. Je ne sais pas pourquoi cela me faisait une erreur

Re-bonjour, h2so4, j'ai une petite question ; j'ai ajouté des commentaires explicatifs pour comprendre la macro (ce que j'ai compris, si tu peux me dire si j'ai juste).

D'autre part ; je ne trouve pas le moment où il efface dans ma colonne L et T (de L1 à L13 / T1 à T13) car j'ai des données que je ne souhaite pas effacer et la macro me les efface malgré tout

Sub Sommes_Results_Lignes()
    Dim s1(), s2(), t
    Dim i As Long, j As Long, dl As Long 'Déclaration des variables

    With Sheets("feuil1") 'feuille dans laquelle il doit exectuer la macro
        dl = .Range("M" & Rows.Count).End(xlUp).Row 'formule de codage ne pas toucher - Cette instruction donne la dernière ligne non vide
        ReDim s1(1 To dl, 1 To 1), s2(1 To dl, 1 To 1) 'formule de codage ne pas toucher
        t = .Range("A1").Resize(dl, 19) 'A1 est le point de départ des colonnes pour calculer et 19 la dernière colonne de calcul
        For i = 14 To dl 'indique à partir de quelle ligne il calcule
            For j = 5 To 11 'indique les colonnes qu'il doit calculer pour la ligne
                s1(i, 1) = s1(i, 1) + t(i, j)
                s2(i, 1) = s2(i, 1) + t(i, j + 8) '+8 indique qu'il décale à 8+5=13ème colonne pour calculer
            Next j 'prochaine colonne
        Next i 'prochaine ligne
        .Range("L1").Resize(dl, 1) = s1 'L1 le 1 indique à partir de quand il calcule la ligne 14 et sur la colonne qu'il met le résultat
        .Range("T1").Resize(dl, 1) = s2 'T1 le 1 indique à partir de quand il calcule la ligne 14 et sur la colonne qu'il met le résultat
    End With
End Sub

bonjour,

avec commentaires adaptés

Sub Sommes_Results_Lignes()
 'Déclaration des variables
    Dim s1() ' s1 tableau qui contiendra les sommes à mettre en colonne L (performance !)
    Dim s2()     's2 tableau qui contiendra les sommes à mettre en colonne T (performance !)
    Dim t 't tableau qui contiendra une copie des données utiles de la feuille (performance !)
    Dim i As Long, j As Long, dl As Long

    With Sheets("feuil1") ' tous les objets dans les lignes qui suivent qui sont précédés d'un point appartiennent à cette feuille (range, cells)
        dl = .Range("M" & Rows.Count).End(xlUp).Row 'formule de codage ne pas toucher - Cette instruction donne la dernière ligne non vide sur base de la colonne M
        ReDim s1(1 To dl, 1 To 1), s2(1 To dl, 1 To 1) ''dimensionne les tableaux des sommes en fonction du nombre de lignes
        t = .Range("A1").Resize(dl, 19) 'copie les données utiles de la feuille dans le tableau t

        'on fait les calculs des sommes
        For i = 14 To dl 'on parcourt une à une les lignes de la ligne 14 à la dernière ligne
            For j = 5 To 11 'indique les colonnes qu'il doit prendre en compte pour la ligne
                s1(i, 1) = s1(i, 1) + t(i, j) ' on fait la somme dans s1 des cellules de la ligne i colonnes 5 à 11
                s2(i, 1) = s2(i, 1) + t(i, j + 8) ' on fait la somme dans s2 des cellules de la ligne i colonnes 13 à 19
            Next j 'prochaine colonne
        Next i 'prochaine ligne

        'les calculs sont terminés et sont stockés dans les tableaux s1 et s2

        .Range("L1").Resize(dl, 1) = s1 'on copie le tableau des sommes s1en colonne L
        .Range("T1").Resize(dl, 1) = s2 'on copie le tableau des sommes s2 en colonne T

    End With
End Sub

Les données en L1/L13 et T1/T13 ne sont pas effacées, à moins qu'il ne s'agisse de formules. Auquel cas, il faudra modifier le code.

13classeur2.xlsm (25.72 Ko)

Voici un fichier ci-joint et comme tu peux le voir quand on exécute la macro les données des lignes précédentes s'effacent

bonjour,

au temps pour moi

11classeur2-5.xlsm (25.70 Ko)

Merci

10classeur2-5-1.xlsm (32.15 Ko)

Re-Bonjour ! Et bonne année !

Rebonjour h2s04, je reviens vers toi par rapport à la macro que tu m'as apprise.

J'ai voulu reprendre cette même macro pour un même tableau mais qui comporte moins de colonne et je ne comprends pas ; cela ne fonctionne pas pour la partie s2 et il me décale le résultat des lignes 5 ou 6 lignes en dessus de celle que je voudrais. Je n'ai pas changé les formules à part les nombres et la lettre M en H.

Je ne comprends pas pourquoi cela me fait ça et qu'elle est mon erreur.

Je t'ai joins le fichier sur lequel nous avions travaillé et j'ai créé une feuille 2 pour la problématique.

Au plaisir de comprendre !

Sub Sommes_Results_Lignes2()
 'Déclaration des variables
    Dim s1() ' s1 tableau qui contiendra les sommes à mettre en colonne L (performance !)
    Dim s2()     's2 tableau qui contiendra les sommes à mettre en colonne T (performance !)
    Dim t 't tableau qui contiendra une copie des données utiles de la feuille (performance !)
    Dim i As Long, j As Long, dl As Long

    With Sheets("feuil2") ' tous les objets dans les lignes qui suivent qui sont précédés d'un point appartiennent à cette feuille (range, cells)
        dl = .Range("H" & Rows.Count).End(xlUp).Row 'formule de codage ne pas toucher - Cette instruction donne la dernière ligne non vide sur base de la colonne M
        ReDim s1(1 To dl, 1 To 1), s2(1 To dl, 1 To 1) ''dimensionne les tableaux des sommes en fonction du nombre de lignes
        t = .Range("A1").Resize(dl, 9) 'copie les données utiles de la feuille dans le tableau t

        'on fait les calculs des sommes
        For i = 14 To dl 'on parcourt une à une les lignes de la ligne 14 à la dernière ligne
            For j = 5 To 6 'indique les colonnes qu'il doit prendre en compte pour la ligne
                s1(i - 8, 1) = s1(i - 8, 1) + t(i, j) ' on fait la somme dans s1 des cellules de la ligne i colonnes 5 à 11
                s2(i - 8, 1) = s2(i - 8, 1) + t(i, j + 4) ' on fait la somme dans s2 des cellules de la ligne i colonnes 13 à 19
            Next j 'prochaine colonne
        Next i 'prochaine ligne

        'les calculs sont terminés et sont stockés dans les tableaux s1 et s2

        .Range("G14").Resize(dl, 1) = s1 'on copie le tableau des sommes s1en colonne L
        .Range("J14").Resize(dl, 1) = s2 'on copie le tableau des sommes s2 en colonne T

    End With
End Sub

bonjour,

voici le code adapté.

Sub Sommes_Results_Lignes2()
 'Déclaration des variables
    Dim s1() ' s1 tableau qui contiendra les sommes à mettre en colonne L (performance !)
    Dim s2()     's2 tableau qui contiendra les sommes à mettre en colonne T (performance !)
    Dim t 't tableau qui contiendra une copie des données utiles de la feuille (performance !)
    Dim i As Long, j As Long, dl As Long

    With Sheets("feuil2") ' tous les objets dans les lignes qui suivent qui sont précédés d'un point appartiennent à cette feuille (range, cells)
        dl = .Range("H" & Rows.Count).End(xlUp).Row 'formule de codage ne pas toucher - Cette instruction donne la dernière ligne non vide sur base de la colonne H
        ReDim s1(1 To dl, 1 To 1), s2(1 To dl, 1 To 1) ''dimensionne les tableaux des sommes en fonction du nombre de lignes
        t = .Range("A1").Resize(dl, 9) 'copie les données utiles de la feuille dans le tableau t

        'on fait les calculs des sommes
        For i = 14 To dl 'on parcourt une à une les lignes de la ligne 14 à la dernière ligne
            For j = 5 To 6 'indique les colonnes qu'il doit prendre en compte pour la ligne
                s1(i - 13, 1) = s1(i - 13, 1) + t(i, j) ' on fait la somme dans s1 des cellules de la ligne i colonnes 5 à 6
                s2(i - 13, 1) = s2(i - 13, 1) + t(i, j + 3) ' on fait la somme dans s2 des cellules de la ligne i colonnes 8 à 9
            Next j 'prochaine colonne
        Next i 'prochaine ligne

        'les calculs sont terminés et sont stockés dans les tableaux s1 et s2

        .Range("G14").Resize(dl, 1) = s1 'on copie le tableau des sommes s1 en colonne G
        .Range("J14").Resize(dl, 1) = s2 'on copie le tableau des sommes s2 en colonne J

    End With
End Sub
Rechercher des sujets similaires à "sommes lignes erreur execution depassement capacite"