Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

macro pour somme de cellules

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

PHILIP

XLDnaute Occasionnel
Bonjour à tous,

J'ai un souci J'ai un tableau dont les données ont éte triées par date, dates se trouvant dans la colonne B. Chaque journée et leur données sont séparée d'une ligne vide inserée par code Ce que je souhaiterais c'est un code me permettant de faire la somme des données des colonnes C D et E dans la ligne vide Pourriez vous m'aider ?
ex
B C
18/09 14
18/09 13
ligne vide 27
17/09 15
17/09 18
17/09 7
ligne vide 40
etc


Merci pour votre aide
 

Pièces jointes

Re : macro pour somme de cellules

Bonjour

Essayez en vous inspirant de l'enregistreur de macro

Sub Macro1()
'
'
Range(Selection, Selection.End(xlUp)).Select
Range("C20").Select
Selection.End(xlUp).Select
Range("C17").Select
ActiveCell.FormulaR1C1 = "=SUM(R[-6]C:R[-1]C)"
Range("C17").Select
Selection.End(xlUp).Select
Range("C10").Select
ActiveCell.FormulaR1C1 = "=SUM(R[-6]C:R[-1]C)"
Range("C11").Select
End Sub

le principe est de trouver à chaque fois la ligne manquante avec
Selection.End(xlUp).Select


il y a toujours 6 lignes ?
 
Re : macro pour somme de cellules

Bonjour le fil,

Pas en avance, mais je poste ma version :

Code:
Sub Somme()
Dim n As Byte, a As Range, lig As Long, col As Byte
On Error Resume Next 'si tableau vide...
n = 2 'n° colonne de départ
For Each a In Columns(n).SpecialCells(xlCellTypeFormulas, 1).Areas
  lig = a.Row + a.Count
  For col = n + 1 To n + 3
    Cells(lig, col) = Application.Sum(a.Offset(, col - n))
  Next
Next
End Sub

Les colonnes D et E doivent être mises entièrement au format [hh]:mm:ss

Edit : pas encore regardé ta solution pierrejean 🙂

A+
 
Dernière édition:
Re : macro pour somme de cellules

Re

Job

si tu regardes mon premier jet (du genre B A BA), sache que je peux egalement sortir quelque chose du genre

Code:
Sub autresommes()
haut_somme = 4
For n = 4 To Range("A65536").End(xlUp).Row + 1
  If Range("A" & n) = "" Then
     For m = 1 To 3
       Cells(n, 2 + m) = WorksheetFunction.Sum(Range(Cells(haut_somme, 2 + m), Cells(n - 1, 2 + m)))
       haut_somme = n + 1
     Next
  End If
Next
End Sub
 
Re : macro pour somme de cellules

Re pierrejean,

Tes 2 solutions n'utilisent pas SpecialCells donc pas de risque d'erreur s'il n'y a pas de formules en colonne B.

Par contre la boucle se faisant sur des cellules au lieu de zones, sur un très grand tableau elles sont peut-être moins rapides.

Mais je n'en suis pas si sûr.

A+
 
Re : macro pour somme de cellules

Bonjour pierrejean, le forum,

J'ai voulu vérifier et donc créé un tableau jusqu'à la ligne 56003, uniquement avec des valeurs :

- pierrejean macro1 => 4,3 s

- pierrejean macro2 => 2,5 s 🙂

- job75 => 31 s 😡😡😛

Ma méthode est donc à éviter, SpecialCells prend beaucoup de temps !

A+
 
Re : macro pour somme de cellules

Bonjour à tous
Une autre proposition à tester :
Code:
[COLOR="DarkSlateGray"][B]Sub toto()
Dim i&, j&, k&, n&, odat
  With Range(Cells(4, 1), Cells(Rows.Count, 1).End(xlUp).Offset(1, 4))
    odat = .Value
    For i = 1 To UBound(odat, 1)
      If IsEmpty(odat(i, 1)) Then
        For j = 3 To 5
          odat(i, j) = 0
          For k = n + 1 To i - 1
            odat(i, j) = odat(i, j) + odat(k, j)
          Next k
        Next j
        n = i
      End If
    Next i
    .Value = odat
  End With
  Erase odat
End Sub[/B][/COLOR]

À pierrejean :
Ne convient-il pas de déplacer haut_somme = n + 1 comme ci-dessous ?
Code:
[COLOR="DarkSlateGray"][B]Sub autresommes()
haut_somme = 4
For n = 4 To Range("A65536").End(xlUp).Row + 1
  If Range("A" & n) = "" Then
     For m = 1 To 3
       Cells(n, 2 + m) = WorksheetFunction.Sum(Range(Cells(haut_somme, 2 + m), Cells(n - 1, 2 + m)))
     [COLOR="Red"]Next
     haut_somme = n + 1[/COLOR]
  End If
Next
End Sub[/B][/COLOR]
ROGER2327
#4186


Mercredi 18 Absolu 138 (Flûtes de Pan, V)
4 Vendémiaire An CCXIX
2010-W38-6T09:18:34Z
 
Re : macro pour somme de cellules

Re

Mon Dieu, mais c'est bien sur
Vous avez parfaitement raison ROGER
Cette bevue n'aura pas échappé a votre scrupuleuse attention et je vous en remercie chaudement (tiens ça me rappelle quelque chose !!)
 
Re : macro pour somme de cellules

Re...
Re

Mon Dieu, mais c'est bien sur
Vous avez parfaitement raison ROGER
Cette bevue n'aura pas échappé a votre scrupuleuse attention et je vous en remercie chaudement (tiens ça me rappelle quelque chose !!)
Ça me rappelle quelque chose...
Ça me rappelle que nos attentions respectives ne sont pas si scrupuleuses qu'on peut le prétendre...

En effet, la proposition que j'ai faite est nulle, car elle a pour effet de détruire toutes les formules de la feuille. Ce ne doit pas être le but recherché, je pense.

J'ai commencé des essais à partir de vos propositions et de celle de job75. Si je trouve quelque chose, je reviendrai... Donc, peut-être à suivre.
ROGER2327
#4187


Vendredi 20 Absolu 138 (Sainte Mélusine, souillarde de cuisine, SQ)
6 Vendémiaire An CCXIX
2010-W39-1T01:40:42Z
 
Re : macro pour somme de cellules

Bonjour le fil 🙂

1) La macro de pierrejean testée par :

Code:
Sub sommes()
Dim t#, haut_somme&, n&, m As Byte
Application.ScreenUpdating = False
t = Timer
haut_somme = 4
For n = 4 To Range("A65536").End(xlUp).Row + 1
  If Range("A" & n) = "" Then
     For m = 1 To 3
       Cells(n, 2 + m) = WorksheetFunction.Sum(Range(Cells(haut_somme, 2 + m), Cells(n - 1, 2 + m)))
     Next
     haut_somme = n + 1
  End If
Next
MsgBox Timer - t
End Sub

Durée => 2,30 s

2) En utilisant un tableau auxiliaire :

Code:
Option Base 1

Sub sommes()
Dim t#, tablo, haut_somme&, n&, m As Byte
Application.ScreenUpdating = False
t = Timer
tablo = Application.Transpose(Range("A1", Range("A65536").End(xlUp)))
haut_somme = 4
For n = 4 To UBound(tablo)
  If tablo(n) = "" Then
     For m = 1 To 3
       Cells(n, 2 + m) = WorksheetFunction.Sum(Range(Cells(haut_somme, 2 + m), Cells(n - 1, 2 + m)))
     Next
     haut_somme = n + 1
  End If
Next
MsgBox Timer - t
End Sub

Durée => 1,64 s 🙂

Nota : par curiosité, j'ai remplacé WorksheetFunction par Application.

Eh bien sur ce 2ème essai la durée passe à 1,82 s !!!

A+
 
Re : macro pour somme de cellules

Re

Une proposition avec resultat sous forme de formule

Code:
Sub somme_avec_tablo()
debut = Timer
Application.ScreenUpdating = False
tablo = Range("A1:A" & Range("A65536").End(xlUp).Row + 1)
haut_somme = 4
For n = haut_somme To UBound(tablo, 1)
  If tablo(n, 1) = "" Then
    For m = 1 To 3
     Cells(n, 2 + m).FormulaLocal = "=SOMME(" & Range(Cells(haut_somme, 2 + m), Cells(n - 1, 2 + m)).Address & ")"
    Next m
  haut_somme = n + 1
  End If
Next n
Application.ScreenUpdating = True
MsgBox (Timer - debut)
End Sub

Edit: Bonjour Job et felicitations pour votre materiel
chez moi j'ai 4,25s la ou tu en as 2,30s
 
Dernière édition:
Re : macro pour somme de cellules

Salut pierrejean 🙂

J'ai testé ta dernière proposition avec :

Code:
Option Base 1

Sub sommes()
Dim t#, tablo, haut_somme&, n&, m As Byte
Application.ScreenUpdating = False
t = Timer
[COLOR="Red"]Application.Calculation = xlManual[/COLOR]
tablo = Application.Transpose(Range("A1", Range("A65536").End(xlUp)))
haut_somme = 4
For n = 4 To UBound(tablo)
  If tablo(n) = "" Then
     For m = 1 To 3
       Cells(n, 2 + m).FormulaLocal = "=SOMME(" & Range(Cells(haut_somme, 2 + m), Cells(n - 1, 2 + m)).Address & ")"
     Next
     haut_somme = n + 1
  End If
Next
[COLOR="red"]Application.Calculation = xlAutomatic[/COLOR]
MsgBox Timer - t
End Sub

Durée => 4,75 s, normal puisque c'est une formule qui est entrée.

Edit : sur ta remarque, je pense surtout que Excel 2007 est plus lent, j'ai vu ça sur un autre fil.

A+
 
Dernière édition:
Re : macro pour somme de cellules

Re,

J'ai lancé la macro précédente avec :

Code:
Cells(n, 2 + m).[COLOR="Red"]Formula[/COLOR] = "=[COLOR="red"]SUM[/COLOR](" & Range(Cells(haut_somme, 2 + m), Cells(n - 1, 2 + m)).Address & ")"

C'est un chouia plus long => 4,95 s.

A+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Réponses
3
Affichages
593
Réponses
3
Affichages
757
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…