Calcul avec les deux dernières valeurs?

Bonjour!

Depuis quelques jours je bloque sur un problème (peut être impossible à résoudre) et j'ai décidé d'aller chercher conseil chez des personnes qualifiées.

J'ai un tableau (exemple en pièce jointe) avec des dates et des mesures. Je voudrai que seul la dernière mesure par ligne et l'avant dernière se calculent entre elles.

Par exemple sur le tableau, la première ligne est pleine de valeurs, mais je veux que le calcul ne se fasse qu'avec G4 - F4 (la valeur obtenue est fait pour l'exemple avec une simple formule).

Où à la ligne 2 du tableaux, le calcul ne fait que: D5 - B5.

La ligne 3 du tableau: F6 - D6 et ainsi de suite.

Donc sur une ligne seule les deux dernières valeurs. Mais à cela je cherche aussi que lorsqu'il y a qu'une valeur sur la ligne et peu importe où, alors c'est la valeur - 40.

J'ai tenté la fonction SI(ET(, mais sans succès.

Merci d'avance pour vos éclaircissements, si bien sur ma demande est réalisable.

17exemple.xlsx (9.43 Ko)

Bonjour

un essai

27christh.xlsx (9.26 Ko)

cordialement

Bonjour,

En I4 :

=SI(NB(B4:G4)=1;MAX(B4:G4)-40;INDEX(A4:G4;MAX((B4:G4<>"")*COLONNE(B4:G4)))-INDEX(A4:G4;GRANDE.VALEUR((B4:G4<>"")*COLONNE(B4:G4);2)))

Formule matricielle à valider avec Shift+Ctrl+Entrée

La formule doit s'entourer de { } si la validation est correcte.

eric

Edit : salut tulipe

ta formule est plus courte, mais à condition que les valeurs soient croissantes. Ce qu'on peut supposer au vu de l'exemple mais...

5exemple.xlsx (10.55 Ko)

Bonjour le fil, bonjour le forum,

Si une proposition VBA intéresse quelqu'un (ce qui m'etonnerait...) :

Sub Macro1()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim PL As Range 'déclare la variable PL (PLage)
Dim LI As Range 'déclare la variable LI (LIgne)
Dim TL() As Variant 'déclare le tableau des variables TL (Tableau des Lignes)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)
Dim COL2 As Integer 'déclare la variable COL2 (COLonne 2)
Dim COL1 As Integer 'déclare la variable COL1 (COLonne 1)

Set O = Worksheets("Feuil1") 'définit l'onglet O (à adapter à ton cas)
O.Range("I3").CurrentRegion.Offset(1, 0).ClearContents 'efface les anciennes valeurs
Set PL = O.Range("B4:G9") 'définit la plage PL
ReDim TL(PL.Rows.Count) 'redimensionne le tableau des lignes TL (autant de ligne que PL a de lignes)
For Each LI In PL.Rows 'boucle sur toutes les plignes LI de la plage PL
    Select Case Application.WorksheetFunction.CountA(LI) 'agit en fonction du nonbre de cellule non vides de la ligne LI
        Case 6 'cas 6
            TL(I) = LI.Cells(1, 6).Value - LI.Cells(1, 5).Value 'définit la valeur de la variable TL(I) (dernière - avant dernière)
        Case 1 'cas un
            TL(I) = LI.SpecialCells(xlCellTypeConstants) - 40 'définit la valeur de la variable TL(I) (la cellule renseignée - 40)
        Case 0 'cas 0
            TL(I) = 0 'définit la valeur de la variable TL(I) (0)
        Case Else 'tous les autres cas
            J = 6 'initialise la variable J
            Do 'exécute
                'si la cellule cen colonne J de la ligne LI n'est pas vide, définit la colonne COL2, sort de la boucle DO
                If LI.Cells(1, J) <> "" Then COL2 = J: Exit Do
                J = J - 1 'décrémente J
            Loop 'boucle
            J = COL2 - 1 'initialise la variable J
            Do 'exécute
                'si la cellule cen colonne J de la ligne LI n'est pas vide, définit la colonne COL1, sort de la boucle DO
                If LI.Cells(1, J) <> "" Then COL1 = J: Exit Do
                J = J - 1 'décrément J
            Loop 'boucle
            'définit la valeur de la variable TL(I) (la valeur de la cellule en colonne COL2 - la valeur de la cellule en COL1)
            TL(I) = LI.Cells(1, COL2).Value - LI.Cells(1, COL1).Value
       End Select 'fin de lá ction en fonction du nombre de valeurs dans la ligne LI
       I = I + 1 'incrémente I
Next LI 'prochaoine ligne de la boucle
'renvoie dans I4 redimensionnée, le tableau TL transposé
O.Range("I4").Resize(PL.Rows.Count, 1).Value = Application.Transpose(TL)
End Sub

Bonjour,

En I4 :

=SI(NB(B4:G4)=1;MAX(B4:G4)-40;INDEX(A4:G4;MAX((B4:G4<>"")*COLONNE(B4:G4)))-INDEX(A4:G4;GRANDE.VALEUR((B4:G4<>"")*COLONNE(B4:G4);2)))

Formule matricielle à valider avec Shift+Ctrl+Entrée

La formule doit s'entourer de { } si la validation est correcte.

eric

Edit : salut tulipe

ta formule est plus courte, mais à condition que les valeurs soient croissantes. Ce qu'on peut supposer au vu de l'exemple mais...

oui ,j'en étais conscient ,alors j'ai tablé sur une non régression" honteuse "

Un grand merci à vous, c'est exactement ce que je cherchais.

Merci également ThauThème pour ta proposition vba, mais vu mon niveau actuel, je vais pour le moment m'en passer, mais j'espère bien un jour en connaitre d'avantage sur le vba.

Mais maintenant j'ai une autre doléance, j'ai un problème un peu similaire, mais là c'est pour calculer l'écart entre les deux dernières dates sur un tableau (pièce jointe) ou il figure des mesures.

Comme pour le problème précédent, il y aura parfois des lignes avec seulement une ou deux mesures.

S'il y a deux mesure je cherche à avoir l'écart entre les deux dernières dates.

Par exemple sur la première ligne, se serait de faire la différence entre le 08/02/2020 et le 05/11/2020

Mais si sur une ligne il n'y a qu'une mesure, alors faire la différence de cette seule mesure par rapport à une date qui est en colonne B.

Par exemple pour la dernière ligne du tableau, se serait de faire la différence entre le 08/02/2020 (date de la seule mesure) et le 20/10/2019 (colonne B, ligne 5).

J'ai tenté de reprendre le principe de la matrice pour le problème précédent, mais sans succès. J'admets que je cherche la facilité

J'ai tenté, mais je n'ai rien réussit de probant, si quelqu'un a une siolution, je suis preneur, sinon tant pis.

Merci!

Navré d'être tellement "chiant", mais pour mon second problème, est-il réalisable, ou est-ce que je cherche une chimère?

J'ai tenté avec une fonction si, sans résultat, j'ai tenté avec la fonction index, sans résultat.

Faut-il de j'utilise d'autres fonctions? Ou comme dit au début de ce message, il n'y a pas de solution?

Merci de votre temps.

bonjour

explique pourquoi ,un fois ,on soutrait des dates , et parfois des mesures (cel N5 qui donne 15)

cordialement

Effectivement j'aurai du commencer par être plus précis et notamment dire ce que je cherche à réaliser.

Dans le cadre de mon travail, je suis amener à effectuer ce que nous appelons des suivis de croissance sur des bovins laitiers. J'ai pour cela créer un tableau très ressemblant à celui du fichier que j'ai joint intitulé "Calcul écart date".

C'est à dire dans l'exemple, la ligne 3 ou je saisie les dates auxquelles j'effectue les mesures (pour le premier bovin) , la ligne 4 ou en colonne B je saisie la date de naissance puis toujours sur cette ligne il y aura les mesures en colonnes ( C, E, G, I, K) (et ces mesures ont une correspondance de poids).

Ce que je cherche c'est en fait ce que nous appelons le gain moyen quotidien entre deux mesures. Pour cela il me faut le poids prit entre deux mesures, chose que j'ai grâce à vous avec la formule matricielle, mais pour avoir ce gain moyen quotidien il me faut le nombre de jours entre les deux mesures et c'est ce que je cherche à réaliser pour ensuite pouvoir diviser le poids entre deux mesures par le nombre de jours entre deux mesures et cela ira remplir un case sur un tableau qui figure sur une autre feuille.

Mais la difficulté c'est que je n'ai pas toujours tous les mêmes bovins, lors de chaque mesure. Certains peuvent être amené à sauter une ou plusieurs mesures (exemple avec la ligne 6) mais là je cherche quand même alors à connaitre l'écart en jours entre la mesure du 05/11/2019 et 15/05/2018, car j'ai la différence de poids (et encore une fois pour cette information, je vous remercie).

Ou alors pour la ligne 8 c'est un nouveau bovin qui intègre le tableau car plus jeune et lors d'une première mesure je cherche à faire la différence entre la date de mesure (08/02/2020 dans l'exemple) et la date de naissance (20/10/2019).

Voilà, j'espère que c'est plus clair? Sinon ne pas hésitez me demander plus de renseignements si besoin. Puis comme dit dans un autre message, si ma demande n'est pas réalisable, simplement me dire que ça ne l'est pas et je passerai à autre chose.

En tout cas merci d'avoir prit le temps de lire ma requête.

re

GMQ ,je connais j'ai passé mon BTA général en 1975 .....

pour faire simple , ne crois tu pas qu"il eut été plus simple de faire une ligne par "animal" avec son n° d'elevage ,voire le nom

il aurait été meme possible de calculer ce gmq entre chaque pesée , de manière a faire une courbe ................

ce qui m'interroge ,c'est que selon le cas ,onsort des "mesures" ou "des jours" ,comment tu fais pour dépatouiller ??

cordialement

En fait une ligne correspond à un animal à la fois. Vu que sur un élevage il y aura plusieurs animaux à mesurer, j'ai donc prévu plusieurs lignes et se sera alors un ou des fichiers par élevage.

J'aurai sans doute du commencer par montrer ce que je veux atteindre et donc en pièce jointe j'ai, cette fois-ci, mis le fichier que j'ai commencer par élaborer.

La premières feuille "Données à saisir" c'est là que je mets l'identifiant (colonne B), puis en colonne C la date de naissance et ensuite la mesure. Sur la même ligne que la mesure, j'ai mis une formule qui me donne l'âge en mois au moment de la mesure.

Après vient la feuille "Graphique" ou j'ai fait en sorte que sur une courbe d'objectif, des points (qui correspondent aux animaux mesurés) viennent ce placer. A chaque mesure un nouveau point identique vient s'ajouter.

Alors pour voir si l'objectif est atteint, c'est bon.

Par contre plus bas j'ai fait un tableau, qui remet les animaux mesurer, mais ce coup-ci avec le poids à l'instant de la dernière mesure et au quel je voudrai rajouter le GMQ qui me servira surtout à calculer une probable date d'IA. Cette date correspond à la différence entre 410 (l'objectif est de faire l'IA entre 400 et 420) moins le poids à la dernière mesure le tout diviser par le GMQ de la dernière mesure . Car le GMQ peut varier d'une mesure à une autre, donc la date d'IA ne sera pas forcément la même.

Puis la troisième feuille "Objectifs" est celle qui contient la plupart des fonctions, dont celle qui m'a été donnée dimanche et qui commence à la colonne AA47 qui est la différence de poids entre les deux dernières mesures d'un animal.

Comme dit le graphique est très bien pour vite voir ou en est l'animal par rapport à la croissance objectif, mais le GMQ me servirait à calculer une date qui permettra à l'éleveur de prévoir une plage pour l'IA, ou de décider si la date ne lui convient pas pour x raisons, de changer la conduite soit pour avoir plus de croissance et faire l'IA plus tôt, soit pour un peu baisser la croissance (baisser le GMQ, sans aller dans de l'amaigrissement) et retarder l'IA.

J'espère que l'explication peut aider à y voir mieux.

Maintenant comme dit, j'ai tenté et j'admets avoir un niveau très très basique pour pas dire faible avec Excel, mais surtout c'est de savoir si la requête est réalisable ou si je perds mon temps.

Encore une fois merci de ton intérêt pour ma problématique.

Merci pour l'aide fournie, j'ai réussi à trouver une solution, je passe le sujet en résolu.

A plus sur le forum.

Rechercher des sujets similaires à "calcul deux dernieres valeurs"