Calculer l'écart successif le plus élevé d'une colonne

Messages postés
5
Date d'inscription
mardi 13 août 2019
Statut
Membre
Dernière intervention
14 août 2019
-
Bonjour,

Voici mon problème :
Dans une colonne (B) j'ai des critères de tailles allant de 1,2 cm à 5,0 cm. Dans une autre colonne (C) j'ai des variables positifs ou négatifs. J'aimerais avoir une formule qui m'indique quel est la somme des variables consécutives la plus élever et qui me rapproche la tranche des critères de tailles correspondantes.

Voici le lien du fichier d'exemple :
https://www.cjoint.com/c/IHno3OLdy1I

Là, ma somme que j'arrive à atteindre la plus élevée c'est 8 de C22 à C24 pour les critères de tailles de 2,9 cm à 3,1 cm.
Comment puis-je avoir ces informations automatiquement ?

Merci pour vos réponses :)
Afficher la suite 

4 réponses

Meilleure réponse
Messages postés
22846
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
23 août 2019
5596
1
Merci
Bonjour à tous,

Un essai.
Tu ne dis pas comment tu veux le résultat, j'ai improvisé.
Je suis aussi parti du principe que c'était une somme d'au moins 2 éléments. Si il faut admettre un élément isolé qui serait supérieur à toutes les sommes, il faudra ajouter un contrôle supplémentaire.
https://www.cjoint.com/c/IHnrr4BPRhz
eric

PS : j'ai nommé 'donnees' ta plage B5:C39. Il suffit de modifier la définition du nom si la plage varie, pas besoin de retoucher la macro.
PS2 : si 2 plages sont au même maxi, je retiens la plus étendue

En essayant continuellement, on finit par réussir. 
Donc plus ça rate, plus on a de chances que ça marche.(les Shadoks)
En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci

Dire « Merci » 1

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CommentCaMarche

CCM 59144 internautes nous ont dit merci ce mois-ci

yg_be
Messages postés
8320
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 août 2019
412 -
adapté pour prendre également un seul élément:
Sub plMax()
    Dim datas, s As Double, maxi(1 To 3) As Single, i As Long, j As Long
    datas = [donnees].Value
    [donnees].Interior.ColorIndex = xlNone
    For i = 1 To UBound(datas)
        s = 0
        For j = i To UBound(datas)
                s = s + datas(j, 2)
                If s <= 0 Then Exit For
                If s > maxi(1) Or (s = maxi(1) And j - i > maxi(3) - maxi(2)) Then
                    maxi(1) = s: maxi(2) = i: maxi(3) = j
                End If
        Next j
    Next i
    [donnees].Offset(maxi(2) - 1).Resize(maxi(3) - maxi(2) + 1, 2).Interior.Color = vbYellow
    [E5] = maxi(1): [F5] = datas(maxi(2), 1): [G5] = datas(maxi(3), 1)
End Sub
eriiic
Messages postés
22846
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
23 août 2019
5596 -
Salut yg_be :-)

tu es sûr de ton coup pour le
If s <= 0 Then Exit For
?
Pour l'instant on ne sait pas si il y a toujours au moins 1 valeur positive, le demandeur devra préciser.
eric
yg_be
Messages postés
8320
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 août 2019
412 > eriiic
Messages postés
22846
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
23 août 2019
-
alors ainsi:
Sub plMax()
    Dim datas, s As Double, maxi(1 To 3) As Single, i As Long, j As Long
    datas = [donnees].Value
    [donnees].Interior.ColorIndex = xlNone
    maxi(1) = -3.402823E+38
    For i = 1 To UBound(datas)
        s = 0
        For j = i To UBound(datas)
                s = s + datas(j, 2)
                If s > maxi(1) Or (s = maxi(1) And j - i > maxi(3) - maxi(2)) Then
                    maxi(1) = s: maxi(2) = i: maxi(3) = j
                End If
                If s <= 0 Then Exit For
        Next j
    Next i
    [donnees].Offset(maxi(2) - 1).Resize(maxi(3) - maxi(2) + 1, 2).Interior.Color = vbYellow
    [E5] = maxi(1): [F5] = datas(maxi(2), 1): [G5] = datas(maxi(3), 1)
End Sub
Mcyaofly
Messages postés
5
Date d'inscription
mardi 13 août 2019
Statut
Membre
Dernière intervention
14 août 2019
-
Un grand merci ! Je n'ai pas compris la macro et je vais m'y pencher dessus mais c'est parfait !
Mcyaofly
Messages postés
5
Date d'inscription
mardi 13 août 2019
Statut
Membre
Dernière intervention
14 août 2019
-
Dernière petite question, car j'ai enfin réussi à mettre la macro sur l'ensemble de mes tableaux, mais j'ai un dernier petit problème qui se pose. Le tableau est amené à varier en taille et donc en quantité de valeur. Comment puis-je intégrer dans le gestionnaire de nom, qu'il me prenne en base de donnée automatiquement la première ligne jusqu'à la dernière où l'on trouve une valeur ? Comme cela, si le tableau s'agrandit, je n'ai pas besoin manuellement de devoir changer les données dans le gestionnaire de nom..
Encore un grand merci !
Commenter la réponse de eriiic
Messages postés
8320
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 août 2019
412
0
Merci
bonjour, quel est ton contexte, que vas-tu faire avec le résultat?
Mcyaofly
Messages postés
5
Date d'inscription
mardi 13 août 2019
Statut
Membre
Dernière intervention
14 août 2019
-
Bonjour,
Le tableau transmis est un exemple succin qui servira à une multitude de bases de données pour une multitude de données. Si j'arrive à avoir une solution pour un exemple simple comme celui-ci, je pourrais le reproduire pour l'ensemble des données.
yg_be
Messages postés
8320
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 août 2019
412 > Mcyaofly
Messages postés
5
Date d'inscription
mardi 13 août 2019
Statut
Membre
Dernière intervention
14 août 2019
-
je pense alors préférable de faire via VBA. il faut alors décider ce qui va déclencher l'exécution (par exemple un raccourci clavier), quelles sont les données à traiter, et où afficher les résultats.
Commenter la réponse de yg_be
Messages postés
49649
Date d'inscription
lundi 13 août 2007
Statut
Contributeur
Dernière intervention
23 août 2019
10464
0
Merci
Je n'ai pas trouvé de solution par formules simples.
Il faudra certainement passer par du VBA (hors de mes compétences) ...
Commenter la réponse de Raymond PENTIER
Messages postés
8320
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 août 2019
412
0
Merci
tu pourrais mettre cette formule en D5:
=SI(C5>0;D4+C5;0)
, et la recopier vers le bas. ensuite chercher la valeur la plus grande dans la colonne D.
(mauvaise idée)
Commenter la réponse de yg_be