Gérer cellules valeur mini et valeur maxi en fonction d'une autre cellule

Bonjour

Dans un tableau excel je voudrais faire évoluer le contenu de cellules avec une valeur minimum pour l’une et maximum pour l’autre. Ces valeurs dépendent du contenu d’une autre cellule.

Pour imager ma problématique, j'ai joins un tableau exemple. J’ai 3 colonnes avec valeur saisie, mini et maxi. J’ai mis 4 lignes dans l’exemple, mais dans la réalité, tout doit se passer sur la même ligne. Ici, c’est pour schématiser 4 saisies de valeurs différentes

Sur le 1er cas de figure je saisis 100, donc je veux 100 en mini et en maxi car les cellules étaient vides.

Sur la ligne suivante j’ai saisi 150 en place de 100, j’ai la cellule maxi qui passe à 150 car supérieur à l’ancienne valeur qui était 100.

Sur la ligne suivante j’ai saisi 80 en place de 150, j’ai la cellule mini qui passe à 80 car inférieur à l’ancienne valeur qui était 100.

Sur la ligne suivante j’ai saisi 100, rien ne change car supérieur à 80 et inférieur à 150.

Je n’arrive pas à paramétrer ce type de traitement.

Merci pour votre aide

Bonjour,

Pas sûr de tout avoir bien compris quand vous dites, "tout doit se passer sur la même ligne" mais :

=MIN($C$4:C4) 'En D4 puis en tirant vers le bas
=MAX($C$4:C4) 'En E4 puis en tirant vers le bas

Cdlt,

Je comprends que mon explication ne soit pas top de top.

J'ai mis 4 lignes d'exemple, mais dans mon tableau, il n'y aura qu'une ligne.

Ce tableau va servir à déterminer les valeurs minimum et maximum de cotation d'une action à partir de la date d'achat.

Chaque matin, j'entre la valeur de l'action et la cellule mini ou maxi va évoluer en fonction de la valeur saisie.

Après quelques jours ou semaines, cela me permet de connaître la valeur la plus basse et la valeur la plus haute qu'à eu l'action depuis son achat.

Est ce un peu plus clair ?

Bonjour,

Donc si je comprend bien, d'un jour à l'autre, vous allez rentrer dans une cellule C4 une valeur donc on cherche à connaître la valeur maximale. Par exemple les 4 lignes proposées sont des saisies admettons sur 4 jours, sauf qu'elles se feront toutes sur C4 et donc s'écraseront d'un jour à l'autre ? Vous ne conservez pas d'historique ? Si j'ai bien compris, c'est risqué en cas de mauvaise saisie ... Par exemple si vous rentrez 10 à la place de 100 en C4, alors 10 sera retenu comme valeur minimale en D4, et si vous rentrez 100 en C4, 10 restera en D4 car tout ne se joue que sur une seule cellule, sauf si vous vous souvenez de la valeur minimale ancienne et donc la rerentrez manuellement en D4.

J'attends que vous me donniez des éclaircissements sur votre façon de travailler. Donnez un exemple concret, avec des jours, des références de cellules, des valeurs entrées, ce que vous voulez récupérer à chaque fois, afin que j'arrive à reproduire la manipulation chez moi et code en adéquation avec votre besoin.

Cdlt,

Jai essaye de mettre un exemple.

Valeur A Investissement 10 000 le 1 juin. Ce sera mon capital investit dans la valeur A

Chaque matin, je contrôle cette valeur et je saisis la valorisation de mon capital.

Je voudrais que cette valorisation mette à jour la cellule mini si elle est inférieure à la valeur mini qui est dans la cellule et la valeur maxi si elle est supérieure à celle qui est dans la cellule concernée.

Le 2 juin 10010

Le 3 juin 10010

Le 4 juin 10005

Le 5 juin 9950

Le 6 juin 10020

Le 7 juin 10030

…..

En l’occurrence, là, j’aurai 9950 dans le mini et 10030 dans le maxi. J’ai 7 jours écoulés et une variation de 80.

Dans les investissements, l’historique ne me sert pas. J’ai besoin de savoir ce que j’ai investi, la valeur actuelle et s’il y a beaucoup de fluctuation en peu de temps. Je me dis que si c’est jouable pour une valeur, je pourrai ajouter des cellules dates associées aux valeurs mini et maxi. Ainsi je peux calculer un nombre de jours écoulés entre le haut et le bas. A cela j’ajoute des calculs de %.

Il est clair que je peux entrer une mauvaise valeur sans m'en rendre compte. C'est un risque. Il faudra que je cogite à une solution.

Je pourrais le faire manuellement, mais je me suis pris au jeu d’essayer de l’automatiser. Après 3 jours de recherches, je déclare forfait. Je ne maîtrise pas assez excel.

Bonjour,

Dans ce cas, si vous avez en B3 la valeur saisie, alors en C3 sera la valeur mini, en D3 la valeur maxi, dans le module de votre feuille, le code commenté :

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, [B3]) Is Nothing Then 'Si la valeur changée est celle de B3 alors
    [C3] = Application.WorksheetFunction.Min([B3], [C3]) 'C3 est la valeur minimale entre B3 et C3
    [D3] = Application.WorksheetFunction.Max([B3], [D3]) 'D3 est la valeur maximale entre B3 et D3
End If
End Sub

A adapter bien évidemment en fonction des références où se trouvent vos valeurs (d'où les commentaires pour vous aider)

Cdlt,

Bonjour

Merci pour cette solution. Je vais regarder comment intégrer cela à mon tableau. Je vous ferai un retour du résultat.

Je ne garantis pas que ce sera dans la journée. Il faut que je regarde comment intégrer ces lignes de code.

Mais au moins, cela me fera progresser dans l'utilisation d'excel.

Bonne journée

Cordialement

Après mise en place et adaptation aux cellules concernées, ça fait exactement ce que j'ai demandé.

Je n'aurais jamais trouvé, car je ne connaissais pas ce type d'instructions. J'ai remarqué que l'historique des actions était supprimé lors de l'exécution de ses instructions. Je comprends mieux, le commentaire sur la non conservation de l'historique.

Si maintenant, je veux aller plus loin. Est il possible que lorsque le test est validé, cela permette l'exécution d'un groupe d'instruction ?

Je m'explique. Si le test détermine qu'il y aura mise à jour de la cellule mini, cela exécute un groupe d'instructions.

Mise à jour de la cellule mini

Mise à jour d'une date

Différents calculs.

Est il possible de créer plusieurs groupes de code pour une même feuille de tableau ? ou il faut empiler les instructions dans le même groupe ?

Comme j'ai plusieurs types de valeurs, j'ai dupliqué les lignes concernées.

Et comme j'ai des feuilles de tableau différentes suivant le type d'investissement, je vais créer un groupe de code par feuille.

Code que j'ai mis en place :

Private Sub Worksheet_Change(ByVal Target As Range)

'Si changement de la valeur dans Txx alors
'Vxx est la valeur minimale entre Txx et Vxx
'Wxx est la valeur minimale entre Txx et Wxx

If Not Application.Intersect(Target, [T23]) Is Nothing Then
[V23] = Application.WorksheetFunction.Min([T23], [V23])
[X23] = Application.WorksheetFunction.Max([T23], [X23])
End If

If Not Application.Intersect(Target, [T24]) Is Nothing Then
[V24] = Application.WorksheetFunction.Min([T24], [V24])
[X24] = Application.WorksheetFunction.Max([T24], [X24])
End If

End Sub

Cordialement

Jacques Julien

Bonjour,

Attention car si vous faites trop d'instructions dans des procédures événementielles vous risquez d'avoir des effets de bords ou des changements de cellules provoquent d'autres instructions nous souhaitées, etc ... Dans ce cas il vaudra peut être mieux passer par une MaJ via un bouton et un code dans un module standard.

En attendant, le code selon votre demande :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim L&, MIN&, MAX&
Application.EnableEvents = False 'Desactive le déclanchement d'autres procédures évenementuelles
For L = 23 To 24 'Pour les lignes 23 et 24
    If Not Application.Intersect(Target, Cells(L, 20)) Is Nothing Then 'Si on coupe pas l'intersection de L et colonne T
        MIN = Target.Offset(, 2) 'On récupère la valeur min à partir de la valeur changée, 2 colonnes à droite, donc colonne V
        MAX = Target.Offset(, 4) 'Idem mais 4 colonnes à droite donc X
        Cells(L, 22) = Application.WorksheetFunction.MIN(Cells(L, 20), Cells(L, 22)) 'On MaJ le min
        Cells(L, 24) = Application.WorksheetFunction.MAX(Cells(L, 20), Cells(L, 24)) 'On MaJ le max
        If Cells(L, 22) <> MIN Then MsgBox "La valeur minimale de la ligne " & L & " à changé" 'Si MIN est différent de MaJ MIN alors ...
        If Cells(L, 24) <> MAX Then MsgBox "La valeur maximale de la ligne " & L & " à changé" 'Idem pour MAX
    End If
Next L 'Passe à la ligne suivante
Application.EnableEvents = True 'Réactive les procédures évenementielles
End Sub

Les MsgBox sont l'équivalent de la suite de vos instructions.

Cdlt,

PS : On ne peut avoir qu'une procédure Worksheet_Change par feuille.

je vais analyser le coding et essayer de comprendre. Je vous fais un retour dès que j'ai avancé.

Merci

Cordialement.

Code installé. ça fonctionne super.

Je vais avancer dans mon projet

Merci pour votre aide.

Cordialement

Rechercher des sujets similaires à "gerer valeur mini maxi fonction"