XL 2019 Somme de cellules.

teclim

XLDnaute Nouveau
Bonjour à tous,
Je cherche à additionner des cellules (dans une plage de 6 cellules) mais si une des valeurs est égal à zéro alors le compteur redémarre de zéro et le résultat sera la valeur maximum.
je vous met un exemple:
23320332026

Dans cet exemple, on additionne 23+32 et on s’arrête car la troisième valeur est zéro puis on fait 33+20+26 et on affiche le résultat de 33+20+26 car il est supérieur à 23+32.

Mais je n'y arrive pas. Quelqu'un saurait-il comment faire ?

Si vous voulez plus d'infos n'hésitez pas à me demander.
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Je propose cette fonction perso :
VB:
Option Explicit
Function MaxGroupes(ByVal Rng As Range) As Double
   Dim Cel As Range, S As Double
   For Each Cel In Rng
      If Cel.Value <> 0 Then
         S = S + Cel.Value
      Else
         If MaxGroupes < S Then MaxGroupes = S
         S = 0
         End If
      Next Cel
   If MaxGroupes < S Then MaxGroupes = S
   End Function
 

Dranreb

XLDnaute Barbatruc
Il doit y avoir aussi des données String, je pense, ne serait-ce que ""
Essayez comme ça :
VB:
Option Explicit
Function MaxGroupes(ByVal Rng As Range) As Double
   Dim Cel As Range, S As Double
   For Each Cel In Rng
      On Error Resume Next
      If Cel.Value <> 0 Then
         S = S + Cel.Value
      Else
         If MaxGroupes < S Then MaxGroupes = S
         S = 0
         End If
      Next Cel
   If MaxGroupes < S Then MaxGroupes = S
   End Function
 

patricktoulon

XLDnaute Barbatruc
bonjour
fonction VBA façon patosh
VB:
Function BiSomme(rng)
    Dim rev As Boolean, v1&, v2&, I&
    For I = 1 To rng.Cells.Count
        If rng.Cells(I) = 0 Then rev = True
        If rev = False Then v1 = v1 + rng.Cells(I) Else v2 = v2 + rng.Cells(I)
    Next
    BiSomme = Array(v1, v2)(Abs(v2 > 0))
End Function
exemple formule
=BiSomme(A1:F1)
 

teclim

XLDnaute Nouveau
bonjour
fonction VBA façon patosh
VB:
Function BiSomme(rng)
    Dim rev As Boolean, v1&, v2&, I&
    For I = 1 To rng.Cells.Count
        If rng.Cells(I) = 0 Then rev = True
        If rev = False Then v1 = v1 + rng.Cells(I) Else v2 = v2 + rng.Cells(I)
    Next
    BiSomme = Array(v1, v2)(Abs(v2 > 0))
End Function
exemple formule
=BiSomme(A1:F1)

merci d'avoir répondu Patosh mais j'ai l'erreur #VALEUR! "le type de données d'une valeur utilisée dans la formule est incorrect"
 

patricktoulon

XLDnaute Barbatruc
re
ma formule fonctionne tres bien
c'est ton excel qui a mal à la tête
demo.gif
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir à tous :) ,

Si j'ai bien compris, avec de simples formules, non ? :
En B2 : =SI(B1=0;0;"")
En C2 : =SI(C1<>0;"";SOMME($B1:C1)-SOMME($B2:B2)) à recopier vers la droite jusqu'en O2.
En P2 le résultat : =MAX(B2:O2)

Je n'ai pas les moyens, Je ne mange que des pommes moi🍏🍎. Pas les sous pour me payer un logiciel de capture vidéo comme certains :(.
😅

1701716456623.png
 

Pièces jointes

  • teclim- somme partielle- v1.xlsx
    12.3 KB · Affichages: 1
Dernière édition:

job75

XLDnaute Barbatruc
Bonsoir à tous,

Voyez le fichier joint et cette macro évènementielle :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim dercol%, c As Range, deb As Range, s#, plage As Range, plagemax As Range, smax#
dercol = Cells(1, Columns.Count).End(xlToLeft).Column
Rows(1).Interior.ColorIndex = xlNone 'RAZ
For Each c In Cells(1).Resize(, dercol)
    If Not IsNumeric(CStr(c)) Then Application.EnableEvents = False: c = 0: Application.EnableEvents = True
    If deb Is Nothing Then If c <> 0 Then Set deb = c: s = 0
    If Not deb Is Nothing Then
        If c <> 0 Then
            Set plage = Range(deb, c)
            s = s + c
        Else
            If s > smax Then Set plagemax = plage: smax = s
            Set deb = Nothing
            s = 0
        End If
    End If
Next
If Not deb Is Nothing Then If s > smax Then Set plagemax = plage: smax = s
If Not plagemax Is Nothing Then plagemax.Interior.ColorIndex = 6 'jaune
ThisWorkbook.Names.Add "somme", smax 'nom défini
MsgBox "Somme maximum entre zéros " & [TEXT(somme,"[h]:mm")]
End Sub
Elle se déclenche quand on modifie ou valide une cellule en ligne 1.

La plage de somme maximum se colore en jaune.

A+
 

Pièces jointes

  • Série max.xlsm
    16.7 KB · Affichages: 3

teclim

XLDnaute Nouveau
re
ma formule fonctionne tres bien
c'est ton excel qui a mal à la tête
Regarde la pièce jointe 1185343

Oui effectivement ça fonctionne avec des nombres mais j'utilise des heures et comme tu peux le voir avec des heures j’obtiens 0 si je met (BQ127:BW127) comme plage et j'ai une erreur si je met cellule par cellule (BQ127;BR127;BS127;BT127;BU127;BV127;BW127).
Qu'est ce qui change avec les heures ?

Capture 1 excel.JPG


En mettant l'image je viens de voir que la fonction ne retourne pas la valeur maximum : elle devrait afficher le résultat de 8+5+4.
 
Dernière édition:

teclim

XLDnaute Nouveau
Bonsoir à tous :) ,

Si j'ai bien compris, avec de simples formules, non ? :
En B2 : =SI(B1=0;0;"")
En C2 : =SI(C1<>0;"";SOMME($B1:C1)-SOMME($B2:B2)) à recopier vers la droite jusqu'en O2.
En P2 le résultat : =MAX(B2:O2)

Je n'ai pas les moyens, Je ne mange que des pommes moi🍏🍎. Pas les sous pour me payer un logiciel de capture vidéo comme certains :(.
😅

Regarde la pièce jointe 1185356

En fait j'ai 52 tableaux de 5 lignes chacun et les zéros sont jamais à la même place. Donc je ne pense pas que ta solution puisse fonctionner. Mais merci quand même.
 

Discussions similaires

Statistiques des forums

Discussions
315 090
Messages
2 116 107
Membres
112 661
dernier inscrit
ceucri