[ASP -> VBA]Lancer une macro en fonction de la valeur d'une cellule

Charlesherv - 5 juin 2013 à 11:50
jordane45 Messages postés 38136 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 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

5 réponses

claude-georges Messages postés 6 Date d'inscription vendredi 9 août 2013 Statut Membre Dernière intervention 23 novembre 2013
9 août 2013 à 22:04
bonjour,
Avant de répondre, je voudrais savoir:
- est-ce toujours utile ?
- dans quelle feuille se trouve la cellule J42 ?
à +
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
9 août 2013 à 22:43
Bonjour, claude-georges,
"Est-ce toujours utile ?"
Euh ...ouais ouais ...
Pour si peu ... et si imprécis (même pas pensé au = 0.3 !)...
Alors ......
0
220plombier Messages postés 7 Date d'inscription jeudi 19 septembre 2013 Statut Membre Derniè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+
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
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.
0
220plombier Messages postés 7 Date d'inscription jeudi 19 septembre 2013 Statut Membre Derniè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
0
claude-georges Messages postés 6 Date d'inscription vendredi 9 août 2013 Statut Membre Dernière intervention 23 novembre 2013
22 nov. 2013 à 07:34
Bonjour,
pour un débutant, ceci est plus simple et fonctionne si la cellule J34 est remplie au départ du programme
Désolé pour le retard


Sub Programme_qui_teste_tout()

MsgBox ("On va tester cas >0.3")
Sheets("feuil1").Range("J42").Value = 0.8
Programme_principal

MsgBox ("On va tester cas < 0.3")

Sheets("feuil1").Range("J42").Value = 0.1
Programme_principal

MsgBox ("On va tester cas = 0.3")

Sheets("feuil1").Range("J42").Value = 0.3
Programme_principal




End Sub

Sub Programme_principal()


'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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jordane45 Messages postés 38136 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 avril 2024 344
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


0
Rejoignez-nous