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

Signaler
-
Messages postés
30498
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
5 décembre 2020
-
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

Messages postés
6
Date d'inscription
vendredi 9 août 2013
Statut
Membre
Dernière intervention
23 novembre 2013

bonjour,
Avant de répondre, je voudrais savoir:
- est-ce toujours utile ?
- dans quelle feuille se trouve la cellule J42 ?
à +
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
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 ......
Messages postés
7
Date d'inscription
jeudi 19 septembre 2013
Statut
Membre
Dernière intervention
6 octobre 2014

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+
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
"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.
Messages postés
7
Date d'inscription
jeudi 19 septembre 2013
Statut
Membre
Dernière intervention
6 octobre 2014

Tu as raison, Ucfoutu, j'avais été un peu rapide. Il est cependant possible de détecter le changement de valeur avec Worksheet_Calculate
Messages postés
6
Date d'inscription
vendredi 9 août 2013
Statut
Membre
Dernière intervention
23 novembre 2013

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
Messages postés
30498
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
5 décembre 2020
338
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