[ASP -> VBA]Lancer une macro en fonction de la valeur d'une cellule
Charlesherv
-
5 juin 2013 à 11:50
jordane45
Messages postés38136Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention16 avril 2024
-
22 nov. 2013 à 09:42
Bonjour à tous,
Etant novice en VBA, j'ai réellement besoin de votre aide pour la création d'un fichier excel nécessaire pour ma thèse.
Je vous explique le problème:
j'ai sur une feuille "Préparation PCA" un bouton qui affiche un msgbox crée comme cela:
Sub débitfaible()
'MsgBox Oui + Non
Select Case MsgBox("le débit doit être > 0,3ml/h si administration en IV. Voulez-vous augmenter le débit et donc diluer la préparation?", vbYesNo, "Débit trop faible")
Case vbYes
'Sommaire Macro
Sheets("Préparation PCA 2").Select
Case vbNo
'Sommaire Macro
Sheets("Acceuil").Select
End Select
End Sub
jusque là tout fonctionne!
Problème:
J'aurai voulu que ce msgbox n’apparaisse que si la valeur contenue dans cellule J42 est en effet < à 0.3.
Si J42 > 0.3 je voudrai que ce même bouton renvoie sur autre feuille 'Préparation finale"
En résumé:
-Si J42 > 0.3 renvoie sur "Préparation finale"
-Si J42 < 0.3 alors msgbox précédent
Tout cela en cliquant sur le même bouton.
Je suis vraiment débutant donc j'ai besoin de détails s'il vous plait.
Cordialement,
Charles
A voir également:
[ASP -> VBA]Lancer une macro en fonction de la valeur d'une cellule
220plombier
Messages postés7Date d'inscriptionjeudi 19 septembre 2013StatutMembreDernière intervention 6 octobre 2014 19 sept. 2013 à 11:52
Bonjour,
Comment est initialisée la cellule J42 ? (macro, formule Excel, ...)
Dans tous les cas, une callback de type Worksheet_Change dans la feuille où se trouve la cellule J42, commençant par tester les champs Row et Column de l'objet Target pour rendre immédiatement la main s'il s'agit d'une autre cellule, puis en testant la valeur pour effectuer le traitement souhaité devrait convenir, si la feuille n'est pas trop sollicitée par ailleurs, ce qui provoquerait alors trop d'appels à cette callback.
Remarque : il y a une branche du forum spécialement conçue pour les problèmes VBA
A+
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018211 19 sept. 2013 à 12:02
"Dans tous les cas, une callback de type Worksheet_Change dans la feuille où se trouve la cellule J42"
Non. L'évènement Worksheet_Change ne sera pas déclenché si le contenu de la cellule J42 est le résultat d'une formule. les formules sont exécutée dans un fil distinct et ne déclenchent aucun évènement.
220plombier
Messages postés7Date d'inscriptionjeudi 19 septembre 2013StatutMembreDernière intervention 6 octobre 2014 19 sept. 2013 à 13:20
Tu as raison, Ucfoutu, j'avais été un peu rapide. Il est cependant possible de détecter le changement de valeur avec Worksheet_Calculate
'En résumé:
'-Si J42 > 0.3 renvoie sur "Préparation finale"
'-Si J42 < 0.3 alors msgbox précédent
'-Si J42 = 0.3 alors msgbox "Cas non prévu : J42 = 0.3 "
'Ce programme fonctionne si il existe 3 feuilles nommées :
'feuil1
'Préparation PCA 2
'Accueil
'! Le programme suivant suppose que LE DEBIT EN J42 EST DANS LA FEUILLE 'feuill1'
Dim X
X = Sheets("feuil1").Range("J42").Value
If X < 0.3 Then debitfaible
MsgBox ("le reste du code devrait être placé ici")
End Sub
Sub debitfaible() ' !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!EVITRE LES ACCENTS debitfaible AU LIEU DE d2bitfaible
'MsgBox Oui + Non
Select Case MsgBox("le débit doit être > 0,3ml/h si administration en IV. Voulez-vous augmenter le débit et donc diluer la préparation?", vbYesNo, "Débit trop faible")
Case vbYes
'Sommaire Macro
Sheets("Préparation PCA 2").Select
Case vbNo
'Sommaire Macro
Sheets("Accueil").Select
End Select
End Sub
Vous n’avez pas trouvé la réponse que vous recherchez ?
jordane45
Messages postés38136Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention16 avril 2024344 22 nov. 2013 à 09:42
Bonjour,
@Claude-Georges, il me semble que tu es un peu hors sujet.
Il ne souhaites pas une macro qui lance tous les tests.. mais juste de pouvoir lancer des actions via un bouton en fonction de la valeur d'une cellule précise.
-Si J42 > 0.3 renvoie sur "Préparation finale"
-Si J42 < 0.3 alors msgbox précédent
Tout cela en cliquant sur le même bouton.
PS: merci de d'utiliser la coloration syntaxique lorsque tu postes du code.
Sub Bouton1_Cliquer() ValJ42 = Sheets(1).Range("J42").Value Select Case ValJ42 Case Is > 0.3 'renvoie sur "Préparation finale" Sheets("Préparation finale").Activate Case Is < 0.3 Call débitfaible Case Else Debug.Print "cas non prévu" End Select End Sub