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
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
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
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
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
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
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
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" <MefiezVousDesSpams@club-internet.fr> a écrit dans le message de
news:eYufpAUkKHA.1824@TK2MSFTNGP04.phx.gbl...
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
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
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
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
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
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
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" <MefiezVousDesSpams@club-internet.fr> a écrit dans le message de
news:eYufpAUkKHA.1824@TK2MSFTNGP04.phx.gbl...
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
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
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
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
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
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
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:
%231K8T4UkKHA.1824@TK2MSFTNGP04.phx.gbl...
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" <MefiezVousDesSpams@club-internet.fr> a écrit dans le message de
news:eYufpAUkKHA.1824@TK2MSFTNGP04.phx.gbl...
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
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
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
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: %231K8T4UkKHA.1824@TK2MSFTNGP04.phx.gbl...
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" <MefiezVousDesSpams@club-internet.fr> a écrit dans le message de
news:eYufpAUkKHA.1824@TK2MSFTNGP04.phx.gbl...
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
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
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
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" <MefiezVousDesSpams@club-internet.fr> a écrit dans le message de news:
e23rwsokKHA.4356@TK2MSFTNGP06.phx.gbl...
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: %231K8T4UkKHA.1824@TK2MSFTNGP04.phx.gbl...
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" <MefiezVousDesSpams@club-internet.fr> a écrit dans le message de
news:eYufpAUkKHA.1824@TK2MSFTNGP04.phx.gbl...
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
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
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
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" <MefiezVousDesSpams@club-internet.fr> a écrit dans le message de
news: e23rwsokKHA.4356@TK2MSFTNGP06.phx.gbl...
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: %231K8T4UkKHA.1824@TK2MSFTNGP04.phx.gbl...
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" <MefiezVousDesSpams@club-internet.fr> a écrit dans le message de
news:eYufpAUkKHA.1824@TK2MSFTNGP04.phx.gbl...
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
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