Code pour macro Somme de plages.

Cocktail -  
lermite222 Messages postés 9042 Statut Contributeur -
Bonjour,

J'ai une colonne A dans laquelle mes cellules contiennent des chiffres (d'affaires).
Ces cellules de chiffres sont parfois séparées par des cellules vides que je veux conserver.
Ca donne ça :

12455,36
4587,84
547785,36
4587,25

4587,63
145258,65

45874,69
5821,31
689,54
457896,25
6589,30

Je voudrais savoir si l'un d'entre vous aurait l'idée d'une macro permettant de faire la somme de chaque "paquet" de cellules et décalant cette somme.
Je m'explique.
J'ai donc mes chifres dans les cellules allant de A1 à A4, une cellule vide en A5, des chiffres de A6 à A8, une cellule vide en A9 etc. Je voudrais donc la somme de A1;A4 en B5, celle de A6;A8 en B9 etc.

Merci d'avance à ceux et celles qui se casseront la tête là dessus par pur altruisme.

C
Configuration: Windows XP
Firefox 2.0.0.1

3 réponses

  1. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Bonjour,
    une macro ?
    Sub SumPartiel()
    Dim i As Long
    Dim T As Double, TT As Double
        For i = 1 To 14
            If Cells(i, 1) = "" Then
                Cells(i, 2) = T: TT = TT + T: T = 0
            Else
                T = T + Cells(i, 1)
            End If
        Next i
        Cells(i + 1, 1) = "Totaux"
        Cells(i + 1, 2) = TT
    End Sub

    A+
    0
    1. Cocktail
       
      Pas mal, lermite222, mais y'a un os
      Volà ce que ça donne en pratique

      10 989,78
      27 078,55
      28 623,74
      66 692,07
      8 152,08
      4 619,93
      847,23
      22 642,10
      6 200,51
      22 847,85
      2 971,25
      10 269,22
      3 011,44
      5 458,07
      160,09
      Totaux 66 692,07
      11 879,47
      27 221,48
      2 246,90
      4 310,73
      3 501,79
      23 828,32
      6 902,63
      3 260,41
      10 400,11
      4 171,41
      1 624,09
      2 444,07
      6 179,21
      6 786,83
      4 087,15

      3 115,17
      3 814,31
      2 100,77
      18 071,58
      18 454,17
      3 947,06
      8 587,19
      10 898,64
      8 528,79
      17 912,43
      6 433,65
      4 510,64
      7 236,58
      26 566,93

      J'obtiens bien la somme de mon 1er "paquet" de chiffre, cette somme est ensuite reportée à la place de ce qu'aurait du être la somme du 2ème "paquet" de chiffres et ensuite les autres "paquets ne sont pas traités.

      Au fait, j'aimerais que ce truc marche sur une colonne donnée. Mes chiffres sont en fait dans la colonne D, sur mon tableau, et commencent en D3

      Merci
      C
      0
  2. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    Salut,

    Il faut adapter la macro à tes besoins,
    Sub Sous_Total()
    Dim i As Long
    Dim T As Double, TT As Double
    For i = 1 To 30 ' plage de cellule à balayerde A1 à A xxxxx !
    If Cells(i, 1) = "" Then
    Cells(i, 1) = T: TT = TT + T: T = 0
    Else
    T = T + Cells(i, 1)
    End If
    Next i
    Cells(i + 1, 2) = TT
    End Sub

    A+
    0
    1. Cocktail
       
      Ca marche, merci, j'aurais du comprendre tout seul la plage à balayer. Chuis vraiment un boulet.
      Maintenant, j'aimerais bien ne pas avoir à spécifier une plage à balayer vu qu'elle ne sera pas toujours la même.
      J'aimerais que la macro s'arrête quand par exemple elle trouve 2 cellules vides consécutives.
      Et enfin, j'aimerais que cette macro puisse se réaliser sur une colonne donnée, ici en l'occurence, la colonne D, première cellule à traiter =D3

      Merci déjà pour ce que vous avez fait, et merci d'avance pour le reste.
      C
      0
  3. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    'Mettre le curseur n'importe où dans la colonne à calculer...
    'Tout le reste est automatique.
    Sub SumPartiel()
    Dim i As Long
    Dim T As Double, TT As Double
    Dim Col As Integer
        Col = ActiveCell.Column
        For i = 1 To 65000
            If Cells(i, Col) = "" And Cells(i + 1, Col) = "" Then
                Exit For
            ElseIf Cells(i, Col) = "" Then
                Cells(i, Col + 1) = T: TT = TT + T: T = 0
            Else
                T = T + Cells(i, Col)
            End If
        Next i
        Cells(i + 1, Col) = "Totaux"
        Cells(i + 1, Col + 1) = TT
    End Sub

    A+
    0