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

Fermé
Mcyaofly Messages postés 5 Date d'inscription mardi 13 août 2019 Statut Membre Dernière intervention 14 août 2019 - Modifié le 13 août 2019 à 16:58
Mcyaofly Messages postés 5 Date d'inscription mardi 13 août 2019 Statut Membre Dernière intervention 14 août 2019 - 14 août 2019 à 11:17
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 :)

4 réponses

eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 212
Modifié le 13 août 2019 à 19:18
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

1
yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471
13 août 2019 à 19:52
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
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 212
13 août 2019 à 21:05
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
0
yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471 > eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023
13 août 2019 à 21:22
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
0
Mcyaofly Messages postés 5 Date d'inscription mardi 13 août 2019 Statut Membre Dernière intervention 14 août 2019
13 août 2019 à 22:12
Un grand merci ! Je n'ai pas compris la macro et je vais m'y pencher dessus mais c'est parfait !
0
Mcyaofly Messages postés 5 Date d'inscription mardi 13 août 2019 Statut Membre Dernière intervention 14 août 2019
14 août 2019 à 11:17
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 !
0
yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471
13 août 2019 à 17:35
bonjour, quel est ton contexte, que vas-tu faire avec le résultat?
0
Mcyaofly Messages postés 5 Date d'inscription mardi 13 août 2019 Statut Membre Dernière intervention 14 août 2019
13 août 2019 à 17:37
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.
0
yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471 > Mcyaofly Messages postés 5 Date d'inscription mardi 13 août 2019 Statut Membre Dernière intervention 14 août 2019
13 août 2019 à 18:47
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.
0
Raymond PENTIER Messages postés 58389 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 18 avril 2024 17 090
13 août 2019 à 18:03
Je n'ai pas trouvé de solution par formules simples.
Il faudra certainement passer par du VBA (hors de mes compétences) ...
0
yg_be Messages postés 22707 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 19 avril 2024 1 471
Modifié le 13 août 2019 à 19:47
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)
0