Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

La msgbox s'affiche trop tôt

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

J'ai un fichier avec un tableau pour calculer les masses et centrage de
différents avions.

Gràce à Jéro et Michdenis, j'ai mis en place une longue procédure qui me
permet d'actualiser le graphique en fonction de données saisies dans le
tableau.

J'ai en particulier la procédure suivante :

>>>>
Private Sub Worksheet_Calculate()

If Range("B20").Value > 2900 And Right(Range("G5"), 2) = "RN" Then
MsgBox "Vous avez dépassé la masse max autorisée au D/L (2900 livres)",
vbOKOnly

ElseIf Range("B22").Value > 2900 And Right(Range("G5"), 2) = "RN" Then
MsgBox "Vous avez dépassé la masse max autorisée à l'ATR (2900 livres)",
vbOKOnly

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

ElseIf Range("B22").Value > 1157 And Right(Range("G5"), 2) = "JC" Then
MsgBox "Vous avez dépassé la masse max autorisée à l'ATR (1157 kg)",
vbOKOnly

ElseIf Range("B20").Value > 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 Range("B22").Value > 780 And Right(Range("G5"), 2) = "AK" Then
MsgBox "Vous avez dépassé la masse max autorisée à l'ATR (780 kg)", vbOKOnly

End If

End Sub
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 "RN"
Macro_RN
Case "JC"
Macro_JC
Case "AK"
Macro_AK
End Select
End If


End Sub


>>>
Le Worksheet_Calculate() me permet d'afficher une boite de dialogue si
les données calculées en B20 et/ou B22 sont > valeur spécifique à un
avion immatriculé AK, JC ou RN.

La Worksheet_Change(ByVal Target As Range) me remplit certaines cellules
du tableau (et par conséquent du graphique) en fonction de l'avion
sélectionné dans une liste déroulante, par l'exécution des macros
Macro_AK...

Cette msgbox n'apparait normalement que lorsque le tableau est
entièrement renseigné sauf si je choisis d'abord RN pour afficher les
données de cet avion et qu'après je choisis un des 2 autres (normal
2900>1157 ou 780).
Elle apparait alors avant l'actualisation du tableau, elle disparait dès
que je fais OK.
Elle réapparait si B20>...


Comment faire pour que ces msgbox ne s'affiche réellement que si
B20>1157 (ou 780) ?


Merci de votre aide.

A+

C15

10 réponses

1 2
Avatar
LE TROLL
Bonjour,

Tu peux faire quelque chose de plus séparé déjà, pour aérer et gérer
réellement les conditions, en créant deu variables globales, tu les
incrémente, puis à chaque fois tu les envois dans ta procédure des message
(qui y seront tous regroupés), ainsi tu peux bgérer avec plus de clareté
tout ça, exemple :

dim v1, v2
sub procedure a toi
if
v1= ?
v2= ?
call mes
if
v1= ?
v2= ?
call mes
if
v1= ?
v2= ?
call mes
end sub

sub mes()
if v1 = x and v2 = "" then msgbox1
if v1 = x and v2 = y then msgbox2
...
end sub

Toi y'en avoir compris ?
Ainsi tu n'a pas besoin de modifier dans chaque if, tu gères les messages en
fonction des données passées à tes deux variables de façon séparée, ça évite
de faire un usine à gaz...

Cordialement ;o)
-
Logiciels, romans, contacts : http://irolog.free.fr
_______________________
.
.


"C15" a écrit dans le message de
news:
Bonjour à tous et à toutes,

J'ai un fichier avec un tableau pour calculer les masses et centrage de
différents avions.

Gràce à Jéro et Michdenis, j'ai mis en place une longue procédure qui me
permet d'actualiser le graphique en fonction de données saisies dans le
tableau.

J'ai en particulier la procédure suivante :

>>>>
Private Sub Worksheet_Calculate()

If Range("B20").Value > 2900 And Right(Range("G5"), 2) = "RN" Then
MsgBox "Vous avez dépassé la masse max autorisée au D/L (2900 livres)",
vbOKOnly

ElseIf Range("B22").Value > 2900 And Right(Range("G5"), 2) = "RN" Then
MsgBox "Vous avez dépassé la masse max autorisée à l'ATR (2900 livres)",
vbOKOnly

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

ElseIf Range("B22").Value > 1157 And Right(Range("G5"), 2) = "JC" Then
MsgBox "Vous avez dépassé la masse max autorisée à l'ATR (1157 kg)",
vbOKOnly

ElseIf Range("B20").Value > 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 Range("B22").Value > 780 And Right(Range("G5"), 2) = "AK" Then
MsgBox "Vous avez dépassé la masse max autorisée à l'ATR (780 kg)",
vbOKOnly

End If

End Sub
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 "RN"
Macro_RN
Case "JC"
Macro_JC
Case "AK"
Macro_AK
End Select
End If


End Sub


>>>
Le Worksheet_Calculate() me permet d'afficher une boite de dialogue si les
données calculées en B20 et/ou B22 sont > valeur spécifique à un avion
immatriculé AK, JC ou RN.

La Worksheet_Change(ByVal Target As Range) me remplit certaines cellules
du tableau (et par conséquent du graphique) en fonction de l'avion
sélectionné dans une liste déroulante, par l'exécution des macros
Macro_AK...

Cette msgbox n'apparait normalement que lorsque le tableau est entièrement
renseigné sauf si je choisis d'abord RN pour afficher les données de cet
avion et qu'après je choisis un des 2 autres (normal 2900>1157 ou 780).
Elle apparait alors avant l'actualisation du tableau, elle disparait dès
que je fais OK.
Elle réapparait si B20>...

Comment faire pour que ces msgbox ne s'affiche réellement que si B20>1157
(ou 780) ?


Merci de votre aide.

A+

C15


Avatar
Philippe.R
Bonsoir,
Au lieu de lancer la MsgBox à chaque if, on peut ne la lancer qu'à la fin,
en ayant simplement adapté le message à chaque cas :

Private Sub Worksheet_Calculate()
Dim monMess as string

If Range("B20").Value > 2900 And Right(Range("G5"), 2) = "RN" Then
monmess = "Vous avez dépassé la masse max autorisée au D/L (2900 livres)"

ElseIf Range("B22").Value > 2900 And Right(Range("G5"), 2) = "RN" Then
monmess = "Vous avez dépassé la masse max autorisée à l'ATR (2900 livres)"

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

ElseIf Range("B22").Value > 1157 And Right(Range("G5"), 2) = "JC" Then
monmess = "Vous avez dépassé la masse max autorisée à l'ATR (1157 kg)"

ElseIf Range("B20").Value > 780 And Right(Range("G5"), 2) = "AK" Then
monmess = "Vous avez dépassé la masse max autorisée au D/L (780 kg)"

ElseIf Range("B22").Value > 780 And Right(Range("G5"), 2) = "AK" Then
monmess = "Vous avez dépassé la masse max autorisée à l'ATR (780 kg)"

End If
MsgBox monmess, vbOKOnly
End Sub

--
Avec plaisir
http://dj.joss.free.fr/trombine.htm
http://jacxl.free.fr/mpfe/trombino.html
Philippe.R
Pour se connecter au forum :
http://www.excelabo.net/web/mpfe
News://news.microsoft.com/microsoft.public.fr.excel
"C15" a écrit dans le message de
news:
Bonjour à tous et à toutes,

J'ai un fichier avec un tableau pour calculer les masses et centrage de
différents avions.

Gràce à Jéro et Michdenis, j'ai mis en place une longue procédure qui me
permet d'actualiser le graphique en fonction de données saisies dans le
tableau.

J'ai en particulier la procédure suivante :

>>>>
Private Sub Worksheet_Calculate()

If Range("B20").Value > 2900 And Right(Range("G5"), 2) = "RN" Then
MsgBox "Vous avez dépassé la masse max autorisée au D/L (2900 livres)",
vbOKOnly

ElseIf Range("B22").Value > 2900 And Right(Range("G5"), 2) = "RN" Then
MsgBox "Vous avez dépassé la masse max autorisée à l'ATR (2900 livres)",
vbOKOnly

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

ElseIf Range("B22").Value > 1157 And Right(Range("G5"), 2) = "JC" Then
MsgBox "Vous avez dépassé la masse max autorisée à l'ATR (1157 kg)",
vbOKOnly

ElseIf Range("B20").Value > 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 Range("B22").Value > 780 And Right(Range("G5"), 2) = "AK" Then
MsgBox "Vous avez dépassé la masse max autorisée à l'ATR (780 kg)",
vbOKOnly

End If

End Sub
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 "RN"
Macro_RN
Case "JC"
Macro_JC
Case "AK"
Macro_AK
End Select
End If


End Sub


>>>
Le Worksheet_Calculate() me permet d'afficher une boite de dialogue si les
données calculées en B20 et/ou B22 sont > valeur spécifique à un avion
immatriculé AK, JC ou RN.

La Worksheet_Change(ByVal Target As Range) me remplit certaines cellules
du tableau (et par conséquent du graphique) en fonction de l'avion
sélectionné dans une liste déroulante, par l'exécution des macros
Macro_AK...

Cette msgbox n'apparait normalement que lorsque le tableau est entièrement
renseigné sauf si je choisis d'abord RN pour afficher les données de cet
avion et qu'après je choisis un des 2 autres (normal 2900>1157 ou 780).
Elle apparait alors avant l'actualisation du tableau, elle disparait dès
que je fais OK.
Elle réapparait si B20>...

Comment faire pour que ces msgbox ne s'affiche réellement que si B20>1157
(ou 780) ?


Merci de votre aide.

A+

C15


Avatar
C15
Bonsoir,

Merci de cette proposition que je ne comprends pas tout à fait (sub
procédure à toi).
Je pense qu'elle va dans le même sens que ce que m'a proposé Jéro dans
son dernier post de "Msgbox si valeur dépassée".
Je ne m'y suis pas encore penché car il va falloir sans doute que je
revoie l'organisation de mon fichier.

Mon problème actuel c'est l'affichage intempestif de cette boite de
dialogue.

Merci de ton aide.

A+

C15


LE TROLL a écrit :
Bonjour,

Tu peux faire quelque chose de plus séparé déjà, pour aérer et gérer
réellement les conditions, en créant deu variables globales, tu les
incrémente, puis à chaque fois tu les envois dans ta procédure des
message (qui y seront tous regroupés), ainsi tu peux bgérer avec plus de
clareté tout ça, exemple :

dim v1, v2
sub procedure a toi
if
v1= ?
v2= ?
call mes
if
v1= ?
v2= ?
call mes
if
v1= ?
v2= ?
call mes
end sub

sub mes()
if v1 = x and v2 = "" then msgbox1
if v1 = x and v2 = y then msgbox2
...
end sub

Toi y'en avoir compris ?
Ainsi tu n'a pas besoin de modifier dans chaque if, tu gères les
messages en fonction des données passées à tes deux variables de façon
séparée, ça évite de faire un usine à gaz...

Cordialement ;o)
-
Logiciels, romans, contacts : http://irolog.free.fr
_______________________
.
.


"C15" a écrit dans le message de
news:
Bonjour à tous et à toutes,

J'ai un fichier avec un tableau pour calculer les masses et centrage
de différents avions.

Gràce à Jéro et Michdenis, j'ai mis en place une longue procédure qui
me permet d'actualiser le graphique en fonction de données saisies
dans le tableau.

J'ai en particulier la procédure suivante :

>>>>
Private Sub Worksheet_Calculate()

If Range("B20").Value > 2900 And Right(Range("G5"), 2) = "RN" Then
MsgBox "Vous avez dépassé la masse max autorisée au D/L (2900
livres)", vbOKOnly

ElseIf Range("B22").Value > 2900 And Right(Range("G5"), 2) = "RN" Then
MsgBox "Vous avez dépassé la masse max autorisée à l'ATR (2900
livres)", vbOKOnly

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

ElseIf Range("B22").Value > 1157 And Right(Range("G5"), 2) = "JC" Then
MsgBox "Vous avez dépassé la masse max autorisée à l'ATR (1157 kg)",
vbOKOnly

ElseIf Range("B20").Value > 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 Range("B22").Value > 780 And Right(Range("G5"), 2) = "AK" Then
MsgBox "Vous avez dépassé la masse max autorisée à l'ATR (780 kg)",
vbOKOnly

End If

End Sub
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 "RN"
Macro_RN
Case "JC"
Macro_JC
Case "AK"
Macro_AK
End Select
End If


End Sub


>>>
Le Worksheet_Calculate() me permet d'afficher une boite de dialogue si
les données calculées en B20 et/ou B22 sont > valeur spécifique à un
avion immatriculé AK, JC ou RN.

La Worksheet_Change(ByVal Target As Range) me remplit certaines
cellules du tableau (et par conséquent du graphique) en fonction de
l'avion sélectionné dans une liste déroulante, par l'exécution des
macros Macro_AK...

Cette msgbox n'apparait normalement que lorsque le tableau est
entièrement renseigné sauf si je choisis d'abord RN pour afficher les
données de cet avion et qu'après je choisis un des 2 autres (normal
2900>1157 ou 780).
Elle apparait alors avant l'actualisation du tableau, elle disparait
dès que je fais OK.
Elle réapparait si B20>...

Comment faire pour que ces msgbox ne s'affiche réellement que si
B20>1157 (ou 780) ?


Merci de votre aide.

A+

C15





Avatar
C15
Bonjour,

Désolé, mais cela ne marche pas. Une boite de dialogue s'affiche (avec
aucun message à l'intérieur) dès que je saisis un valeur dans le tableau
(sans même avoir atteint une des valeurs limites).

Merci de ton aide.

A+

C15


Philippe.R a écrit :
Bonsoir,
Au lieu de lancer la MsgBox à chaque if, on peut ne la lancer qu'à la
fin, en ayant simplement adapté le message à chaque cas :

Private Sub Worksheet_Calculate()
Dim monMess as string

If Range("B20").Value > 2900 And Right(Range("G5"), 2) = "RN" Then
monmess = "Vous avez dépassé la masse max autorisée au D/L (2900 livres)"

ElseIf Range("B22").Value > 2900 And Right(Range("G5"), 2) = "RN" Then
monmess = "Vous avez dépassé la masse max autorisée à l'ATR (2900 livres)"

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

ElseIf Range("B22").Value > 1157 And Right(Range("G5"), 2) = "JC" Then
monmess = "Vous avez dépassé la masse max autorisée à l'ATR (1157 kg)"

ElseIf Range("B20").Value > 780 And Right(Range("G5"), 2) = "AK" Then
monmess = "Vous avez dépassé la masse max autorisée au D/L (780 kg)"

ElseIf Range("B22").Value > 780 And Right(Range("G5"), 2) = "AK" Then
monmess = "Vous avez dépassé la masse max autorisée à l'ATR (780 kg)"

End If
MsgBox monmess, vbOKOnly
End Sub



Avatar
jero
Salut,
Dans la feuille "Masse et centrage" :

Private Sub Worksheet_Calculate()
If SaisieComplète("Données") Then 'Si toutes les données ne sont pas
saisies, aucun message
If Range("B20").Value > 2900 And Right(Range("G5"), 2) = "RN"
Then
MsgBox "Vous avez dépassé la masse max autorisée au D/L (2900
livres)", vbOKOnly
'Inutile (la masse à l'ATR est forcément inférieure à la masse
au D/L non ?)
'ElseIf Range("B22").Value > 2900 And Right(Range("G5"), 2) =
"RN" Then
'MsgBox "Vous avez dépassé la masse max autorisée à l'ATR (2900
livres)", vbOKOnly
ElseIf Range("B20").Value > 1157 And Right(Range("G5"), 2) =
"JC" Then
MsgBox "Vous avez dépassé la masse max autorisée au D/L (1157
kg)", vbOKOnly
'ElseIf Range("B22").Value > 1157 And Right(Range("G5"), 2) =
"JC" Then
'MsgBox "Vous avez dépassé la masse max autorisée à l'ATR (1157
kg)", vbOKOnly
ElseIf Range("B20").Value > 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 Range("B22").Value > 780 And Right(Range("G5"), 2) =
"AK" Then
'MsgBox "Vous avez dépassé la masse max autorisée à l'ATR (780
kg)", vbOKOnly
End If
End If
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("G5")) Is Nothing Then
'Range("A26,B26,C26,B12:B14").ClearContents
Range("Données").ClearComments
Select Case Right(Range("G5"), 2)
Case "RN"
Macro_RN
Case "JC"
Macro_JC
Case "AK"
Macro_AK
End Select
DéfinirPlageDonnées Right(Range("G5"), 2)
End If
End Sub

Dans un module standard :

Sub DéfinirPlageDonnées(TypeAvion As String)
'Cette procédure permet de définir un nom ("Données") qui correspond aux
cellules à saisir
'Cette plage peut-être différente d'un avion à l'autre
'A compléter....
On Error Resume Next
ActiveWorkbook.Names("Données").Delete
On Error GoTo 0
Select Case TypeAvion
Case "JC", "RN"
ActiveWorkbook.Names.Add Name:="Données", RefersTo:="='Masse et
centrage'!$A$26:$C$26,'Masse et centrage'!$B$12:$B$14"
Case "AK"
ActiveWorkbook.Names.Add Name:="Données", RefersTo:="='Masse et
centrage'!$A$26:$C$26,'Masse et centrage'!$B$12,'Masse et centrage'!$B$14"
Case Else
End Select
End Sub

Function SaisieComplète(Plage As String) As Boolean
'Cette fonction permet de vérifier que TOUTES les données ont bien été
saisies
Dim Cel, P As Boolean
P = True
For Each Cel In Range(Plage)
P = P And Not IsEmpty(Cel)
Next
SaisieComplète = P
End Function

Note :
Tu pourrais remplacer la procédure Worksheet_Calculate() par :
Private Sub Worksheet_Calculate()
Dim Msg As String, PoidsMax As Single
If SaisieComplète("Données") Then
Select Case Right(Range("G5"), 2)
Case "RN"
PoidsMax = 2900
Case "JC"
PoidsMax = 1157
Case "AK"
PoidsMax = 780
End Select
If Range("B20").Value > PoidsMax Then
Msg = "Vous avez dépassé la masse max autorisée au D/L (" &
PoidsMax & ")"
MsgBox Msg, vbOKOnly
End If
End If
End Sub

A+
jpg

"Philippe.R" <AS_rauphil_chez_wanadoo.fr> a écrit dans le message de news:
%
Bonsoir,
Au lieu de lancer la MsgBox à chaque if, on peut ne la lancer qu'à la fin,
en ayant simplement adapté le message à chaque cas :

Private Sub Worksheet_Calculate()
Dim monMess as string

If Range("B20").Value > 2900 And Right(Range("G5"), 2) = "RN" Then
monmess = "Vous avez dépassé la masse max autorisée au D/L (2900 livres)"

ElseIf Range("B22").Value > 2900 And Right(Range("G5"), 2) = "RN" Then
monmess = "Vous avez dépassé la masse max autorisée à l'ATR (2900 livres)"

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

ElseIf Range("B22").Value > 1157 And Right(Range("G5"), 2) = "JC" Then
monmess = "Vous avez dépassé la masse max autorisée à l'ATR (1157 kg)"

ElseIf Range("B20").Value > 780 And Right(Range("G5"), 2) = "AK" Then
monmess = "Vous avez dépassé la masse max autorisée au D/L (780 kg)"

ElseIf Range("B22").Value > 780 And Right(Range("G5"), 2) = "AK" Then
monmess = "Vous avez dépassé la masse max autorisée à l'ATR (780 kg)"

End If
MsgBox monmess, vbOKOnly
End Sub

--
Avec plaisir
http://dj.joss.free.fr/trombine.htm
http://jacxl.free.fr/mpfe/trombino.html
Philippe.R
Pour se connecter au forum :
http://www.excelabo.net/web/mpfe
News://news.microsoft.com/microsoft.public.fr.excel
"C15" a écrit dans le message de
news:
Bonjour à tous et à toutes,

J'ai un fichier avec un tableau pour calculer les masses et centrage de
différents avions.

Gràce à Jéro et Michdenis, j'ai mis en place une longue procédure qui me
permet d'actualiser le graphique en fonction de données saisies dans le
tableau.

J'ai en particulier la procédure suivante :

>>>>
Private Sub Worksheet_Calculate()

If Range("B20").Value > 2900 And Right(Range("G5"), 2) = "RN" Then
MsgBox "Vous avez dépassé la masse max autorisée au D/L (2900 livres)",
vbOKOnly

ElseIf Range("B22").Value > 2900 And Right(Range("G5"), 2) = "RN" Then
MsgBox "Vous avez dépassé la masse max autorisée à l'ATR (2900 livres)",
vbOKOnly

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

ElseIf Range("B22").Value > 1157 And Right(Range("G5"), 2) = "JC" Then
MsgBox "Vous avez dépassé la masse max autorisée à l'ATR (1157 kg)",
vbOKOnly

ElseIf Range("B20").Value > 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 Range("B22").Value > 780 And Right(Range("G5"), 2) = "AK" Then
MsgBox "Vous avez dépassé la masse max autorisée à l'ATR (780 kg)",
vbOKOnly

End If

End Sub
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 "RN"
Macro_RN
Case "JC"
Macro_JC
Case "AK"
Macro_AK
End Select
End If


End Sub


>>>
Le Worksheet_Calculate() me permet d'afficher une boite de dialogue si
les données calculées en B20 et/ou B22 sont > valeur spécifique à un
avion immatriculé AK, JC ou RN.

La Worksheet_Change(ByVal Target As Range) me remplit certaines cellules
du tableau (et par conséquent du graphique) en fonction de l'avion
sélectionné dans une liste déroulante, par l'exécution des macros
Macro_AK...

Cette msgbox n'apparait normalement que lorsque le tableau est
entièrement renseigné sauf si je choisis d'abord RN pour afficher les
données de cet avion et qu'après je choisis un des 2 autres (normal
2900>1157 ou 780).
Elle apparait alors avant l'actualisation du tableau, elle disparait dès
que je fais OK.
Elle réapparait si B20>...

Comment faire pour que ces msgbox ne s'affiche réellement que si B20>1157
(ou 780) ?


Merci de votre aide.

A+

C15





Avatar
Philippe.R
Bonjour,
Et avec ceci :

Private Sub Worksheet_Calculate()
Dim monMess As String

If Range("B20").Value > 2900 And Right(Range("G5"), 2) = "RN" Then
monMess = "Vous avez dépassé la masse max autorisée au D/L (2900
livres)"
ElseIf Range("B22").Value > 2900 And Right(Range("G5"), 2) = "RN" Then
monMess = "Vous avez dépassé la masse max autorisée à l'ATR (2900
livres)"
ElseIf Range("B20").Value > 1157 And Right(Range("G5"), 2) = "JC" Then
monMess = "Vous avez dépassé la masse max autorisée au D/L (1157 kg)"
ElseIf Range("B22").Value > 1157 And Right(Range("G5"), 2) = "JC" Then
monMess = "Vous avez dépassé la masse max autorisée à l'ATR (1157 kg)"
ElseIf Range("B20").Value > 780 And Right(Range("G5"), 2) = "AK" Then
monMess = "Vous avez dépassé la masse max autorisée au D/L (780 kg)"
ElseIf Range("B22").Value > 780 And Right(Range("G5"), 2) = "AK" Then
monMess = "Vous avez dépassé la masse max autorisée à l'ATR (780 kg)"
End If

If monMess <> "" Then MsgBox monMess, vbOKOnly
End Sub

--
Avec plaisir
http://dj.joss.free.fr/trombine.htm
http://jacxl.free.fr/mpfe/trombino.html
Philippe.R
Pour se connecter au forum :
http://www.excelabo.net/web/mpfe
News://news.microsoft.com/microsoft.public.fr.excel
"C15" a écrit dans le message de
news:%
Bonjour,

Désolé, mais cela ne marche pas. Une boite de dialogue s'affiche (avec
aucun message à l'intérieur) dès que je saisis un valeur dans le tableau
(sans même avoir atteint une des valeurs limites).

Merci de ton aide.

A+

C15


Philippe.R a écrit :
Bonsoir,
Au lieu de lancer la MsgBox à chaque if, on peut ne la lancer qu'à la
fin, en ayant simplement adapté le message à chaque cas :

Private Sub Worksheet_Calculate()
Dim monMess as string

If Range("B20").Value > 2900 And Right(Range("G5"), 2) = "RN" Then
monmess = "Vous avez dépassé la masse max autorisée au D/L (2900 livres)"

ElseIf Range("B22").Value > 2900 And Right(Range("G5"), 2) = "RN" Then
monmess = "Vous avez dépassé la masse max autorisée à l'ATR (2900
livres)"

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

ElseIf Range("B22").Value > 1157 And Right(Range("G5"), 2) = "JC" Then
monmess = "Vous avez dépassé la masse max autorisée à l'ATR (1157 kg)"

ElseIf Range("B20").Value > 780 And Right(Range("G5"), 2) = "AK" Then
monmess = "Vous avez dépassé la masse max autorisée au D/L (780 kg)"

ElseIf Range("B22").Value > 780 And Right(Range("G5"), 2) = "AK" Then
monmess = "Vous avez dépassé la masse max autorisée à l'ATR (780 kg)"

End If
MsgBox monmess, vbOKOnly
End Sub





Avatar
C15
Bonjour Jero,

Dans ta procédure DéfinirPlageDonnées
j'ai modifié les plages en RC car Excel ne semblait pas trop aimer.

De plus j'ai un problème avec DéfinirPlageDonnées et SaisieComplète
(noms ambigus).
Dans Worksheet_Change tu fais appel à G5 or G5 n'est pas dans la
procédure DéfinirPlageDonnées.

Par ailleurs cela coince sur
Range("Données").ClearComments

l'apostrophe est-il justifié pour :
'Range("A26,B26,C26,B12:B14").ClearContents

Ne serait-ce pas plutôt
Range("Données").ClearContents ?


Merci de ton aide en me disant si c'est une mauvaise analyse de ma part
(ou une non maitrise du copier/coller).

A+

C15


jero a écrit :
Salut,
Dans la feuille "Masse et centrage" :

Private Sub Worksheet_Calculate()
If SaisieComplète("Données") Then 'Si toutes les données ne sont pas
saisies, aucun message
If Range("B20").Value > 2900 And Right(Range("G5"), 2) = "RN"
Then
MsgBox "Vous avez dépassé la masse max autorisée au D/L (2900
livres)", vbOKOnly
'Inutile (la masse à l'ATR est forcément inférieure à la masse
au D/L non ?)
'ElseIf Range("B22").Value > 2900 And Right(Range("G5"), 2) =
"RN" Then
'MsgBox "Vous avez dépassé la masse max autorisée à l'ATR (2900
livres)", vbOKOnly
ElseIf Range("B20").Value > 1157 And Right(Range("G5"), 2) =
"JC" Then
MsgBox "Vous avez dépassé la masse max autorisée au D/L (1157
kg)", vbOKOnly
'ElseIf Range("B22").Value > 1157 And Right(Range("G5"), 2) =
"JC" Then
'MsgBox "Vous avez dépassé la masse max autorisée à l'ATR (1157
kg)", vbOKOnly
ElseIf Range("B20").Value > 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 Range("B22").Value > 780 And Right(Range("G5"), 2) =
"AK" Then
'MsgBox "Vous avez dépassé la masse max autorisée à l'ATR (780
kg)", vbOKOnly
End If
End If
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("G5")) Is Nothing Then
'Range("A26,B26,C26,B12:B14").ClearContents
Range("Données").ClearComments
Select Case Right(Range("G5"), 2)
Case "RN"
Macro_RN
Case "JC"
Macro_JC
Case "AK"
Macro_AK
End Select
DéfinirPlageDonnées Right(Range("G5"), 2)
End If
End Sub

Dans un module standard :

Sub DéfinirPlageDonnées(TypeAvion As String)
'Cette procédure permet de définir un nom ("Données") qui correspond aux
cellules à saisir
'Cette plage peut-être différente d'un avion à l'autre
'A compléter....
On Error Resume Next
ActiveWorkbook.Names("Données").Delete
On Error GoTo 0
Select Case TypeAvion
Case "JC", "RN"
ActiveWorkbook.Names.Add Name:="Données", RefersTo:="='Masse et
centrage'!$A$26:$C$26,'Masse et centrage'!$B$12:$B$14"
Case "AK"
ActiveWorkbook.Names.Add Name:="Données", RefersTo:="='Masse et
centrage'!$A$26:$C$26,'Masse et centrage'!$B$12,'Masse et centrage'!$B$14"
Case Else
End Select
End Sub

Function SaisieComplète(Plage As String) As Boolean
'Cette fonction permet de vérifier que TOUTES les données ont bien été
saisies
Dim Cel, P As Boolean
P = True
For Each Cel In Range(Plage)
P = P And Not IsEmpty(Cel)
Next
SaisieComplète = P
End Function

Note :
Tu pourrais remplacer la procédure Worksheet_Calculate() par :
Private Sub Worksheet_Calculate()
Dim Msg As String, PoidsMax As Single
If SaisieComplète("Données") Then
Select Case Right(Range("G5"), 2)
Case "RN"
PoidsMax = 2900
Case "JC"
PoidsMax = 1157
Case "AK"
PoidsMax = 780
End Select
If Range("B20").Value > PoidsMax Then
Msg = "Vous avez dépassé la masse max autorisée au D/L (" &
PoidsMax & ")"
MsgBox Msg, vbOKOnly
End If
End If
End Sub

A+
jpg

"Philippe.R" <AS_rauphil_chez_wanadoo.fr> a écrit dans le message de news:
%
Bonsoir,
Au lieu de lancer la MsgBox à chaque if, on peut ne la lancer qu'à la fin,
en ayant simplement adapté le message à chaque cas :

Private Sub Worksheet_Calculate()
Dim monMess as string

If Range("B20").Value > 2900 And Right(Range("G5"), 2) = "RN" Then
monmess = "Vous avez dépassé la masse max autorisée au D/L (2900 livres)"

ElseIf Range("B22").Value > 2900 And Right(Range("G5"), 2) = "RN" Then
monmess = "Vous avez dépassé la masse max autorisée à l'ATR (2900 livres)"

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

ElseIf Range("B22").Value > 1157 And Right(Range("G5"), 2) = "JC" Then
monmess = "Vous avez dépassé la masse max autorisée à l'ATR (1157 kg)"

ElseIf Range("B20").Value > 780 And Right(Range("G5"), 2) = "AK" Then
monmess = "Vous avez dépassé la masse max autorisée au D/L (780 kg)"

ElseIf Range("B22").Value > 780 And Right(Range("G5"), 2) = "AK" Then
monmess = "Vous avez dépassé la masse max autorisée à l'ATR (780 kg)"

End If
MsgBox monmess, vbOKOnly
End Sub

--
Avec plaisir
http://dj.joss.free.fr/trombine.htm
http://jacxl.free.fr/mpfe/trombino.html
Philippe.R
Pour se connecter au forum :
http://www.excelabo.net/web/mpfe
News://news.microsoft.com/microsoft.public.fr.excel
"C15" a écrit dans le message de
news:
Bonjour à tous et à toutes,

J'ai un fichier avec un tableau pour calculer les masses et centrage de
différents avions.

Gràce à Jéro et Michdenis, j'ai mis en place une longue procédure qui me
permet d'actualiser le graphique en fonction de données saisies dans le
tableau.

J'ai en particulier la procédure suivante :

Private Sub Worksheet_Calculate()

If Range("B20").Value > 2900 And Right(Range("G5"), 2) = "RN" Then
MsgBox "Vous avez dépassé la masse max autorisée au D/L (2900 livres)",
vbOKOnly

ElseIf Range("B22").Value > 2900 And Right(Range("G5"), 2) = "RN" Then
MsgBox "Vous avez dépassé la masse max autorisée à l'ATR (2900 livres)",
vbOKOnly

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

ElseIf Range("B22").Value > 1157 And Right(Range("G5"), 2) = "JC" Then
MsgBox "Vous avez dépassé la masse max autorisée à l'ATR (1157 kg)",
vbOKOnly

ElseIf Range("B20").Value > 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 Range("B22").Value > 780 And Right(Range("G5"), 2) = "AK" Then
MsgBox "Vous avez dépassé la masse max autorisée à l'ATR (780 kg)",
vbOKOnly

End If

End Sub
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 "RN"
Macro_RN
Case "JC"
Macro_JC
Case "AK"
Macro_AK
End Select
End If


End Sub


Le Worksheet_Calculate() me permet d'afficher une boite de dialogue si
les données calculées en B20 et/ou B22 sont > valeur spécifique à un
avion immatriculé AK, JC ou RN.

La Worksheet_Change(ByVal Target As Range) me remplit certaines cellules
du tableau (et par conséquent du graphique) en fonction de l'avion
sélectionné dans une liste déroulante, par l'exécution des macros
Macro_AK...

Cette msgbox n'apparait normalement que lorsque le tableau est
entièrement renseigné sauf si je choisis d'abord RN pour afficher les
données de cet avion et qu'après je choisis un des 2 autres (normal
2900>1157 ou 780).
Elle apparait alors avant l'actualisation du tableau, elle disparait dès
que je fais OK.
Elle réapparait si B20>...

Comment faire pour que ces msgbox ne s'affiche réellement que si B20>1157
(ou 780) ?


Merci de votre aide.

A+

C15








Avatar
jero
Salut,
1-> De plus j'ai un problème avec DéfinirPlageDonnées et SaisieComplète
(noms ambigus).
Tu n'aurais pas copié 2 fois les procédures ?
2-> Par ailleurs cela coince sur Range("Données").ClearComments
Tu as raison, c'est Range("Données").ClearContents
3-> l'apostrophe est-il justifié pour :
'Range("A26,B26,C26,B12:B14").ClearContents
Oui, mais tu peux supprimer cette ligne
4-> Dans Worksheet_Change tu fais appel à G5 or G5 n'est pas dans la
procédure DéfinirPlageDonnées
Non, la procédure DéfinirPlageDonnées n'est utilisée que pour définir le nom
"Données", c'est normal...
5-....(ou une non maitrise du copier/coller).
Peut-être, fais attention, par exemple :
ActiveWorkbook.Names.Add Name:="Données", RefersTo:="='Masse et
centrage'!$A$26:$C$26,'Masse et centrage'!$B$12:$B$14"
C'est sur UNE SEULE LIGNE... Pour le vérifier, lorsque tu fais
copier/coller, tu ne dois pas obtenir de lignes "en rouge" ; cela
signifierait une erreur de syntaxe.
A+

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

Bonjour Jero,

Dans ta procédure DéfinirPlageDonnées
j'ai modifié les plages en RC car Excel ne semblait pas trop aimer.

Dans Worksheet_Change tu fais appel à G5 or G5 n'est pas dans la procédure
DéfinirPlageDonnées.

Par ailleurs cela coince sur
Range("Données").ClearComments

l'apostrophe est-il justifié pour :
'Range("A26,B26,C26,B12:B14").ClearContents

Ne serait-ce pas plutôt
>

Merci de ton aide en me disant si c'est une mauvaise analyse de ma part
(ou une non maitrise du copier/coller).

A+

C15


jero a écrit :
Salut,
Dans la feuille "Masse et centrage" :

Private Sub Worksheet_Calculate()
If SaisieComplète("Données") Then 'Si toutes les données ne sont pas
saisies, aucun message
If Range("B20").Value > 2900 And Right(Range("G5"), 2) = "RN"
Then
MsgBox "Vous avez dépassé la masse max autorisée au D/L (2900
livres)", vbOKOnly
'Inutile (la masse à l'ATR est forcément inférieure à la
masse au D/L non ?)
'ElseIf Range("B22").Value > 2900 And Right(Range("G5"), 2) =
"RN" Then
'MsgBox "Vous avez dépassé la masse max autorisée à l'ATR
(2900 livres)", vbOKOnly
ElseIf Range("B20").Value > 1157 And Right(Range("G5"), 2) =
"JC" Then
MsgBox "Vous avez dépassé la masse max autorisée au D/L (1157
kg)", vbOKOnly
'ElseIf Range("B22").Value > 1157 And Right(Range("G5"), 2) =
"JC" Then
'MsgBox "Vous avez dépassé la masse max autorisée à l'ATR
(1157 kg)", vbOKOnly
ElseIf Range("B20").Value > 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 Range("B22").Value > 780 And Right(Range("G5"), 2) =
"AK" Then
'MsgBox "Vous avez dépassé la masse max autorisée à l'ATR
(780 kg)", vbOKOnly
End If
End If
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("G5")) Is Nothing Then
'Range("A26,B26,C26,B12:B14").ClearContents
Range("Données").ClearComments
Select Case Right(Range("G5"), 2)
Case "RN"
Macro_RN
Case "JC"
Macro_JC
Case "AK"
Macro_AK
End Select
DéfinirPlageDonnées Right(Range("G5"), 2)
End If
End Sub

Dans un module standard :

Sub DéfinirPlageDonnées(TypeAvion As String)
'Cette procédure permet de définir un nom ("Données") qui correspond aux
cellules à saisir
'Cette plage peut-être différente d'un avion à l'autre
'A compléter....
On Error Resume Next
ActiveWorkbook.Names("Données").Delete
On Error GoTo 0
Select Case TypeAvion
Case "JC", "RN"
ActiveWorkbook.Names.Add Name:="Données", RefersTo:="='Masse et
centrage'!$A$26:$C$26,'Masse et centrage'!$B$12:$B$14"
Case "AK"
ActiveWorkbook.Names.Add Name:="Données", RefersTo:="='Masse et
centrage'!$A$26:$C$26,'Masse et centrage'!$B$12,'Masse et
centrage'!$B$14"
Case Else
End Select
End Sub

Function SaisieComplète(Plage As String) As Boolean
'Cette fonction permet de vérifier que TOUTES les données ont bien été
saisies
Dim Cel, P As Boolean
P = True
For Each Cel In Range(Plage)
P = P And Not IsEmpty(Cel)
Next
SaisieComplète = P
End Function

Note :
Tu pourrais remplacer la procédure Worksheet_Calculate() par :
Private Sub Worksheet_Calculate()
Dim Msg As String, PoidsMax As Single
If SaisieComplète("Données") Then
Select Case Right(Range("G5"), 2)
Case "RN"
PoidsMax = 2900
Case "JC"
PoidsMax = 1157
Case "AK"
PoidsMax = 780
End Select
If Range("B20").Value > PoidsMax Then
Msg = "Vous avez dépassé la masse max autorisée au D/L ("
& PoidsMax & ")"
MsgBox Msg, vbOKOnly
End If
End If
End Sub

A+
jpg

"Philippe.R" <AS_rauphil_chez_wanadoo.fr> a écrit dans le message de
news: %
Bonsoir,
Au lieu de lancer la MsgBox à chaque if, on peut ne la lancer qu'à la
fin, en ayant simplement adapté le message à chaque cas :

Private Sub Worksheet_Calculate()
Dim monMess as string

If Range("B20").Value > 2900 And Right(Range("G5"), 2) = "RN" Then
monmess = "Vous avez dépassé la masse max autorisée au D/L (2900
livres)"

ElseIf Range("B22").Value > 2900 And Right(Range("G5"), 2) = "RN" Then
monmess = "Vous avez dépassé la masse max autorisée à l'ATR (2900
livres)"

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

ElseIf Range("B22").Value > 1157 And Right(Range("G5"), 2) = "JC" Then
monmess = "Vous avez dépassé la masse max autorisée à l'ATR (1157 kg)"

ElseIf Range("B20").Value > 780 And Right(Range("G5"), 2) = "AK" Then
monmess = "Vous avez dépassé la masse max autorisée au D/L (780 kg)"

ElseIf Range("B22").Value > 780 And Right(Range("G5"), 2) = "AK" Then
monmess = "Vous avez dépassé la masse max autorisée à l'ATR (780 kg)"

End If
MsgBox monmess, vbOKOnly
End Sub

--
Avec plaisir
http://dj.joss.free.fr/trombine.htm
http://jacxl.free.fr/mpfe/trombino.html
Philippe.R
Pour se connecter au forum :
http://www.excelabo.net/web/mpfe
News://news.microsoft.com/microsoft.public.fr.excel
"C15" a écrit dans le message de
news:
Bonjour à tous et à toutes,

J'ai un fichier avec un tableau pour calculer les masses et centrage de
différents avions.

Gràce à Jéro et Michdenis, j'ai mis en place une longue procédure qui
me permet d'actualiser le graphique en fonction de données saisies dans
le tableau.

J'ai en particulier la procédure suivante :

Private Sub Worksheet_Calculate()

If Range("B20").Value > 2900 And Right(Range("G5"), 2) = "RN" Then
MsgBox "Vous avez dépassé la masse max autorisée au D/L (2900 livres)",
vbOKOnly

ElseIf Range("B22").Value > 2900 And Right(Range("G5"), 2) = "RN" Then
MsgBox "Vous avez dépassé la masse max autorisée à l'ATR (2900
livres)", vbOKOnly

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

ElseIf Range("B22").Value > 1157 And Right(Range("G5"), 2) = "JC" Then
MsgBox "Vous avez dépassé la masse max autorisée à l'ATR (1157 kg)",
vbOKOnly

ElseIf Range("B20").Value > 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 Range("B22").Value > 780 And Right(Range("G5"), 2) = "AK" Then
MsgBox "Vous avez dépassé la masse max autorisée à l'ATR (780 kg)",
vbOKOnly

End If

End Sub
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 "RN"
Macro_RN
Case "JC"
Macro_JC
Case "AK"
Macro_AK
End Select
End If


End Sub


Le Worksheet_Calculate() me permet d'afficher une boite de dialogue si
les données calculées en B20 et/ou B22 sont > valeur spécifique à un
avion immatriculé AK, JC ou RN.

La Worksheet_Change(ByVal Target As Range) me remplit certaines
cellules du tableau (et par conséquent du graphique) en fonction de
l'avion sélectionné dans une liste déroulante, par l'exécution des
macros Macro_AK...

Cette msgbox n'apparait normalement que lorsque le tableau est
entièrement renseigné sauf si je choisis d'abord RN pour afficher les
données de cet avion et qu'après je choisis un des 2 autres (normal
2900>1157 ou 780).
Elle apparait alors avant l'actualisation du tableau, elle disparait
dès que je fais OK.
Elle réapparait si B20>...

Comment faire pour que ces msgbox ne s'affiche réellement que si
B20>1157 (ou 780) ?


Merci de votre aide.

A+

C15











Avatar
C15
Bonsoir Jero,

1 Tu avais raison, la procédure je l'avais mise 2 fois (dans 1 nouveau
module et rajoutée à un module existant).
2 et 3 corrigé.
4 OK.
5 j'avais fait attention aux coupures de lignes.

J'ai revérifié et maintenant cela bloque sur "la méthode Range de
l'objet Global a échoué" concernant la ligne
For Each Cel In Range(Plage)

Pour info ci joint le fichier.

http://www.cijoint.fr/cjlink.php?file=cj201001/cijDPZYrA7.xls

Tu verras que grâce à tes conseils j'ai sacrément améliorer le fichier,
notamment la gestion des graphiques (un peu galère car les échelles des
axes ne sont pas identiques d'un avion à l'autre).
Je ne me suis pas encore penché sur tes derniers conseils de mettre en
place des variables et d'utiliser la méthode case pour "regrouper" des
procédures similaires, même si hélas les données étant relativement
variables d'un avion à l'autre, le gain ne sera peut-être pas si
intéressant que cela.
Je vais m'y lancer d'ici à la fin de la semaine.

Merci de ton aide.

A+

C15






jero a écrit :
Salut,
1-> De plus j'ai un problème avec DéfinirPlageDonnées et SaisieComplète
(noms ambigus).
Tu n'aurais pas copié 2 fois les procédures ?
2-> Par ailleurs cela coince sur Range("Données").ClearComments
Tu as raison, c'est Range("Données").ClearContents
3-> l'apostrophe est-il justifié pour :
'Range("A26,B26,C26,B12:B14").ClearContents
Oui, mais tu peux supprimer cette ligne
4-> Dans Worksheet_Change tu fais appel à G5 or G5 n'est pas dans la
procédure DéfinirPlageDonnées
Non, la procédure DéfinirPlageDonnées n'est utilisée que pour définir le nom
"Données", c'est normal...
5-....(ou une non maitrise du copier/coller).
Peut-être, fais attention, par exemple :
ActiveWorkbook.Names.Add Name:="Données", RefersTo:="='Masse et
centrage'!$A$26:$C$26,'Masse et centrage'!$B$12:$B$14"
C'est sur UNE SEULE LIGNE... Pour le vérifier, lorsque tu fais
copier/coller, tu ne dois pas obtenir de lignes "en rouge" ; cela
signifierait une erreur de syntaxe.
A+

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

Bonjour Jero,

Dans ta procédure DéfinirPlageDonnées
j'ai modifié les plages en RC car Excel ne semblait pas trop aimer.

Dans Worksheet_Change tu fais appel à G5 or G5 n'est pas dans la procédure
DéfinirPlageDonnées.

Par ailleurs cela coince sur
Range("Données").ClearComments

l'apostrophe est-il justifié pour :
'Range("A26,B26,C26,B12:B14").ClearContents

Ne serait-ce pas plutôt
Merci de ton aide en me disant si c'est une mauvaise analyse de ma part
(ou une non maitrise du copier/coller).

A+

C15


jero a écrit :
Salut,
Dans la feuille "Masse et centrage" :

Private Sub Worksheet_Calculate()
If SaisieComplète("Données") Then 'Si toutes les données ne sont pas
saisies, aucun message
If Range("B20").Value > 2900 And Right(Range("G5"), 2) = "RN"
Then
MsgBox "Vous avez dépassé la masse max autorisée au D/L (2900
livres)", vbOKOnly
'Inutile (la masse à l'ATR est forcément inférieure à la
masse au D/L non ?)
'ElseIf Range("B22").Value > 2900 And Right(Range("G5"), 2) =
"RN" Then
'MsgBox "Vous avez dépassé la masse max autorisée à l'ATR
(2900 livres)", vbOKOnly
ElseIf Range("B20").Value > 1157 And Right(Range("G5"), 2) =
"JC" Then
MsgBox "Vous avez dépassé la masse max autorisée au D/L (1157
kg)", vbOKOnly
'ElseIf Range("B22").Value > 1157 And Right(Range("G5"), 2) =
"JC" Then
'MsgBox "Vous avez dépassé la masse max autorisée à l'ATR
(1157 kg)", vbOKOnly
ElseIf Range("B20").Value > 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 Range("B22").Value > 780 And Right(Range("G5"), 2) =
"AK" Then
'MsgBox "Vous avez dépassé la masse max autorisée à l'ATR
(780 kg)", vbOKOnly
End If
End If
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("G5")) Is Nothing Then
'Range("A26,B26,C26,B12:B14").ClearContents
Range("Données").ClearComments
Select Case Right(Range("G5"), 2)
Case "RN"
Macro_RN
Case "JC"
Macro_JC
Case "AK"
Macro_AK
End Select
DéfinirPlageDonnées Right(Range("G5"), 2)
End If
End Sub

Dans un module standard :

Sub DéfinirPlageDonnées(TypeAvion As String)
'Cette procédure permet de définir un nom ("Données") qui correspond aux
cellules à saisir
'Cette plage peut-être différente d'un avion à l'autre
'A compléter....
On Error Resume Next
ActiveWorkbook.Names("Données").Delete
On Error GoTo 0
Select Case TypeAvion
Case "JC", "RN"
ActiveWorkbook.Names.Add Name:="Données", RefersTo:="='Masse et
centrage'!$A$26:$C$26,'Masse et centrage'!$B$12:$B$14"
Case "AK"
ActiveWorkbook.Names.Add Name:="Données", RefersTo:="='Masse et
centrage'!$A$26:$C$26,'Masse et centrage'!$B$12,'Masse et
centrage'!$B$14"
Case Else
End Select
End Sub

Function SaisieComplète(Plage As String) As Boolean
'Cette fonction permet de vérifier que TOUTES les données ont bien été
saisies
Dim Cel, P As Boolean
P = True
For Each Cel In Range(Plage)
P = P And Not IsEmpty(Cel)
Next
SaisieComplète = P
End Function

Note :
Tu pourrais remplacer la procédure Worksheet_Calculate() par :
Private Sub Worksheet_Calculate()
Dim Msg As String, PoidsMax As Single
If SaisieComplète("Données") Then
Select Case Right(Range("G5"), 2)
Case "RN"
PoidsMax = 2900
Case "JC"
PoidsMax = 1157
Case "AK"
PoidsMax = 780
End Select
If Range("B20").Value > PoidsMax Then
Msg = "Vous avez dépassé la masse max autorisée au D/L ("
& PoidsMax & ")"
MsgBox Msg, vbOKOnly
End If
End If
End Sub

A+
jpg

"Philippe.R" <AS_rauphil_chez_wanadoo.fr> a écrit dans le message de
news: %
Bonsoir,
Au lieu de lancer la MsgBox à chaque if, on peut ne la lancer qu'à la
fin, en ayant simplement adapté le message à chaque cas :

Private Sub Worksheet_Calculate()
Dim monMess as string

If Range("B20").Value > 2900 And Right(Range("G5"), 2) = "RN" Then
monmess = "Vous avez dépassé la masse max autorisée au D/L (2900
livres)"

ElseIf Range("B22").Value > 2900 And Right(Range("G5"), 2) = "RN" Then
monmess = "Vous avez dépassé la masse max autorisée à l'ATR (2900
livres)"

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

ElseIf Range("B22").Value > 1157 And Right(Range("G5"), 2) = "JC" Then
monmess = "Vous avez dépassé la masse max autorisée à l'ATR (1157 kg)"

ElseIf Range("B20").Value > 780 And Right(Range("G5"), 2) = "AK" Then
monmess = "Vous avez dépassé la masse max autorisée au D/L (780 kg)"

ElseIf Range("B22").Value > 780 And Right(Range("G5"), 2) = "AK" Then
monmess = "Vous avez dépassé la masse max autorisée à l'ATR (780 kg)"

End If
MsgBox monmess, vbOKOnly
End Sub

--
Avec plaisir
http://dj.joss.free.fr/trombine.htm
http://jacxl.free.fr/mpfe/trombino.html
Philippe.R
Pour se connecter au forum :
http://www.excelabo.net/web/mpfe
News://news.microsoft.com/microsoft.public.fr.excel
"C15" a écrit dans le message de
news:
Bonjour à tous et à toutes,

J'ai un fichier avec un tableau pour calculer les masses et centrage de
différents avions.

Gràce à Jéro et Michdenis, j'ai mis en place une longue procédure qui
me permet d'actualiser le graphique en fonction de données saisies dans
le tableau.

J'ai en particulier la procédure suivante :

Private Sub Worksheet_Calculate()

If Range("B20").Value > 2900 And Right(Range("G5"), 2) = "RN" Then
MsgBox "Vous avez dépassé la masse max autorisée au D/L (2900 livres)",
vbOKOnly

ElseIf Range("B22").Value > 2900 And Right(Range("G5"), 2) = "RN" Then
MsgBox "Vous avez dépassé la masse max autorisée à l'ATR (2900
livres)", vbOKOnly

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

ElseIf Range("B22").Value > 1157 And Right(Range("G5"), 2) = "JC" Then
MsgBox "Vous avez dépassé la masse max autorisée à l'ATR (1157 kg)",
vbOKOnly

ElseIf Range("B20").Value > 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 Range("B22").Value > 780 And Right(Range("G5"), 2) = "AK" Then
MsgBox "Vous avez dépassé la masse max autorisée à l'ATR (780 kg)",
vbOKOnly

End If

End Sub
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 "RN"
Macro_RN
Case "JC"
Macro_JC
Case "AK"
Macro_AK
End Select
End If


End Sub


Le Worksheet_Calculate() me permet d'afficher une boite de dialogue si
les données calculées en B20 et/ou B22 sont > valeur spécifique à un
avion immatriculé AK, JC ou RN.

La Worksheet_Change(ByVal Target As Range) me remplit certaines
cellules du tableau (et par conséquent du graphique) en fonction de
l'avion sélectionné dans une liste déroulante, par l'exécution des
macros Macro_AK...

Cette msgbox n'apparait normalement que lorsque le tableau est
entièrement renseigné sauf si je choisis d'abord RN pour afficher les
données de cet avion et qu'après je choisis un des 2 autres (normal
2900>1157 ou 780).
Elle apparait alors avant l'actualisation du tableau, elle disparait
dès que je fais OK.
Elle réapparait si B20>...

Comment faire pour que ces msgbox ne s'affiche réellement que si
B20>1157 (ou 780) ?


Merci de votre aide.

A+

C15













Avatar
jero
Salut,
Quelques corrections :
1-
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("G5")) Is Nothing Then
On Error Resume Next
Range("Données").ClearContents
On Error GoTo 0
Select Case Right(Range("G5"), 2)
Case "RN"
Macro_RN
Case "JC"
Macro_JC
Case "AK"
Macro_AK
End Select
DéfinirPlageDonnées Right(Range("G5"), 2)
End If
Note : c'est bien Range("Données").ClearContents et non
Range("Données").ClearComments
2-
Sub DéfinirPlageDonnées(TypeAvion As String)
'Cette procédure permet de définir un nom ("Données") qui correspond aux
cellules à saisir
'Cette plage peut-être différente d'un avion à l'autre
'A compléter....
On Error Resume Next
ActiveWorkbook.Names("Données").Delete
On Error GoTo 0
Select Case TypeAvion
Case "JC", "RN"
ActiveWorkbook.Names.Add Name:="Données", RefersTo:="='Masse et
centrage'!$A$26:$C$26,'Masse et centrage'!$B$12:$B$14"
Case "AK"
ActiveWorkbook.Names.Add Name:="Données", RefersTo:="='Masse et
centrage'!$A$26:$C$26,'Masse et centrage'!$B$12,'Masse et centrage'!$B$14"
Case Else
End Select
End Sub
Note : Il y avait une erreur à :
ActiveWorkbook.Names.Add Name:="Données", RefersTo:="='Masse et
centrage'!$A$26:$C$26,'Masse et centrage'!$B$12:$B$14"
(un espace de trop dans 'Masse et centrage'!...) et en passant un p'tit
conseil : évite les espaces dans les noms de feuille, etc... surtout si tu
veux faire un peu de programmation , par ex. MasseEtCentrage c'est très
lisible - en alternant Majuscules et Minuscules ; c'est pour ça que
l'éditeur VBA ajoute des guillemets simple, sinon tu aurais :
ActiveWorkbook.Names.Add Name:="Données",
RefersTo:="=MasseEtCentrage!$A$26:$C$26,MasseEtCentrage!$B$12:$B$14"

Function SaisieComplète(Plage As String) As Boolean
'Cette fonction permet de vérifier que TOUTES les données ont bien été
saisies
Dim Cel, P As Boolean
P = True
On Error GoTo Sortie:
For Each Cel In Range(Plage)
P = P And Not IsEmpty(Cel)
Next
SaisieComplète = P
Exit Function
Sortie:
SaisieComplète = False
End Function
Note : J'ai ajouté un traitement d'erreur (On Error...) au cas où le nom ne
serais pas encore défini.
Voilà, voilà...
A+

"C15" a écrit dans le message de news:
O%
Bonsoir Jero,

1 Tu avais raison, la procédure je l'avais mise 2 fois (dans 1 nouveau
module et rajoutée à un module existant).
2 et 3 corrigé.
4 OK.
5 j'avais fait attention aux coupures de lignes.

J'ai revérifié et maintenant cela bloque sur "la méthode Range de l'objet
Global a échoué" concernant la ligne
For Each Cel In Range(Plage)

Pour info ci joint le fichier.

http://www.cijoint.fr/cjlink.php?file=cj201001/cijDPZYrA7.xls

Tu verras que grâce à tes conseils j'ai sacrément améliorer le fichier,
notamment la gestion des graphiques (un peu galère car les échelles des
axes ne sont pas identiques d'un avion à l'autre).
Je ne me suis pas encore penché sur tes derniers conseils de mettre en
place des variables et d'utiliser la méthode case pour "regrouper" des
procédures similaires, même si hélas les données étant relativement
variables d'un avion à l'autre, le gain ne sera peut-être pas si
intéressant que cela.
Je vais m'y lancer d'ici à la fin de la semaine.

Merci de ton aide.

A+

C15






jero a écrit :
Salut,
1-> De plus j'ai un problème avec DéfinirPlageDonnées et SaisieComplète
(noms ambigus).
Tu n'aurais pas copié 2 fois les procédures ?
2-> Par ailleurs cela coince sur Range("Données").ClearComments
Tu as raison, c'est Range("Données").ClearContents
3-> l'apostrophe est-il justifié pour :
'Range("A26,B26,C26,B12:B14").ClearContents
Oui, mais tu peux supprimer cette ligne
4-> Dans Worksheet_Change tu fais appel à G5 or G5 n'est pas dans la
procédure DéfinirPlageDonnées
Non, la procédure DéfinirPlageDonnées n'est utilisée que pour définir le
nom "Données", c'est normal...
5-....(ou une non maitrise du copier/coller).
Peut-être, fais attention, par exemple :
ActiveWorkbook.Names.Add Name:="Données", RefersTo:="='Masse et
centrage'!$A$26:$C$26,'Masse et centrage'!$B$12:$B$14"
C'est sur UNE SEULE LIGNE... Pour le vérifier, lorsque tu fais
copier/coller, tu ne dois pas obtenir de lignes "en rouge" ; cela
signifierait une erreur de syntaxe.
A+

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

Dans ta procédure DéfinirPlageDonnées
j'ai modifié les plages en RC car Excel ne semblait pas trop aimer.

Dans Worksheet_Change tu fais appel à G5 or G5 n'est pas dans la
procédure DéfinirPlageDonnées.

Par ailleurs cela coince sur
Range("Données").ClearComments

l'apostrophe est-il justifié pour :
'Range("A26,B26,C26,B12:B14").ClearContents

Ne serait-ce pas plutôt
Merci de ton aide en me disant si c'est une mauvaise analyse de ma part
(ou une non maitrise du copier/coller).

A+

C15


jero a écrit :
Salut,
Dans la feuille "Masse et centrage" :

Private Sub Worksheet_Calculate()
If SaisieComplète("Données") Then 'Si toutes les données ne sont pas
saisies, aucun message
If Range("B20").Value > 2900 And Right(Range("G5"), 2) =
"RN" Then
MsgBox "Vous avez dépassé la masse max autorisée au D/L
(2900 livres)", vbOKOnly
'Inutile (la masse à l'ATR est forcément inférieure à la
masse au D/L non ?)
'ElseIf Range("B22").Value > 2900 And Right(Range("G5"), 2)
= "RN" Then
'MsgBox "Vous avez dépassé la masse max autorisée à l'ATR
(2900 livres)", vbOKOnly
ElseIf Range("B20").Value > 1157 And Right(Range("G5"), 2)
= "JC" Then
MsgBox "Vous avez dépassé la masse max autorisée au D/L
(1157 kg)", vbOKOnly
'ElseIf Range("B22").Value > 1157 And Right(Range("G5"), 2)
= "JC" Then
'MsgBox "Vous avez dépassé la masse max autorisée à l'ATR
(1157 kg)", vbOKOnly
ElseIf Range("B20").Value > 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 Range("B22").Value > 780 And Right(Range("G5"), 2)
= "AK" Then
'MsgBox "Vous avez dépassé la masse max autorisée à l'ATR
(780 kg)", vbOKOnly
End If
End If
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("G5")) Is Nothing Then
'Range("A26,B26,C26,B12:B14").ClearContents
Range("Données").ClearComments
Select Case Right(Range("G5"), 2)
Case "RN"
Macro_RN
Case "JC"
Macro_JC
Case "AK"
Macro_AK
End Select
DéfinirPlageDonnées Right(Range("G5"), 2)
End If
End Sub

Dans un module standard :

Sub DéfinirPlageDonnées(TypeAvion As String)
'Cette procédure permet de définir un nom ("Données") qui correspond
aux cellules à saisir
'Cette plage peut-être différente d'un avion à l'autre
'A compléter....
On Error Resume Next
ActiveWorkbook.Names("Données").Delete
On Error GoTo 0
Select Case TypeAvion
Case "JC", "RN"
ActiveWorkbook.Names.Add Name:="Données", RefersTo:="='Masse et
centrage'!$A$26:$C$26,'Masse et centrage'!$B$12:$B$14"
Case "AK"
ActiveWorkbook.Names.Add Name:="Données", RefersTo:="='Masse et
centrage'!$A$26:$C$26,'Masse et centrage'!$B$12,'Masse et
centrage'!$B$14"
Case Else
End Select
End Sub

Function SaisieComplète(Plage As String) As Boolean
'Cette fonction permet de vérifier que TOUTES les données ont bien été
saisies
Dim Cel, P As Boolean
P = True
For Each Cel In Range(Plage)
P = P And Not IsEmpty(Cel)
Next
SaisieComplète = P
End Function

Note :
Tu pourrais remplacer la procédure Worksheet_Calculate() par :
Private Sub Worksheet_Calculate()
Dim Msg As String, PoidsMax As Single
If SaisieComplète("Données") Then
Select Case Right(Range("G5"), 2)
Case "RN"
PoidsMax = 2900
Case "JC"
PoidsMax = 1157
Case "AK"
PoidsMax = 780
End Select
If Range("B20").Value > PoidsMax Then
Msg = "Vous avez dépassé la masse max autorisée au D/L
(" & PoidsMax & ")"
MsgBox Msg, vbOKOnly
End If
End If
End Sub

A+
jpg

"Philippe.R" <AS_rauphil_chez_wanadoo.fr> a écrit dans le message de
news: %
Bonsoir,
Au lieu de lancer la MsgBox à chaque if, on peut ne la lancer qu'à la
fin, en ayant simplement adapté le message à chaque cas :

Private Sub Worksheet_Calculate()
Dim monMess as string

If Range("B20").Value > 2900 And Right(Range("G5"), 2) = "RN" Then
monmess = "Vous avez dépassé la masse max autorisée au D/L (2900
livres)"

ElseIf Range("B22").Value > 2900 And Right(Range("G5"), 2) = "RN" Then
monmess = "Vous avez dépassé la masse max autorisée à l'ATR (2900
livres)"

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

ElseIf Range("B22").Value > 1157 And Right(Range("G5"), 2) = "JC" Then
monmess = "Vous avez dépassé la masse max autorisée à l'ATR (1157 kg)"

ElseIf Range("B20").Value > 780 And Right(Range("G5"), 2) = "AK" Then
monmess = "Vous avez dépassé la masse max autorisée au D/L (780 kg)"

ElseIf Range("B22").Value > 780 And Right(Range("G5"), 2) = "AK" Then
monmess = "Vous avez dépassé la masse max autorisée à l'ATR (780 kg)"

End If
MsgBox monmess, vbOKOnly
End Sub

--
Avec plaisir
http://dj.joss.free.fr/trombine.htm
http://jacxl.free.fr/mpfe/trombino.html
Philippe.R
Pour se connecter au forum :
http://www.excelabo.net/web/mpfe
News://news.microsoft.com/microsoft.public.fr.excel
"C15" a écrit dans le message de
news:
Bonjour à tous et à toutes,

J'ai un fichier avec un tableau pour calculer les masses et centrage
de différents avions.

Gràce à Jéro et Michdenis, j'ai mis en place une longue procédure qui
me permet d'actualiser le graphique en fonction de données saisies
dans le tableau.

J'ai en particulier la procédure suivante :

Private Sub Worksheet_Calculate()

If Range("B20").Value > 2900 And Right(Range("G5"), 2) = "RN" Then
MsgBox "Vous avez dépassé la masse max autorisée au D/L (2900
livres)", vbOKOnly

ElseIf Range("B22").Value > 2900 And Right(Range("G5"), 2) = "RN"
Then
MsgBox "Vous avez dépassé la masse max autorisée à l'ATR (2900
livres)", vbOKOnly

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

ElseIf Range("B22").Value > 1157 And Right(Range("G5"), 2) = "JC"
Then
MsgBox "Vous avez dépassé la masse max autorisée à l'ATR (1157 kg)",
vbOKOnly

ElseIf Range("B20").Value > 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 Range("B22").Value > 780 And Right(Range("G5"), 2) = "AK" Then
MsgBox "Vous avez dépassé la masse max autorisée à l'ATR (780 kg)",
vbOKOnly

End If

End Sub
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 "RN"
Macro_RN
Case "JC"
Macro_JC
Case "AK"
Macro_AK
End Select
End If


End Sub


Le Worksheet_Calculate() me permet d'afficher une boite de dialogue
si les données calculées en B20 et/ou B22 sont > valeur spécifique à
un avion immatriculé AK, JC ou RN.

La Worksheet_Change(ByVal Target As Range) me remplit certaines
cellules du tableau (et par conséquent du graphique) en fonction de
l'avion sélectionné dans une liste déroulante, par l'exécution des
macros Macro_AK...

Cette msgbox n'apparait normalement que lorsque le tableau est
entièrement renseigné sauf si je choisis d'abord RN pour afficher les
données de cet avion et qu'après je choisis un des 2 autres (normal
2900>1157 ou 780).
Elle apparait alors avant l'actualisation du tableau, elle disparait
dès que je fais OK.
Elle réapparait si B20>...

Comment faire pour que ces msgbox ne s'affiche réellement que si
B20>1157 (ou 780) ?


Merci de votre aide.

A+

C15














1 2