OVH Cloud OVH Cloud

Msgbox si valeur dépassée

12 réponses
Avatar
C15
Bonjour à tous et à toutes,

J'ai un fichier comportant un tableau (avec des calculs simples de + et
*) et un graphique.

J'ai une cellule avec une liste de choix qui me permet de déclencher une
macro 1 ou une macro 2 pour remplir certaines cellules du tableau et
personnaliser le graphique.

Le déclenchement se fait avec le code suivant (merci à MichDenis) :

>>>>>>>>>>
Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Range("G5")) Is Nothing Then

Range("B12:B14").Select
Selection.ClearContents
Range("A26").Select
Selection.ClearContents
Range("B26").Select
Selection.ClearContents
Range("C26").Select
Selection.ClearContents

If Right(Range("G5"), 2) = "JC" Then
Application.Run "'Masse centrage Avions
Gama_version_Hervé.xls'!Macro_JC"

ElseIf Right(Range("G5"), 2) = "AK" Then
Application.Run "'Masse centrage Avions
Gama_version_Hervé.xls'!Macro_AK"


End If
End If

End Sub
>>>>>>>>>>

Lorsque je complète les cellules "variables" du tableau, certaines
cellules sont bien sur actualisées, comme par exemple
B20=B18-B19
ou B22=B20-B21

Je voudrais qu'après l'exécution de la macro "Macro_JC" et après avoir
renseigné les cellules variables
j'ai une vérification automatique de la valeur de B20.
Celle-ci doit être <1157
avec apparition d'une msgbox "la masse max autorisée au D/L doit être
<1157 kg".

Il en est de même pour B22 (<1157)
et cela doit être vérifié aussi dans le cas "Macro_AK"
avec B20<780 et B22<780.

Merci de votre aide.

A+

C15

2 réponses

1 2
Avatar
jero
Salut,
Worksheet_Calculate() : oui, ok.
Dans le cas de mes 10 autres avions est-ce qu'un select case serait plus
efficace que mes elseif ?


Oui, évidemment, et surtout plus lisible... (Select Case Right(Range("G5"),
2))
Je pense également que si tu as 12 avions, tu vas avoir 12 macros "XX" : en
paramétrant correctement (elles vont furieusement se ressembler sans doute),
tu pourrais allèger le code...
ça pourrait être du genre "
Macro_Avions(TypeAvion As String)
'Ici, les instructions identiques pour tous les types
....
....
'Ici, les instructions spécifiques en fonction du type
Select case TypeAvion
Case "JC"
Case "AK"
.....
.....
End Select
....
Tu appelles ta procédure par Macro_Avions(Right(Range("G5"), 2))
N'oublie pas non plus d'utiliser des variables plutot que des valeurs ("en
dur") : grand principe de base....
Par ex : PoidsMax
Select case TypeAvion
Case "JC"
PoidsMax47
Case "AK"
PoidsMaxx0 .....
.....
End Select
et dans ton message d'avertissement, tu utilises PoidsMax...
Si le PoidsMax change pour un type d'avion, tu n'auras qu'une fois à le
modifier
Voilà, voilà...
A+
"C15" a écrit dans le message de news:
%23PLJq%
Rebonsoir,

Voir le fichier joint :
http://www.cijoint.fr/cjlink.php?file=cj201001/cij1GgT9NC.xls

Avec votre aide à tous les 2 et en cherchant sur le net j'ai sans doute
trouvé la solution :

>>>
Private Sub Worksheet_Calculate()

If [B20] > 780 And Right(Range("G5"), 2) = "AK" Then
MsgBox "Vous avez dépassé la masse max autorisée au D/L (780 kg)",
vbOKOnly

ElseIf [B20] > 1157 And Right(Range("G5"), 2) = "JC" Then
MsgBox "Vous avez dépassé la masse max autorisée au D/L (1157 kg)",
vbOKOnly

End If

End Sub
>>>

Je saisis les poids des personnes à bord et des bagages.
Je saisis le carburant embarqué et au roulage.
La masse au D/L est calculée.
Si elle est >780 (pour AK) msgbox...

Teste pour me dire ce que tu en penses.

Dans le cas de mes 10 autres avions est-ce qu'un select case serait plus
efficace que mes elseif ?


Merci de votre aide.

A+

C15



C15 a écrit :
Bonsoir Jero,

Ta proposition n'est pas mal, mais pour moi un pop up (comme le message
de validation de données) est plus parlant, d'autant plus que la sécurité
est en jeu.
J'y émettrai plusieurs réserves :
c'est un fichier test pour 2 avions (dans mon club il y en a 12 avec
des limitations différentes), donc la fonction si va se rallonger un
peu...
le message doit rappeler la masse max que l'on est en train de
dépasser (par exemple pour AK 780 kg)

Tes remarques correspondent tout à fait à ce que j'avais (sans doute mal)
exprimé :
C'est après la saisie des données que l'alerte doit apparaitre.
Par ailleurs la validation des données que j'avais mis en place
ne marche que pour des valeurs saisies et non pas calculées et
effectivement c'est à supprimer.
Le problème du pop up c'est le mode de déclenchement, plus
précisément dès que j'ai saisi les quantités carburant et que donc les
masses sont calculées automatiquement en B20 et B22, l'alerte doit
automatiquement apparaitre si B20 ou B22>780 pour AK pour que je modifie
mon devis de poids (bagages et/ou carburant embarqué).

Merci de ton aide.

A+

C15

jero a écrit :
Salut C15,
Je viens de télécharger ton classeur.
Déjà, une première remarque (par rapport uniquement à nos échanges) : ce
n'est pas après l'exécution d'une des macros qu'il faut afficher le
message mais après la saisie des données (cellules en jaune).
Avant d'aller plus loin ; est-ce qu'un affichage dans la cellule B20
suffirait ?
Ce serait du genre (en B20) :
=SI(OU(ET(DROITE(G5;2)="JC";B18-B19>1147);ET(DROITE(G5;2)="AK";B18-B19>780));"Attention...";B18-B19)
Et tu enlèves la validation de données...
Il resterait à modifier les formules des cellules C20,B22 et C22 (pour
éviter l'affichage de #VALEUR! (fonction SI(ESTERREUR(....
Modifier également :
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("G5")) Is Nothing Then
Range("A26,B26,C26,B12:B14").ClearContents
Select Case Right(Range("G5"), 2)
Case "JC"
Macro_JC
Case "AK"
Macro_AK
End Select
End If
End Sub
A+

"C15" a écrit dans le message de
news:
Bonjour,

Si cela peut vous aider...
http://www.cijoint.fr/cjlink.php?file=cj201001/cijNKCvARi.xls

Merci de votre aide.

A+

C15


michdenis a écrit :
Merci... cela m'avait échappé !














Avatar
C15
Bonjour,


Merci de ces conseils.

Par contre je pense que pour simplifier les choses, il va falloir que je
revoie l'organisation de mon classeur avec un onglet par avion et les
données de base dans les mêmes cellules.


Merci encore.

A+

C15


jero a écrit :
Salut,
Worksheet_Calculate() : oui, ok.
Dans le cas de mes 10 autres avions est-ce qu'un select case serait plus
efficace que mes elseif ?


Oui, évidemment, et surtout plus lisible... (Select Case Right(Range("G5"),
2))
Je pense également que si tu as 12 avions, tu vas avoir 12 macros "XX" : en
paramétrant correctement (elles vont furieusement se ressembler sans doute),
tu pourrais allèger le code...
ça pourrait être du genre "
Macro_Avions(TypeAvion As String)
'Ici, les instructions identiques pour tous les types
....
....
'Ici, les instructions spécifiques en fonction du type
Select case TypeAvion
Case "JC"
Case "AK"
.....
.....
End Select
....
Tu appelles ta procédure par Macro_Avions(Right(Range("G5"), 2))
N'oublie pas non plus d'utiliser des variables plutot que des valeurs ("en
dur") : grand principe de base....
Par ex : PoidsMax
Select case TypeAvion
Case "JC"
PoidsMax47
Case "AK"
PoidsMaxx0 .....
.....
End Select
et dans ton message d'avertissement, tu utilises PoidsMax...
Si le PoidsMax change pour un type d'avion, tu n'auras qu'une fois à le
modifier
Voilà, voilà...
A+
"C15" a écrit dans le message de news:
%23PLJq%
Rebonsoir,

Voir le fichier joint :
http://www.cijoint.fr/cjlink.php?file=cj201001/cij1GgT9NC.xls

Avec votre aide à tous les 2 et en cherchant sur le net j'ai sans doute
trouvé la solution :

Private Sub Worksheet_Calculate()

If [B20] > 780 And Right(Range("G5"), 2) = "AK" Then
MsgBox "Vous avez dépassé la masse max autorisée au D/L (780 kg)",
vbOKOnly

ElseIf [B20] > 1157 And Right(Range("G5"), 2) = "JC" Then
MsgBox "Vous avez dépassé la masse max autorisée au D/L (1157 kg)",
vbOKOnly

End If

End Sub
Je saisis les poids des personnes à bord et des bagages.
Je saisis le carburant embarqué et au roulage.
La masse au D/L est calculée.
Si elle est >780 (pour AK) msgbox...

Teste pour me dire ce que tu en penses.

Dans le cas de mes 10 autres avions est-ce qu'un select case serait plus
efficace que mes elseif ?


Merci de votre aide.

A+

C15



C15 a écrit :
Bonsoir Jero,

Ta proposition n'est pas mal, mais pour moi un pop up (comme le message
de validation de données) est plus parlant, d'autant plus que la sécurité
est en jeu.
J'y émettrai plusieurs réserves :
c'est un fichier test pour 2 avions (dans mon club il y en a 12 avec
des limitations différentes), donc la fonction si va se rallonger un
peu...
le message doit rappeler la masse max que l'on est en train de
dépasser (par exemple pour AK 780 kg)

Tes remarques correspondent tout à fait à ce que j'avais (sans doute mal)
exprimé :
C'est après la saisie des données que l'alerte doit apparaitre.
Par ailleurs la validation des données que j'avais mis en place
ne marche que pour des valeurs saisies et non pas calculées et
effectivement c'est à supprimer.
Le problème du pop up c'est le mode de déclenchement, plus
précisément dès que j'ai saisi les quantités carburant et que donc les
masses sont calculées automatiquement en B20 et B22, l'alerte doit
automatiquement apparaitre si B20 ou B22>780 pour AK pour que je modifie
mon devis de poids (bagages et/ou carburant embarqué).

Merci de ton aide.

A+

C15

jero a écrit :
Salut C15,
Je viens de télécharger ton classeur.
Déjà, une première remarque (par rapport uniquement à nos échanges) : ce
n'est pas après l'exécution d'une des macros qu'il faut afficher le
message mais après la saisie des données (cellules en jaune).
Avant d'aller plus loin ; est-ce qu'un affichage dans la cellule B20
suffirait ?
Ce serait du genre (en B20) :
=SI(OU(ET(DROITE(G5;2)="JC";B18-B19>1147);ET(DROITE(G5;2)="AK";B18-B19>780));"Attention...";B18-B19)
Et tu enlèves la validation de données...
Il resterait à modifier les formules des cellules C20,B22 et C22 (pour
éviter l'affichage de #VALEUR! (fonction SI(ESTERREUR(....
Modifier également :
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("G5")) Is Nothing Then
Range("A26,B26,C26,B12:B14").ClearContents
Select Case Right(Range("G5"), 2)
Case "JC"
Macro_JC
Case "AK"
Macro_AK
End Select
End If
End Sub
A+

"C15" a écrit dans le message de
news:
Bonjour,

Si cela peut vous aider...
http://www.cijoint.fr/cjlink.php?file=cj201001/cijNKCvARi.xls

Merci de votre aide.

A+

C15


michdenis a écrit :
Merci... cela m'avait échappé !

















1 2