Autres un petit exercice juste pour le sport

patricktoulon

XLDnaute Barbatruc
bonjour a tous
je fait une petite experience juste pour le sport et aider note ami @Harry Khauver

d’après ce que j'ai compris il souhaiterais afficher un msgbox lorsque qu'une cellule dépasse un certaine somme
seul inconvénient cette somme est générée par une formule =somme(....) l’événement change n'est donc pas déclenché

quand a l’événement calculate il n'a aucun paramètre il est difficile d’éditer un msgbox avec des éventuelles coordonnées ou donnée de la ligne



j'ai donc pensé utiliser une fonction perso et l'utiliser en formule faisant la même chose je sais c'est drôle ;)
mais pas tant que ca car dans cette fonction perso qui calculerait la somme il m'est facile d'y intégrer un msgbox comme déterminer la ligne qui vient de changer malgré la répétition
on aurait ainsi une sorte d'événement Avant_change
alors ça a l'air facile mais en fait on a un soucis avec la calculation qui recalcule toute la plage et donc le msgbox se répète c'est ballo!!!
j'ai bien essayé events a false/true et calculation a manual/auto mais rien y fait j'ai quand même une répétition sur la première fois

ET la !!! a ma grande surprise en vous préparant un classeur exemple
j'ai verrouillé les cellules avec formules somme et (somme2 fonction perso) et déverrouillé celles que l'on on peut modifier d'une manière ou d'une autre peu importe
de facon a ce que pour les test ce soit clair pour tout le monde et que l'on foute pas le boxon dans les cellule avec formules

alors je ne sais pas ce que vous en pensez mais ça me parait intéressant

l'exercice ici vous l'avez compris c'est déclencher un message(msgbox) quand une cellule change par formule

si quelqu'un sait le pourquoi du phénomène ce la m’intéresse beaucoup

le phénomène étant :
(fonctionne sans répétition quand cellule verrouillée et feuille protégée mais pas quand la feuille est déprotégée)
pour tester donner autant de fruits a pierre Paul jacques etc... que vous voulez et des que l'on dépasse 5 fruit on a le message
donc voila un exemple simple du fichier
seules les cellule grise et verte sont modifiables
 

Pièces jointes

  • test avant_change.xlsm
    27.2 KB · Affichages: 19
Dernière édition:

Jacky67

XLDnaute Barbatruc
bonjour a tous
je fait une petite experience juste pour le sport et aider note ami @Harry Khauver

d’après ce que j'ai compris il souhaiterais afficher un msgbox lorsque qu'une cellule dépasse un certaine somme
seul inconvénient cette somme est générée par une formule =somme(....) l’événement change n'est donc pas déclenché
Bonjour,
Une piste...
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Cells(Target.Row, "e") > 5 Then MsgBox "Dépasseement"
End Sub
Ou
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Plage
Set Plage = Range("a3:d" & Cells.Find("*", , , , xlByRows, xlPrevious).Row)
If Intersect(Target, Plage) Is Nothing Then Exit Sub
If Cells(Target.Row, "e") > 5 Then MsgBox "Dépasseement"
End Sub
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
Bonjour @sylvanu et merci pour le retour
l’événement calculate recalcule toute les formules
relis bien mon énoncé et peut être même tester mon exemplaire
je cherche a créer un événement spécifique en fonction d'une certaine cellule
j'ai bien trouvé quelque chose qui fonctionne et en formule / vba mais ca ne fonctionne que si les cellules sont verouillée et feuille protégée

si je verrouille pas et protège pas il y a répétition comme avec calculate
 

eriiic

XLDnaute Barbatruc
Bonjour à tous,

un msgbox ne modifie pas l'environnement, tu y as droit dans une fonction personnalisée :
VB:
Function somme2(plage As Range, max As Double) As Double
    somme2 = Application.Sum(plage)
    If somme2 > max Then MsgBox "Attention, " & max & " dépassé"
End Function

Code:
=somme2(B2: D2;5)
non ?

Sinon tu peux superviser dans Change les antécédents de la formule
eric
 

eriiic

XLDnaute Barbatruc
en plus simple... ;-)

Bizarrement je ne constate pas la répétition que tu annonces.
Mais ça ne m'étonnerait pas plus que ça vu qu'après un passage à False, Worksheet.EnableCalculation = True marque toutes les formules de la feuille à recalculer, possible que Application.Calculation = xlCalculationAutomatic ait un effet similaire dans certains cas.

Je ne sais pas si tu as vu, j'avais complété mon post :
Sinon tu peux superviser dans Change les antécédents de la formule
 

patricktoulon

XLDnaute Barbatruc
re
il faut que la formule soit utilisée plusieurs fois pour voir la répétition

si tu n'a pas la répétition c'est inquiétant le calculate recalcule toutes les cellules donc la fonction est appelée plusieurs fois

en gros je voudrais le message de la seule cellule qui vient d’être modifiée

mais la je vient de réessayer dans un fichier vierge et c'est aléatoire j'y pige plus rien

j'ai opter pour une fonction d' alerte uniquement la formule originale se charge du calcul

VB:
Function Alertes(rng, max) As Long
    Application.Sum (plage)
    If Application.Sum(rng) > max Then MsgBox "Attention max de " & max & " dépassé pour " & Cells(rng.Row, 1)
    Alertes =0
End Function
la fonction vaut toujours zero elle sert juste pour le message
formule base
=SOMME(B2:D2)+Alertes(B2:D2;5)

et je vient de comprendre que ça arrive a chaque fois que vba est réinitialiser (modif code ou autre)
 
Dernière édition:

Discussions similaires