Calcul somme de colonne

Résolu
max850 Messages postés 312 Statut Membre -  
gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   -
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

4 réponses

  1. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    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
  2. mrjenkins Messages postés 611 Statut Membre 103
     
    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
    1. max850 Messages postés 312 Statut Membre 3
       
      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
    2. mrjenkins Messages postés 611 Statut Membre 103
       
      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
    3. max850 Messages postés 312 Statut Membre 3 > mrjenkins Messages postés 611 Statut Membre
       
      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
    4. mrjenkins Messages postés 611 Statut Membre 103
       
      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
    5. max850 Messages postés 312 Statut Membre 3 > mrjenkins Messages postés 611 Statut Membre
       
      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
  3. max850 Messages postés 312 Statut Membre 3
     
    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
  4. max850 Messages postés 312 Statut Membre 3
     
    Bonjour jbinforme
    La simplification fonctionne parfaitement

    merci
    0
    1. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
       
      Bonjour max850 et merci du retour.
      0