Calculer l'écart successif le plus élevé d'une colonne
Mcyaofly
Messages postés
7
Statut
Membre
-
Mcyaofly Messages postés 7 Statut Membre -
Mcyaofly Messages postés 7 Statut Membre -
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 :)
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
-
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
-
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 -
Salut yg_be :-)
tu es sûr de ton coup pour leIf 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- 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
-
-
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 !
-
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
bonjour, quel est ton contexte, que vas-tu faire avec le résultat? -
Je n'ai pas trouvé de solution par formules simples.
Il faudra certainement passer par du VBA (hors de mes compétences) ...
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
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)