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

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
 

teclim

XLDnaute Nouveau
Merci pour vos réponses.

@eric : j'ai importé ton module mais j'ai l'erreur "#NOM?"

@Dranreb : j'ai ajouté ta fonction mais j'ai l'erreur "#VALEUR!"

J'ai oublié de vous préciser que ces valeurs sont des heures. Donc 23:00, 32:00, etc... C'est peut etre de là que viennent les erreurs ?
 

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

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"
 

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 .


 

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 ?



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

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

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…