J'ai un fichier comportant un tableau (avec des calculs simples de + et
*) et un graphique.
J'ai une cellule avec une liste de choix qui me permet de déclencher une
macro 1 ou une macro 2 pour remplir certaines cellules du tableau et
personnaliser le graphique.
Le déclenchement se fait avec le code suivant (merci à MichDenis) :
>>>>>>>>>>
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("G5")) Is Nothing Then
Lorsque je complète les cellules "variables" du tableau, certaines
cellules sont bien sur actualisées, comme par exemple
B20=B18-B19
ou B22=B20-B21
Je voudrais qu'après l'exécution de la macro "Macro_JC" et après avoir
renseigné les cellules variables
j'ai une vérification automatique de la valeur de B20.
Celle-ci doit être <1157
avec apparition d'une msgbox "la masse max autorisée au D/L doit être
<1157 kg".
Il en est de même pour B22 (<1157)
et cela doit être vérifié aussi dans le cas "Macro_AK"
avec B20<780 et B22<780.
Worksheet_Calculate() : oui, ok. Dans le cas de mes 10 autres avions est-ce qu'un select case serait plus efficace que mes elseif ?
Oui, évidemment, et surtout plus lisible... (Select Case Right(Range("G5"), 2)) Je pense également que si tu as 12 avions, tu vas avoir 12 macros "XX" : en paramétrant correctement (elles vont furieusement se ressembler sans doute), tu pourrais allèger le code... ça pourrait être du genre " Macro_Avions(TypeAvion As String) 'Ici, les instructions identiques pour tous les types .... .... 'Ici, les instructions spécifiques en fonction du type Select case TypeAvion Case "JC" Case "AK" ..... ..... End Select .... Tu appelles ta procédure par Macro_Avions(Right(Range("G5"), 2)) N'oublie pas non plus d'utiliser des variables plutot que des valeurs ("en dur") : grand principe de base.... Par ex : PoidsMax Select case TypeAvion Case "JC" PoidsMax47 Case "AK" PoidsMaxx0 ..... ..... End Select et dans ton message d'avertissement, tu utilises PoidsMax... Si le PoidsMax change pour un type d'avion, tu n'auras qu'une fois à le modifier Voilà, voilà... A+ "C15" a écrit dans le message de news: %23PLJq%
Rebonsoir,
Voir le fichier joint : http://www.cijoint.fr/cjlink.php?file=cj201001/cij1GgT9NC.xls
Avec votre aide à tous les 2 et en cherchant sur le net j'ai sans doute trouvé la solution :
>>> Private Sub Worksheet_Calculate()
If [B20] > 780 And Right(Range("G5"), 2) = "AK" Then MsgBox "Vous avez dépassé la masse max autorisée au D/L (780 kg)", vbOKOnly
ElseIf [B20] > 1157 And Right(Range("G5"), 2) = "JC" Then MsgBox "Vous avez dépassé la masse max autorisée au D/L (1157 kg)", vbOKOnly
End If
End Sub >>>
Je saisis les poids des personnes à bord et des bagages. Je saisis le carburant embarqué et au roulage. La masse au D/L est calculée. Si elle est >780 (pour AK) msgbox...
Teste pour me dire ce que tu en penses.
Dans le cas de mes 10 autres avions est-ce qu'un select case serait plus efficace que mes elseif ?
Merci de votre aide.
A+
C15
C15 a écrit :
Bonsoir Jero,
Ta proposition n'est pas mal, mais pour moi un pop up (comme le message de validation de données) est plus parlant, d'autant plus que la sécurité est en jeu. J'y émettrai plusieurs réserves : c'est un fichier test pour 2 avions (dans mon club il y en a 12 avec des limitations différentes), donc la fonction si va se rallonger un peu... le message doit rappeler la masse max que l'on est en train de dépasser (par exemple pour AK 780 kg)
Tes remarques correspondent tout à fait à ce que j'avais (sans doute mal) exprimé : C'est après la saisie des données que l'alerte doit apparaitre. Par ailleurs la validation des données que j'avais mis en place ne marche que pour des valeurs saisies et non pas calculées et effectivement c'est à supprimer. Le problème du pop up c'est le mode de déclenchement, plus précisément dès que j'ai saisi les quantités carburant et que donc les masses sont calculées automatiquement en B20 et B22, l'alerte doit automatiquement apparaitre si B20 ou B22>780 pour AK pour que je modifie mon devis de poids (bagages et/ou carburant embarqué).
Merci de ton aide.
A+
C15
jero a écrit :
Salut C15, Je viens de télécharger ton classeur. Déjà, une première remarque (par rapport uniquement à nos échanges) : ce n'est pas après l'exécution d'une des macros qu'il faut afficher le message mais après la saisie des données (cellules en jaune). Avant d'aller plus loin ; est-ce qu'un affichage dans la cellule B20 suffirait ? Ce serait du genre (en B20) : =SI(OU(ET(DROITE(G5;2)="JC";B18-B19>1147);ET(DROITE(G5;2)="AK";B18-B19>780));"Attention...";B18-B19) Et tu enlèves la validation de données... Il resterait à modifier les formules des cellules C20,B22 et C22 (pour éviter l'affichage de #VALEUR! (fonction SI(ESTERREUR(.... Modifier également : Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("G5")) Is Nothing Then Range("A26,B26,C26,B12:B14").ClearContents Select Case Right(Range("G5"), 2) Case "JC" Macro_JC Case "AK" Macro_AK End Select End If End Sub A+
"C15" a écrit dans le message de news:
Bonjour,
Si cela peut vous aider... http://www.cijoint.fr/cjlink.php?file=cj201001/cijNKCvARi.xls
Merci de votre aide.
A+
C15
michdenis a écrit :
Merci... cela m'avait échappé !
Salut,
Worksheet_Calculate() : oui, ok.
Dans le cas de mes 10 autres avions est-ce qu'un select case serait plus
efficace que mes elseif ?
Oui, évidemment, et surtout plus lisible... (Select Case Right(Range("G5"),
2))
Je pense également que si tu as 12 avions, tu vas avoir 12 macros "XX" : en
paramétrant correctement (elles vont furieusement se ressembler sans doute),
tu pourrais allèger le code...
ça pourrait être du genre "
Macro_Avions(TypeAvion As String)
'Ici, les instructions identiques pour tous les types
....
....
'Ici, les instructions spécifiques en fonction du type
Select case TypeAvion
Case "JC"
Case "AK"
.....
.....
End Select
....
Tu appelles ta procédure par Macro_Avions(Right(Range("G5"), 2))
N'oublie pas non plus d'utiliser des variables plutot que des valeurs ("en
dur") : grand principe de base....
Par ex : PoidsMax
Select case TypeAvion
Case "JC"
PoidsMax47
Case "AK"
PoidsMaxx0 .....
.....
End Select
et dans ton message d'avertissement, tu utilises PoidsMax...
Si le PoidsMax change pour un type d'avion, tu n'auras qu'une fois à le
modifier
Voilà, voilà...
A+
"C15" <MefiezVousDesSpams@club-internet.fr> a écrit dans le message de news:
%23PLJq%23vjKHA.1536@TK2MSFTNGP06.phx.gbl...
Rebonsoir,
Voir le fichier joint :
http://www.cijoint.fr/cjlink.php?file=cj201001/cij1GgT9NC.xls
Avec votre aide à tous les 2 et en cherchant sur le net j'ai sans doute
trouvé la solution :
>>>
Private Sub Worksheet_Calculate()
If [B20] > 780 And Right(Range("G5"), 2) = "AK" Then
MsgBox "Vous avez dépassé la masse max autorisée au D/L (780 kg)",
vbOKOnly
ElseIf [B20] > 1157 And Right(Range("G5"), 2) = "JC" Then
MsgBox "Vous avez dépassé la masse max autorisée au D/L (1157 kg)",
vbOKOnly
End If
End Sub
>>>
Je saisis les poids des personnes à bord et des bagages.
Je saisis le carburant embarqué et au roulage.
La masse au D/L est calculée.
Si elle est >780 (pour AK) msgbox...
Teste pour me dire ce que tu en penses.
Dans le cas de mes 10 autres avions est-ce qu'un select case serait plus
efficace que mes elseif ?
Merci de votre aide.
A+
C15
C15 a écrit :
Bonsoir Jero,
Ta proposition n'est pas mal, mais pour moi un pop up (comme le message
de validation de données) est plus parlant, d'autant plus que la sécurité
est en jeu.
J'y émettrai plusieurs réserves :
c'est un fichier test pour 2 avions (dans mon club il y en a 12 avec
des limitations différentes), donc la fonction si va se rallonger un
peu...
le message doit rappeler la masse max que l'on est en train de
dépasser (par exemple pour AK 780 kg)
Tes remarques correspondent tout à fait à ce que j'avais (sans doute mal)
exprimé :
C'est après la saisie des données que l'alerte doit apparaitre.
Par ailleurs la validation des données que j'avais mis en place
ne marche que pour des valeurs saisies et non pas calculées et
effectivement c'est à supprimer.
Le problème du pop up c'est le mode de déclenchement, plus
précisément dès que j'ai saisi les quantités carburant et que donc les
masses sont calculées automatiquement en B20 et B22, l'alerte doit
automatiquement apparaitre si B20 ou B22>780 pour AK pour que je modifie
mon devis de poids (bagages et/ou carburant embarqué).
Merci de ton aide.
A+
C15
jero a écrit :
Salut C15,
Je viens de télécharger ton classeur.
Déjà, une première remarque (par rapport uniquement à nos échanges) : ce
n'est pas après l'exécution d'une des macros qu'il faut afficher le
message mais après la saisie des données (cellules en jaune).
Avant d'aller plus loin ; est-ce qu'un affichage dans la cellule B20
suffirait ?
Ce serait du genre (en B20) :
=SI(OU(ET(DROITE(G5;2)="JC";B18-B19>1147);ET(DROITE(G5;2)="AK";B18-B19>780));"Attention...";B18-B19)
Et tu enlèves la validation de données...
Il resterait à modifier les formules des cellules C20,B22 et C22 (pour
éviter l'affichage de #VALEUR! (fonction SI(ESTERREUR(....
Modifier également :
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("G5")) Is Nothing Then
Range("A26,B26,C26,B12:B14").ClearContents
Select Case Right(Range("G5"), 2)
Case "JC"
Macro_JC
Case "AK"
Macro_AK
End Select
End If
End Sub
A+
"C15" <MefiezVousDesSpams@club-internet.fr> a écrit dans le message de
news: eRFh6cpjKHA.4672@TK2MSFTNGP06.phx.gbl...
Bonjour,
Si cela peut vous aider...
http://www.cijoint.fr/cjlink.php?file=cj201001/cijNKCvARi.xls
Worksheet_Calculate() : oui, ok. Dans le cas de mes 10 autres avions est-ce qu'un select case serait plus efficace que mes elseif ?
Oui, évidemment, et surtout plus lisible... (Select Case Right(Range("G5"), 2)) Je pense également que si tu as 12 avions, tu vas avoir 12 macros "XX" : en paramétrant correctement (elles vont furieusement se ressembler sans doute), tu pourrais allèger le code... ça pourrait être du genre " Macro_Avions(TypeAvion As String) 'Ici, les instructions identiques pour tous les types .... .... 'Ici, les instructions spécifiques en fonction du type Select case TypeAvion Case "JC" Case "AK" ..... ..... End Select .... Tu appelles ta procédure par Macro_Avions(Right(Range("G5"), 2)) N'oublie pas non plus d'utiliser des variables plutot que des valeurs ("en dur") : grand principe de base.... Par ex : PoidsMax Select case TypeAvion Case "JC" PoidsMax47 Case "AK" PoidsMaxx0 ..... ..... End Select et dans ton message d'avertissement, tu utilises PoidsMax... Si le PoidsMax change pour un type d'avion, tu n'auras qu'une fois à le modifier Voilà, voilà... A+ "C15" a écrit dans le message de news: %23PLJq%
Rebonsoir,
Voir le fichier joint : http://www.cijoint.fr/cjlink.php?file=cj201001/cij1GgT9NC.xls
Avec votre aide à tous les 2 et en cherchant sur le net j'ai sans doute trouvé la solution :
>>> Private Sub Worksheet_Calculate()
If [B20] > 780 And Right(Range("G5"), 2) = "AK" Then MsgBox "Vous avez dépassé la masse max autorisée au D/L (780 kg)", vbOKOnly
ElseIf [B20] > 1157 And Right(Range("G5"), 2) = "JC" Then MsgBox "Vous avez dépassé la masse max autorisée au D/L (1157 kg)", vbOKOnly
End If
End Sub >>>
Je saisis les poids des personnes à bord et des bagages. Je saisis le carburant embarqué et au roulage. La masse au D/L est calculée. Si elle est >780 (pour AK) msgbox...
Teste pour me dire ce que tu en penses.
Dans le cas de mes 10 autres avions est-ce qu'un select case serait plus efficace que mes elseif ?
Merci de votre aide.
A+
C15
C15 a écrit :
Bonsoir Jero,
Ta proposition n'est pas mal, mais pour moi un pop up (comme le message de validation de données) est plus parlant, d'autant plus que la sécurité est en jeu. J'y émettrai plusieurs réserves : c'est un fichier test pour 2 avions (dans mon club il y en a 12 avec des limitations différentes), donc la fonction si va se rallonger un peu... le message doit rappeler la masse max que l'on est en train de dépasser (par exemple pour AK 780 kg)
Tes remarques correspondent tout à fait à ce que j'avais (sans doute mal) exprimé : C'est après la saisie des données que l'alerte doit apparaitre. Par ailleurs la validation des données que j'avais mis en place ne marche que pour des valeurs saisies et non pas calculées et effectivement c'est à supprimer. Le problème du pop up c'est le mode de déclenchement, plus précisément dès que j'ai saisi les quantités carburant et que donc les masses sont calculées automatiquement en B20 et B22, l'alerte doit automatiquement apparaitre si B20 ou B22>780 pour AK pour que je modifie mon devis de poids (bagages et/ou carburant embarqué).
Merci de ton aide.
A+
C15
jero a écrit :
Salut C15, Je viens de télécharger ton classeur. Déjà, une première remarque (par rapport uniquement à nos échanges) : ce n'est pas après l'exécution d'une des macros qu'il faut afficher le message mais après la saisie des données (cellules en jaune). Avant d'aller plus loin ; est-ce qu'un affichage dans la cellule B20 suffirait ? Ce serait du genre (en B20) : =SI(OU(ET(DROITE(G5;2)="JC";B18-B19>1147);ET(DROITE(G5;2)="AK";B18-B19>780));"Attention...";B18-B19) Et tu enlèves la validation de données... Il resterait à modifier les formules des cellules C20,B22 et C22 (pour éviter l'affichage de #VALEUR! (fonction SI(ESTERREUR(.... Modifier également : Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("G5")) Is Nothing Then Range("A26,B26,C26,B12:B14").ClearContents Select Case Right(Range("G5"), 2) Case "JC" Macro_JC Case "AK" Macro_AK End Select End If End Sub A+
"C15" a écrit dans le message de news:
Bonjour,
Si cela peut vous aider... http://www.cijoint.fr/cjlink.php?file=cj201001/cijNKCvARi.xls
Merci de votre aide.
A+
C15
michdenis a écrit :
Merci... cela m'avait échappé !
C15
Bonjour,
Merci de ces conseils.
Par contre je pense que pour simplifier les choses, il va falloir que je revoie l'organisation de mon classeur avec un onglet par avion et les données de base dans les mêmes cellules.
Merci encore.
A+
C15
jero a écrit :
Salut,
Worksheet_Calculate() : oui, ok. Dans le cas de mes 10 autres avions est-ce qu'un select case serait plus efficace que mes elseif ?
Oui, évidemment, et surtout plus lisible... (Select Case Right(Range("G5"), 2)) Je pense également que si tu as 12 avions, tu vas avoir 12 macros "XX" : en paramétrant correctement (elles vont furieusement se ressembler sans doute), tu pourrais allèger le code... ça pourrait être du genre " Macro_Avions(TypeAvion As String) 'Ici, les instructions identiques pour tous les types .... .... 'Ici, les instructions spécifiques en fonction du type Select case TypeAvion Case "JC" Case "AK" ..... ..... End Select .... Tu appelles ta procédure par Macro_Avions(Right(Range("G5"), 2)) N'oublie pas non plus d'utiliser des variables plutot que des valeurs ("en dur") : grand principe de base.... Par ex : PoidsMax Select case TypeAvion Case "JC" PoidsMax47 Case "AK" PoidsMaxx0 ..... ..... End Select et dans ton message d'avertissement, tu utilises PoidsMax... Si le PoidsMax change pour un type d'avion, tu n'auras qu'une fois à le modifier Voilà, voilà... A+ "C15" a écrit dans le message de news: %23PLJq%
Rebonsoir,
Voir le fichier joint : http://www.cijoint.fr/cjlink.php?file=cj201001/cij1GgT9NC.xls
Avec votre aide à tous les 2 et en cherchant sur le net j'ai sans doute trouvé la solution :
Private Sub Worksheet_Calculate()
If [B20] > 780 And Right(Range("G5"), 2) = "AK" Then MsgBox "Vous avez dépassé la masse max autorisée au D/L (780 kg)", vbOKOnly
ElseIf [B20] > 1157 And Right(Range("G5"), 2) = "JC" Then MsgBox "Vous avez dépassé la masse max autorisée au D/L (1157 kg)", vbOKOnly
End If
End Sub Je saisis les poids des personnes à bord et des bagages. Je saisis le carburant embarqué et au roulage. La masse au D/L est calculée. Si elle est >780 (pour AK) msgbox...
Teste pour me dire ce que tu en penses.
Dans le cas de mes 10 autres avions est-ce qu'un select case serait plus efficace que mes elseif ?
Merci de votre aide.
A+
C15
C15 a écrit :
Bonsoir Jero,
Ta proposition n'est pas mal, mais pour moi un pop up (comme le message de validation de données) est plus parlant, d'autant plus que la sécurité est en jeu. J'y émettrai plusieurs réserves : c'est un fichier test pour 2 avions (dans mon club il y en a 12 avec des limitations différentes), donc la fonction si va se rallonger un peu... le message doit rappeler la masse max que l'on est en train de dépasser (par exemple pour AK 780 kg)
Tes remarques correspondent tout à fait à ce que j'avais (sans doute mal) exprimé : C'est après la saisie des données que l'alerte doit apparaitre. Par ailleurs la validation des données que j'avais mis en place ne marche que pour des valeurs saisies et non pas calculées et effectivement c'est à supprimer. Le problème du pop up c'est le mode de déclenchement, plus précisément dès que j'ai saisi les quantités carburant et que donc les masses sont calculées automatiquement en B20 et B22, l'alerte doit automatiquement apparaitre si B20 ou B22>780 pour AK pour que je modifie mon devis de poids (bagages et/ou carburant embarqué).
Merci de ton aide.
A+
C15
jero a écrit :
Salut C15, Je viens de télécharger ton classeur. Déjà, une première remarque (par rapport uniquement à nos échanges) : ce n'est pas après l'exécution d'une des macros qu'il faut afficher le message mais après la saisie des données (cellules en jaune). Avant d'aller plus loin ; est-ce qu'un affichage dans la cellule B20 suffirait ? Ce serait du genre (en B20) : =SI(OU(ET(DROITE(G5;2)="JC";B18-B19>1147);ET(DROITE(G5;2)="AK";B18-B19>780));"Attention...";B18-B19) Et tu enlèves la validation de données... Il resterait à modifier les formules des cellules C20,B22 et C22 (pour éviter l'affichage de #VALEUR! (fonction SI(ESTERREUR(.... Modifier également : Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("G5")) Is Nothing Then Range("A26,B26,C26,B12:B14").ClearContents Select Case Right(Range("G5"), 2) Case "JC" Macro_JC Case "AK" Macro_AK End Select End If End Sub A+
"C15" a écrit dans le message de news:
Bonjour,
Si cela peut vous aider... http://www.cijoint.fr/cjlink.php?file=cj201001/cijNKCvARi.xls
Merci de votre aide.
A+
C15
michdenis a écrit :
Merci... cela m'avait échappé !
Bonjour,
Merci de ces conseils.
Par contre je pense que pour simplifier les choses, il va falloir que je
revoie l'organisation de mon classeur avec un onglet par avion et les
données de base dans les mêmes cellules.
Merci encore.
A+
C15
jero a écrit :
Salut,
Worksheet_Calculate() : oui, ok.
Dans le cas de mes 10 autres avions est-ce qu'un select case serait plus
efficace que mes elseif ?
Oui, évidemment, et surtout plus lisible... (Select Case Right(Range("G5"),
2))
Je pense également que si tu as 12 avions, tu vas avoir 12 macros "XX" : en
paramétrant correctement (elles vont furieusement se ressembler sans doute),
tu pourrais allèger le code...
ça pourrait être du genre "
Macro_Avions(TypeAvion As String)
'Ici, les instructions identiques pour tous les types
....
....
'Ici, les instructions spécifiques en fonction du type
Select case TypeAvion
Case "JC"
Case "AK"
.....
.....
End Select
....
Tu appelles ta procédure par Macro_Avions(Right(Range("G5"), 2))
N'oublie pas non plus d'utiliser des variables plutot que des valeurs ("en
dur") : grand principe de base....
Par ex : PoidsMax
Select case TypeAvion
Case "JC"
PoidsMax47
Case "AK"
PoidsMaxx0 .....
.....
End Select
et dans ton message d'avertissement, tu utilises PoidsMax...
Si le PoidsMax change pour un type d'avion, tu n'auras qu'une fois à le
modifier
Voilà, voilà...
A+
"C15" <MefiezVousDesSpams@club-internet.fr> a écrit dans le message de news:
%23PLJq%23vjKHA.1536@TK2MSFTNGP06.phx.gbl...
Rebonsoir,
Voir le fichier joint :
http://www.cijoint.fr/cjlink.php?file=cj201001/cij1GgT9NC.xls
Avec votre aide à tous les 2 et en cherchant sur le net j'ai sans doute
trouvé la solution :
Private Sub Worksheet_Calculate()
If [B20] > 780 And Right(Range("G5"), 2) = "AK" Then
MsgBox "Vous avez dépassé la masse max autorisée au D/L (780 kg)",
vbOKOnly
ElseIf [B20] > 1157 And Right(Range("G5"), 2) = "JC" Then
MsgBox "Vous avez dépassé la masse max autorisée au D/L (1157 kg)",
vbOKOnly
End If
End Sub
Je saisis les poids des personnes à bord et des bagages.
Je saisis le carburant embarqué et au roulage.
La masse au D/L est calculée.
Si elle est >780 (pour AK) msgbox...
Teste pour me dire ce que tu en penses.
Dans le cas de mes 10 autres avions est-ce qu'un select case serait plus
efficace que mes elseif ?
Merci de votre aide.
A+
C15
C15 a écrit :
Bonsoir Jero,
Ta proposition n'est pas mal, mais pour moi un pop up (comme le message
de validation de données) est plus parlant, d'autant plus que la sécurité
est en jeu.
J'y émettrai plusieurs réserves :
c'est un fichier test pour 2 avions (dans mon club il y en a 12 avec
des limitations différentes), donc la fonction si va se rallonger un
peu...
le message doit rappeler la masse max que l'on est en train de
dépasser (par exemple pour AK 780 kg)
Tes remarques correspondent tout à fait à ce que j'avais (sans doute mal)
exprimé :
C'est après la saisie des données que l'alerte doit apparaitre.
Par ailleurs la validation des données que j'avais mis en place
ne marche que pour des valeurs saisies et non pas calculées et
effectivement c'est à supprimer.
Le problème du pop up c'est le mode de déclenchement, plus
précisément dès que j'ai saisi les quantités carburant et que donc les
masses sont calculées automatiquement en B20 et B22, l'alerte doit
automatiquement apparaitre si B20 ou B22>780 pour AK pour que je modifie
mon devis de poids (bagages et/ou carburant embarqué).
Merci de ton aide.
A+
C15
jero a écrit :
Salut C15,
Je viens de télécharger ton classeur.
Déjà, une première remarque (par rapport uniquement à nos échanges) : ce
n'est pas après l'exécution d'une des macros qu'il faut afficher le
message mais après la saisie des données (cellules en jaune).
Avant d'aller plus loin ; est-ce qu'un affichage dans la cellule B20
suffirait ?
Ce serait du genre (en B20) :
=SI(OU(ET(DROITE(G5;2)="JC";B18-B19>1147);ET(DROITE(G5;2)="AK";B18-B19>780));"Attention...";B18-B19)
Et tu enlèves la validation de données...
Il resterait à modifier les formules des cellules C20,B22 et C22 (pour
éviter l'affichage de #VALEUR! (fonction SI(ESTERREUR(....
Modifier également :
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("G5")) Is Nothing Then
Range("A26,B26,C26,B12:B14").ClearContents
Select Case Right(Range("G5"), 2)
Case "JC"
Macro_JC
Case "AK"
Macro_AK
End Select
End If
End Sub
A+
"C15" <MefiezVousDesSpams@club-internet.fr> a écrit dans le message de
news: eRFh6cpjKHA.4672@TK2MSFTNGP06.phx.gbl...
Bonjour,
Si cela peut vous aider...
http://www.cijoint.fr/cjlink.php?file=cj201001/cijNKCvARi.xls
Par contre je pense que pour simplifier les choses, il va falloir que je revoie l'organisation de mon classeur avec un onglet par avion et les données de base dans les mêmes cellules.
Merci encore.
A+
C15
jero a écrit :
Salut,
Worksheet_Calculate() : oui, ok. Dans le cas de mes 10 autres avions est-ce qu'un select case serait plus efficace que mes elseif ?
Oui, évidemment, et surtout plus lisible... (Select Case Right(Range("G5"), 2)) Je pense également que si tu as 12 avions, tu vas avoir 12 macros "XX" : en paramétrant correctement (elles vont furieusement se ressembler sans doute), tu pourrais allèger le code... ça pourrait être du genre " Macro_Avions(TypeAvion As String) 'Ici, les instructions identiques pour tous les types .... .... 'Ici, les instructions spécifiques en fonction du type Select case TypeAvion Case "JC" Case "AK" ..... ..... End Select .... Tu appelles ta procédure par Macro_Avions(Right(Range("G5"), 2)) N'oublie pas non plus d'utiliser des variables plutot que des valeurs ("en dur") : grand principe de base.... Par ex : PoidsMax Select case TypeAvion Case "JC" PoidsMax47 Case "AK" PoidsMaxx0 ..... ..... End Select et dans ton message d'avertissement, tu utilises PoidsMax... Si le PoidsMax change pour un type d'avion, tu n'auras qu'une fois à le modifier Voilà, voilà... A+ "C15" a écrit dans le message de news: %23PLJq%
Rebonsoir,
Voir le fichier joint : http://www.cijoint.fr/cjlink.php?file=cj201001/cij1GgT9NC.xls
Avec votre aide à tous les 2 et en cherchant sur le net j'ai sans doute trouvé la solution :
Private Sub Worksheet_Calculate()
If [B20] > 780 And Right(Range("G5"), 2) = "AK" Then MsgBox "Vous avez dépassé la masse max autorisée au D/L (780 kg)", vbOKOnly
ElseIf [B20] > 1157 And Right(Range("G5"), 2) = "JC" Then MsgBox "Vous avez dépassé la masse max autorisée au D/L (1157 kg)", vbOKOnly
End If
End Sub Je saisis les poids des personnes à bord et des bagages. Je saisis le carburant embarqué et au roulage. La masse au D/L est calculée. Si elle est >780 (pour AK) msgbox...
Teste pour me dire ce que tu en penses.
Dans le cas de mes 10 autres avions est-ce qu'un select case serait plus efficace que mes elseif ?
Merci de votre aide.
A+
C15
C15 a écrit :
Bonsoir Jero,
Ta proposition n'est pas mal, mais pour moi un pop up (comme le message de validation de données) est plus parlant, d'autant plus que la sécurité est en jeu. J'y émettrai plusieurs réserves : c'est un fichier test pour 2 avions (dans mon club il y en a 12 avec des limitations différentes), donc la fonction si va se rallonger un peu... le message doit rappeler la masse max que l'on est en train de dépasser (par exemple pour AK 780 kg)
Tes remarques correspondent tout à fait à ce que j'avais (sans doute mal) exprimé : C'est après la saisie des données que l'alerte doit apparaitre. Par ailleurs la validation des données que j'avais mis en place ne marche que pour des valeurs saisies et non pas calculées et effectivement c'est à supprimer. Le problème du pop up c'est le mode de déclenchement, plus précisément dès que j'ai saisi les quantités carburant et que donc les masses sont calculées automatiquement en B20 et B22, l'alerte doit automatiquement apparaitre si B20 ou B22>780 pour AK pour que je modifie mon devis de poids (bagages et/ou carburant embarqué).
Merci de ton aide.
A+
C15
jero a écrit :
Salut C15, Je viens de télécharger ton classeur. Déjà, une première remarque (par rapport uniquement à nos échanges) : ce n'est pas après l'exécution d'une des macros qu'il faut afficher le message mais après la saisie des données (cellules en jaune). Avant d'aller plus loin ; est-ce qu'un affichage dans la cellule B20 suffirait ? Ce serait du genre (en B20) : =SI(OU(ET(DROITE(G5;2)="JC";B18-B19>1147);ET(DROITE(G5;2)="AK";B18-B19>780));"Attention...";B18-B19) Et tu enlèves la validation de données... Il resterait à modifier les formules des cellules C20,B22 et C22 (pour éviter l'affichage de #VALEUR! (fonction SI(ESTERREUR(.... Modifier également : Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range("G5")) Is Nothing Then Range("A26,B26,C26,B12:B14").ClearContents Select Case Right(Range("G5"), 2) Case "JC" Macro_JC Case "AK" Macro_AK End Select End If End Sub A+
"C15" a écrit dans le message de news:
Bonjour,
Si cela peut vous aider... http://www.cijoint.fr/cjlink.php?file=cj201001/cijNKCvARi.xls