Msgbox qui apparaîssent plusieurs fois

Bonjour,

Je suis très débutante en vba et quand je lis les sujets proposés, je me sens vraiment petite...!

Bref, je me lance, tant pis...

J'ai voulu créer une alerte concernant un nb de commandes. J'ai programmé des msgbox qui apparaissent selon le nb de commandes justement.

Or, je souhaiterai qu'elles n'apparaissent "qu une fois", je ne sais pas comment coder ça, ni même si je suis très claire...

Exemple: (et fichier en PJ)

si j ajoute une commande (peu importe la qté) dans la zone "basse saison", toutes mes msgbox s'ouvrent (je vous laisse tester...): normal car les cellules ont atteint les valeurs qui déclenchent (il y a 4 variables potentielles qui déclenchent ces msgbox)

Le pb, c'est que si je ne bouge pas les commandes "pleine saison" par ex, mais que j'ajoute des commandes en "cas part" ou "basse saison", les msgbox continuent de s'ouvrir inlassablement, et ça devient lourd...

Je voudrais donc trouver un "truc" qui me permettent de les faire s'ouvrir qu'une seule fois, même si les valeurs ne change pas.

Pr l'instant c'est codé sous worksheet_calculate (et c'est pr ça que ça s'affiche à chaque fois que ça calcule), j'ai essayé de faire qqch avec worksheet_change (target as range), mais en fait je crois que je n'ai pas compris comment déclarer mes variables...

BREF, je suis perdue!!!...

Si qqun à une piste de travail... merci!

5essai-1.xlsm (21.00 Ko)

Bonjour,

A tester :

5essai-2.xlsm (22.03 Ko)

avec "Application.Undo" qui annule la saisie
On compare les "Valeurs des variables" (stocké dans la procedure) avec les anciennes valeurs de la cellule changé.

Si il y a une différence, on affiche le message qui correspond.

Comme tu débute, je ne sais pas si tu connais "Application.EnableEvents = False" que j'ai mis dans ce fichier.
Ca permet de stopper l'execution automatique des procedures (utile car on souhaites changer la valeur de certaines cellules sans boucler sur cette procedure "change".) donc si les macro ne s'execute pas, pense a passer "Application.EnableEvents = True"

A+

Salut à tous,

Tu peux aussi utiliser des variables Static

Je n'ai pas mis toute la procédure à toi de compléter

Private Sub Worksheet_Calculate()

    'Déclaration des variables
    Static PleineSaison As Boolean
    Static BasseSaison As Boolean
    Static Places As Boolean
    Static CasPart As Boolean

    Dim SommePleineSaison As Long
    SommePleineSaison = Range("O22").Value

    Dim SommeBasseSaison As Long
    SommeBasseSaison = Range("N22").Value

    Dim NbdePlaces As Long
    NbdePlaces = Range("N23").Value

    Dim SommeCasPart As Long
    SommeCasPart = Range("N39").Value

    'Pleine Saison PLEIN!
    If SommePleineSaison = 4 And PleineSaison = False Then
        MsgBox "ATTENTION, PS presque plein"
        PleineSaison = True
    ElseIf SommePleineSaison = 5 And PleineSaison = False Then
        Beep
        MsgBox "ALERTE!, PS plein"
        PleineSaison = True
    End If

    'Basse Saison PLEIN!
    If SommeBasseSaison = 5 And BasseSaison = False Then
        MsgBox "ATTENTION, BS atteint"
        BasseSaison = True
    End If
'...
'...
'...
End Sub

Explications ici : https://learn.microsoft.com/fr-fr/office/vba/language/reference/user-interface-help/static-statement

Bonjour à tous,

Merci Geof et Jean-Paul d avoir répondu à mon message. J'apprends chaque jour, c'est formidable!

J'ai quand même 2 pb:

@Geof: j'ai testé ta macro mais aucune msgbox n'apparaissent... C'est embêtant car c'est ce que je cherchais...

--> If Target.Cells.Count > 1 Then Exit Sub : il risque parfois d'y avoir plusieurscellules qui se modifient en même temps, les msgbox n'apparaitront jamais alors, non?

--> If Range("O22").Value <> SommePleineSaison Then ---> pourquoi <> ? puisque c'est la valeur =4 que je cherche... J'avoue être perdue...
If SommePleineSaison = 4 Then

--> Application.EnableEvents = False

Application.Undo ---> je pense avoir compris leur rôle dans la macro, merci.

@Jean-Paul: j'ai testé aussi ta macro, et c'est celle qui se rapproche le plus de ce que je cherche, merci!

Cependant, je ne comprends pas pourquoi seules les msgbox "attention" apparaissent et pas les "alerte"...? dans cette macro, les msgbox apparaissent bienqu'une fois, ça c'est top, c'est ce que je voulais! mais en fait, dans chaque if, les elseIf ne sont jamais exécutés... Il y a un frein quelque part que je ne comprends pas, est ce dû à boolean...? Je ne sais pas si je suis très claire, mais si vous avez encore des pistes, je prends volontiers...

J'ai bien vu vos messages hier, et je travaille dessus depuis, mais je ne trouve pas de solutions à apporter, il y a des choses que je ne dois pas comprendre encore...!

En tout cas, un grand merci pour votre attention et vos propositions, elles me font avancer pour apprendre et comprendre. MERCI!!

Cdt,

1essai-2.xlsm (20.44 Ko)
1essai-1.xlsm (22.96 Ko)

Salut Didjag,

Peux-tu tester en changeant le type pour les variables statiques (Passage en type Long). et changer les conditions ElseIf comme indiqué ci-dessous.

    'Déclaration des variables
    Static PleineSaison As Long
    Static BasseSaison As Long
    Static Places As Long
    Static CasPart As Long

    Dim SommePleineSaison As Long
    SommePleineSaison = Range("O22").Value

    Dim SommeBasseSaison As Long
    SommeBasseSaison = Range("N22").Value

    Dim NbdePlaces As Long
    NbdePlaces = Range("N23").Value

    Dim SommeCasPart As Long
    SommeCasPart = Range("N39").Value

    'Pleine Saison PLEIN!
    If SommePleineSaison = 4 And PleineSaison = 0 Then
        MsgBox "ATTENTION, PS presque plein"
        PleineSaison = 1
    ElseIf SommePleineSaison = 5 And PleineSaison <= 1 Then ' // Changement ici
        Beep
        MsgBox "ALERTE!, PS plein"
        PleineSaison = 2 ' // Changement ici aussi
    End If

    'Basse Saison PLEIN!
    If SommeBasseSaison = 5 And BasseSaison = 0 Then
        MsgBox "ATTENTION, BS atteint"
        BasseSaison = 1
    End If

'...
'...
'...

Comme d'habitude je n'ai pas traité l'ensemble de la procédure, mais tu devrais t'en sortir.

Bonjour,

Comme la proposition de Jean-Paul se rapproche le plus de ce que tu cherche,
Oublie ma proposition, mais pour l'explication :

--> If Target.Cells.Count > 1 Then Exit Sub : il risque parfois d'y avoir plusieurscellules qui se modifient en même temps, les msgbox n'apparaitront jamais alors, non?

Par plussieurs cellules tu veux dire qu'elle sont importées ? ou une cellule est modifiée et (avec les formules) plussieurs valeurs changent ?
Dans le deuxieme cas ça devrait fonctionner.

--> If Range("O22").Value <> SommePleineSaison Then ---> pourquoi <> ? puisque c'est la valeur =4 que je cherche... J'avoue être perdue...

If SommePleineSaison = 4 Then

Le différent car je souhaite savoir si au moment de la modification j'ai la même valeur que si il n'y avait pas de modification (avec le Undo).

1 - La procedure se lance apres un changement de cellule
2 - On stock les resultats de ce changement dans la variable "SommePleineSaison" et les autres
3 - On annule ce changement avec (Undo) et on regarde si "SommePleineSaison" a changé avec le "<>"
4 - Si c'est le cas le message correspondant apparait.

@Geof: j'ai testé ta macro mais aucune msgbox n'apparaissent... C'est embêtant car c'est ce que je cherchais...

Avec le fichier que tu as posté "essai2" j'ai bien le message mais je modifie cellule par cellule en colonne L ou G des lignes 10 a 21.

image image

A+

Bonsoir,

SUPER TOP!!! FABULEUX!!!!

Merci mille fois!

@Jean-Paul: la macro fonctionne top, c'est exacteemnt ce qu'il me fallait. Vraiment un grand merci, et oui, je m'en suis sortie pour compléter la procédure...!

@Geof: c'est vraiment SUPER SYMPA de m'avoir expliqué ta macro, même si elle ne me servira pas sur ce coup...

En effet, c'est "avec une cellule modifiée (et les formules), plusieurs valeurs changent" --> dc ok, j'ai compris.

Et pr la 2eme explication, ok, je n'avai s pas compris Undo sous cet angle, dc ok pr moi.

Je prends carrément bonne note de tout ça, et je le garde dans un coinde ma tête pr une autre fois.

Vraiment un grand merci pr le temps accordé!

Belle soirée à vous.

Salut,

Merci, je pense qu'il y a toujours des âmes charitables pour aider ici, il suffit de demander alors n'hésites pas.

Rechercher des sujets similaires à "msgbox qui apparaissent fois"