Problème de mise à jour de valeur minimale dans Excel VBA

Bonjour à tous,

J'ai actuellement un problème avec une feuille de calcul Excel et j'espère que quelqu'un pourrait m'aider à le résoudre.

J'utilise du code VBA pour mettre à jour les valeurs des cellules C23 et C24 en fonction de la valeur de la cellule C25. La mise à jour de la valeur maximale (C23) fonctionne bien, mais la mise à jour de la valeur minimale (C24) affiche toujours 0.

Voici le code que j'utilise actuellement :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$C$25" Then
Dim newC25Value As Double
newC25Value = Range("C25").Value

' Mettre à jour C23 avec la valeur maximale entre sa valeur actuelle et la nouvelle valeur de C25
Range("C23").Value = WorksheetFunction.Max(newC25Value, Range("C23").Value)

' Mettre à jour C24 avec la valeur minimale entre sa valeur actuelle et la nouvelle valeur de C25
Range("C24").Value = Application.Evaluate("MIN(" & newC25Value & "," & Range("C24").Value & ")")
End If
End Sub

J'ai essayé plusieurs approches pour résoudre ce problème, mais la mise à jour de la valeur minimale ne semble pas fonctionner correctement.

Est-ce que quelqu'un aurait une idée sur la raison pour laquelle la mise à jour de la valeur minimale ne fonctionne pas comme prévu ? Toute aide serait grandement appréciée.

Merci d'avance !

Edit modo : code à mettre entre balises avec le bouton </> merci d'y faire attention la prochaine fois

Bonsoir aordepz,

Lorsque vous donnez du code merci de le mettre entrez balises SVP avec le bouton

image

Cordialement

Bonsoir BrunoM45,

Désolé, c'est la première fois que mets du code dans le texte.

bonjour aordepz,

pourquoi pas comme le "max", mais une fois que C24 est 0, il ne peut que devenir négatif ....

Range("C24").Value = Application.Min(newC25Value, Range("C24").Value)

Bonjour,

la mise à jour se fait si la valeur en C25 est inférieure à la valeur en C24, comme cette valeur est 0. Elle sera donc mise à jour si en C25 on a une valeur négative.

Bonjour BsAlv, j'ai essayé to code mais sa ne change rien quand mon classeur se met a jour le max se met a jour mais pas le min.

voici le code mis a jour,

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$C$25" Then
        Dim newC25Value As Double
        newC25Value = Range("C25").Value

        ' Mettre à jour C23 avec la valeur maximale entre sa valeur actuelle et la nouvelle valeur de C25
        Range("C23").Value = WorksheetFunction.Max(newC25Value, Range("C23").Value)
        Debug.Print "C25 a changé. Nouvelle valeur de C23 : " & Range("C23").Value

        ' Mettre à jour C24 avec la valeur minimale entre sa valeur actuelle et la nouvelle valeur de C25
        Range("C24").Value = Application.Min(newC25Value, Range("C24").Value)
        Debug.Print "C25 a changé. Nouvelle valeur de C24 : " & Range("C24").Value
    End If
End Sub

Bonjour h2so4, je comprends pas ta réponse.

re, C24 change chaque fois que C25 change, mais c'est seulement au moment où C25 est < C24 qu'on voit la différence. Maintenant C24=0, donc seulement des valeurs négatives de C25 peuvent visuellement changer C24. Faites le teste et modifier C24 en par exemple 10 et puis changez C25 en 9 et C24 sera 9.

Pour éviter des changements inutiles, vous pouvez changer la macro en :

Private Sub Worksheet_Change(ByVal Target As Range)
     With Target
          If .Address <> "$C$25" Then Exit Sub

          ' Mettre à jour C23 avec la valeur maximale entre sa valeur actuelle et la nouvelle valeur de C25
          If Range("C23").Value < .Value Then
               Range("C23").Value = .Value
               'Debug.Print "C25 a changé. Nouvelle valeur de C23 : " & Range("C23").Value
          End If

          ' Mettre à jour C24 avec la valeur minimale entre sa valeur actuelle et la nouvelle valeur de C25
          If Range("C24").Value > .Value Then
               Range("C24").Value = .Value
               'Debug.Print "C25 a changé. Nouvelle valeur de C24 : " & Range("C24").Value
          End If
     End With
End Sub

Bonjour, j'ai l'impression que le code ne fonctionne pas, quand j'actualise mon classeur rien ne change, il faut aussi tenir en compte que normalement dans la cellule C25 c'est le résultat de "=(C7-C8)+C20" quand le classeur s'actualise et que je ne saisi aucune donné manuellement, je vous envoi la dernière version du ficher avec le dernier code VBA.

re,

il faut plutôt choisir pour l'évent "Calculate" je suppose, parce que C7, C8, C20 et C25 sont des formules

dans module4 (pas nécessairement 4 ,les autres sont aussi okay)

Public Mon_C25 As Double

et dans la feuille "Dashboard"

Private Sub Worksheet_Calculate()
     With Range("C25")
          If .Value2 <> Mon_C25 Then
               On Error GoTo ERR             'normallement je vois pas une possibilité d'erreurs
               Mon_C25 = .Value2             '=Public variable déclaré dans Module 4 ****************************
               Application.EnableEvents = False     'désactiver les events
               ' Mettre à jour C23 avec la valeur maximale entre sa valeur actuelle et la nouvelle valeur de C25
               If Range("C23").Value2 < Mon_C25 Then
                    Range("C23").Value = Mon_C25     'C23 = la valeur max de C25
Debug.Print Format(Now, "hh:mm:ss"), "Nouvelle valeur de C23", Range("C23").Value
               End If

               ' Mettre à jour C24 avec la valeur minimale entre sa valeur actuelle et la nouvelle valeur de C25
               If Range("C24").Value > Mon_C25 Then
                    Range("C24").Value = Mon_C25
Debug.Print Format(Now, "hh:mm:ss"), "Nouvelle valeur de C24", Range("C24").Value
               End If
               GoTo FIN

ERR:
               MsgBox "erreur"
FIN:
               Application.EnableEvents = True
          End If
     End With
End Sub

PS. La macro désactive et active les évents, je ne connais pas assez la feuille, mais peut-être cela n'est pas nécessaire

re, votre ontime cause chaque heure des problèmes s'on l'arrête pas comme il faut.

dans "thisworkbook"

Private Sub Workbook_BeforeClose(Cancel As Boolean)
     Stop_Ontime
End Sub

dans le module2, déclarer cette variable dans la première ligne

Public dOnTime As Double   'ajouter cette ligne

Sub AltcoinSeasonIndex()
     Dim url   As String
     Dim httpRequest As Object
     .....

et puis au bout de ce module2

....

     'Planifier la prochaine exécution

     Stop_Ontime
     dOnTime = Now + TimeValue("01:00:00")
     Application.OnTime dOnTime, "AltcoinSeasonIndex"

End Sub

Sub Stop_Ontime()
     On Error Resume Next
     Application.OnTime dOnTime, "AltcoinSeasonIndex", , 0
     On Error GoTo 0
End Sub
Rechercher des sujets similaires à "probleme mise jour valeur minimale vba"