Calcul somme de colonne

Résolu/Fermé
max850 Messages postés 305 Date d'inscription dimanche 10 janvier 2016 Statut Membre Dernière intervention 4 janvier 2020 - 23 mars 2017 à 15:49
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 - 24 mars 2017 à 18:42
Bonjour le forum,

Au lieu de répéter 4 fois la même opération pour des colonnes contigues
il y aurait il une solution en vba qui ferait la même chose et qui me permettrait éventuellement de calculer la somme de chaque colonne quelle que soit sa longueur , le résultat s'affichant toujours en C4 D4 E4 F4 G4 ??

merci

Range("C4").Select
ActiveCell.FormulaR1C1 = "=SUM(R[1]C:R[16]C)"
Range("D4").Select
ActiveCell.FormulaR1C1 = "=SUM(R[1]C:R[16]C)"
Range("E4").Select
ActiveCell.FormulaR1C1 = "=SUM(R[1]C:R[16]C)"
Range("F4").Select
ActiveCell.FormulaR1C1 = "=SUM(R[1]C:R[16]C)"
Range("G4").Select


A voir également:

4 réponses

gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
24 mars 2017 à 11:41
Bonjour à tous,

Tu peux simplifier ta macro ainsi
Sub somme()
    Dim col As Integer, lastRow As Long
    For col = 3 To 7 'On boucle sur les colonnes
        lastRow = Cells(Rows.Count, col).End(xlUp).Row 'on récupère la dernière ligne
        Cells(4, col).Value = Application.Sum(Cells(5, col).Resize(lastRow, 1))
    Next
End Sub
1
mrjenkins Messages postés 577 Date d'inscription jeudi 22 novembre 2007 Statut Membre Dernière intervention 17 juillet 2018 102
23 mars 2017 à 15:58
Salut,

une solution :
Sub somme()
    For col = 3 To 7 'On boucle sur les colonnes
        lastRow = Cells(5, col).End(xlDown).Row 'on récupère la dernière ligne
        Cells(4, col).FormulaR1C1 = "=SUM(R[1]C:R[" & (lastRow - 4) & "]C)" 'On applique la formule selon le nombre de lignes dans la colonne
    Next
End Sub


--
0
max850 Messages postés 305 Date d'inscription dimanche 10 janvier 2016 Statut Membre Dernière intervention 4 janvier 2020 3
23 mars 2017 à 18:18
mrjenkins je crois savoir d'ou vient le problème.
en fait j'ai une feuille sur laquelle les sommes sont calculées avec somme(index.....)
que je copie.
lorsque les calculs sont refaits sur la copie sur la ligne 4 je clique sur "mettre à jour la formule pour inclure les cellule adjacentes" et ta formule magique fonctionne parfaitement.
Lorsque je lance ma procédure de copie je dois sans doute désactiver cette ancienne formule
Mais alors comment puis je la désactiver par un code vba ?

merci
0
mrjenkins Messages postés 577 Date d'inscription jeudi 22 novembre 2007 Statut Membre Dernière intervention 17 juillet 2018 102
24 mars 2017 à 08:25
Si j'ai bien compris, tu ne veux pas avoir une formule mais le résultat dans les cases C4, D4.. ?

Si c'est ça, il suffit de faire :
Sub somme()
    For col = 3 To 7 'On boucle sur les colonnes
        lastRow = Cells(5, col).End(xlDown).Row 'on récupère la dernière ligne
        somme = 0
        for r = 5 to lastRow
             somme = somme + cells(r, col).value
        next
        Cells(4, col).value= somme 
    Next
End Sub
0
max850 Messages postés 305 Date d'inscription dimanche 10 janvier 2016 Statut Membre Dernière intervention 4 janvier 2020 3 > mrjenkins Messages postés 577 Date d'inscription jeudi 22 novembre 2007 Statut Membre Dernière intervention 17 juillet 2018
24 mars 2017 à 10:23
Bonjour mrkenkins
oui c'est cela : résultat dans les cases c4....
j'ai déclaré col et r en integer
et j'obtiens un code erreur 6 dépassement de capacité au niveau de
for r = 5 to lasrow
j'ai déclaré en long et c'est la même chose
0
mrjenkins Messages postés 577 Date d'inscription jeudi 22 novembre 2007 Statut Membre Dernière intervention 17 juillet 2018 102
24 mars 2017 à 10:30
C'est à cause du lastRow : si une colonne est vide, il va aller jusqu'à la fin de la page.
Essaye ça :

Sub somme()
    Dim col As Integer, r As Long, somme As Integer, lastRow As Long
    For col = 3 To 7 'On boucle sur les colonnes
        If Cells(5, col).Value <> "" Then
            lastRow = Cells(5, col).End(xlDown).Row 'on récupère la dernière ligne
            somme = 0
            For r = 5 To lastRow
                 somme = somme + Cells(r, col).Value
            Next
            Cells(4, col).Value = somme
        Else
            Cells(4, col).Value = 0
        End If
    Next
End Sub
0
max850 Messages postés 305 Date d'inscription dimanche 10 janvier 2016 Statut Membre Dernière intervention 4 janvier 2020 3 > mrjenkins Messages postés 577 Date d'inscription jeudi 22 novembre 2007 Statut Membre Dernière intervention 17 juillet 2018
Modifié le 24 mars 2017 à 11:45
cette fois elle s'arrête à la première ligne blanche rencontrée dans les colonnes.Si dans la colonne E j'ai des données en E6, E7 et ensuite E9 et que les données dans les autres colonnes commencent sur la ligne 10 je n'aurais la somme que de E6, E7
0
max850 Messages postés 305 Date d'inscription dimanche 10 janvier 2016 Statut Membre Dernière intervention 4 janvier 2020 3
23 mars 2017 à 16:45
bonsoir mrjenkins
la formule fonctionne sauf qu'elle me donne la somme de la dernière ligne de chaque colonne mais pas la somme de toutes les lignes jusqu'à la dernière de chaque colonne
0
max850 Messages postés 305 Date d'inscription dimanche 10 janvier 2016 Statut Membre Dernière intervention 4 janvier 2020 3
24 mars 2017 à 13:10
Bonjour jbinforme
La simplification fonctionne parfaitement

merci
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
24 mars 2017 à 18:42
Bonjour max850 et merci du retour.
0