OVH Cloud OVH Cloud

vba-macro evenementielle

9 réponses
Avatar
Pierre.M
Bonsoir a tous,

Quelqu'un saurait-il m'aider pour ecrire les codes suivants:

1. Comment declencher une macro quand on coche une case a cocher, et
seulement quand on la coche (click() ne semble pas convenir...)?

2. Comment declencher une macro quand la valeur de A1 devient <1000?

Merci beaucoup.

Pierre

9 réponses

Avatar
lSteph
Bonsoir,
Si,si à cette condition:

Private Sub CheckBox1_Click()
If CheckBox1 Then MsgBox "mpfe"
End Sub

'Cordialement.

lSteph

Pierre.M avait énoncé :
Bonsoir a tous,

Quelqu'un saurait-il m'aider pour ecrire les codes suivants:

1. Comment declencher une macro quand on coche une case a cocher, et
seulement quand on la coche (click() ne semble pas convenir...)?

2. Comment declencher une macro quand la valeur de A1 devient <1000?

Merci beaucoup.

Pierre


--
- -

Avatar
Garette
Bonsoir,

Pour le changement de valeur dans une cellule :

Dim X
Private Sub Worksheet_Change(ByVal Target As Range)
If X <> Range("A1") And Range("A1") < 1000 Then MsgBox "- 1000"
X = Range("A1")
End Sub

Le message n'apparait que qd la valeur est changée.
Si on tape 2000 en A1 => pas de message
Si on tape 100 en A1 => message
Si on tape à nouveau 100 en A1 => pas message
Avatar
lSteph
Pour le 2 plusieurs Hypothèses
Si macro juste pour être alerté autant utiliser
Menu Format Mise En Forme Conditionnelle
sinon
est <1000 ou devient <1000

C'est pas non plus forcément le même événement:
par changement de la valeur (saisie)=> Change
ou a1 contient une formule => Calculate

Voici un exemple (est inférieur) et sur change
Dans le code de la feuille

Private Sub Worksheet_Change(ByVal Target As Range)
Dim isect As Range
Set isect = Intersect(Target, [a1])
If isect Is Nothing Then Exit Sub
If [a1] < 1000 Then MsgBox "mpfe"
End Sub

'lSteph


Le 30/10/2006, Pierre.M a supposé :
Bonsoir a tous,

Quelqu'un saurait-il m'aider pour ecrire les codes suivants:

1. Comment declencher une macro quand on coche une case a cocher, et
seulement quand on la coche (click() ne semble pas convenir...)?

2. Comment declencher une macro quand la valeur de A1 devient <1000?

Merci beaucoup.

Pierre


--
- -

Avatar
lSteph
Suite du 2

Cas A1 formule donc par calculate et devient<1000
(faut savoir ce qu'il en est avant)
donc ici exemple Feuil1 test à l'ouverture du classeur

'''''dans un module standard
Public tstA1 As Boolean

'''''dans thisworkbook
Private Sub Workbook_Open()
tstA1 = Feuil1.[a1] < 1000
End Sub

'''''dans le code de Feuil1
Private Sub Worksheet_Calculate()
If tstA1 Then
tstA1 = Feuil1.[a1] < 1000
Else
MsgBox "mpfe"
tstA1 = Feuil1.[a1] < 1000
End If
End Sub

'lSteph




Pierre.M a émis l'idée suivante :
Bonsoir a tous,

Quelqu'un saurait-il m'aider pour ecrire les codes suivants:

1. Comment declencher une macro quand on coche une case a cocher, et
seulement quand on la coche (click() ne semble pas convenir...)?

2. Comment declencher une macro quand la valeur de A1 devient <1000?

Merci beaucoup.

Pierre


--
- -

Avatar
Pierre.M
Merci a tous les 2 pour votre aide et surtout pour les explications qui
permettent de comprendre et surtout d'apprendre.

1. Je suppose que "if checkbox" veut dire "cliquer sur case a cocher",
alors comment on dirait "declicker"? Ca peut toujours servir de le
savoir, pour lancer un truc sur un declic ;-)

2. En fait l'idee etait la suivante:
A1= somme(B1:B10) et sur la meme feuille une case a cocher (CC).
J'aimerai lancer un Msgbox dans 2 conditions
- si A1<1000 et que je clique sur CC
- Si CC est deja cliquee et que A1 devient <1000
Dans tous les autres cas il ne se passe rien.

Je pensai faire ca avec 2 macros separees, mais du coup c'est peut-etre
faisable en une fois, non?
Pouvez-vous m'expliquer ce qu'on peut faire faire exactement a "calculate"?

Merci beaucoup pour la lecon.

Pierre
Avatar
lSteph
Bonjour Pierre.M,

1.
Checkbox1 renvoie vrai ou faux selon qu''elle se trouve cochée.

ainsi
if checkbox1 then msgbox "bonjour"
renverra le message bonjour à cette condition

2.


[a1] contient une formule ou une valeur?
Tu n'as pas précisé donc je suppose "devient" garde le sens de
l'hypothèse émise dans ma précédente proposition.
Selon le cas tu as différents différents exemples qui t'ont été donné
sur ce fil.
l'événement Worksheet_Change(ByVal Target As Range)
peut donc cibler (target) la modification directe d'une cellule ou
plusieurs cellules et conditioner l'execution d'une macro

Pouvez-vous m'expliquer ce qu'on peut faire faire exactement a "calculate"?



l'événement Worksheet_Calculate,sert à détecter un recalcul dans la
feuille, mais on peut tester par une variable préaalablement fixée
la modification d'une cellule ou plusieurs cellules et conditioner
l'execution d'une macro.

( hors propos: la méthode Calculate sert à recalculer lorsqu'on est en
mode sur ordre par exemple)

Cordialement.

lSteph

Pierre.M a utilisé son clavier pour écrire :
Merci a tous les 2 pour votre aide et surtout pour les explications qui
permettent de comprendre et surtout d'apprendre.

1. Je suppose que "if checkbox" veut dire "cliquer sur case a cocher", alors
comment on dirait "declicker"? Ca peut toujours servir de le savoir, pour
lancer un truc sur un declic ;-)

2. En fait l'idee etait la suivante:
A1= somme(B1:B10) et sur la meme feuille une case a cocher (CC).
J'aimerai lancer un Msgbox dans 2 conditions
- si A1<1000 et que je clique sur CC
- Si CC est deja cliquee et que A1 devient <1000
Dans tous les autres cas il ne se passe rien.

Je pensai faire ca avec 2 macros separees, mais du coup c'est peut-etre
faisable en une fois, non?
Pouvez-vous m'expliquer ce qu'on peut faire faire exactement a "calculate"?

Merci beaucoup pour la lecon.

Pierre


--
- -

Avatar
Pierre.M
Merci beaucoup pour toutes ces explications qui me font bien progresser...


[a1] contient une formule ou une valeur?
Tu n'as pas précisé donc je suppose "devient" garde le sens de
l'hypothèse émise dans ma précédente proposition.
Selon le cas tu as différents différents exemples qui t'ont été donné
sur ce fil.
l'événement Worksheet_Change(ByVal Target As Range)
peut donc cibler (target) la modification directe d'une cellule ou
plusieurs cellules et conditioner l'execution d'une macro


[A1] contient une formule (=SOMME(B1:B10)). En fonction de la
modification des valeurs de B1:B10, A1 peut donc etre ou devenir <1000.

Je dois donc utiliser Calculate.

Et si A1 contenait une valeur que je modifie "a la main" alors
j'utiliserais Change.

C'est bien ca qu'il fallait retenir? Alors je devrais m'en sortir.

Merci encore et bonne journee.

Pierre

Avatar
lSteph
Re,
oui, j'en profite pour rectifier:

'''''dans un module standard
Option Explicit
Public tstA1 As Boolean

'''''dans thisworkbook
Option Explicit
Private Sub Workbook_Open()
tstA1 = Feuil1.[a1] < 1000
End Sub

'''''dans le code de Feuil1
Option Explicit
Private Sub Worksheet_Calculate()
If tstA1 Then
tstA1 = Feuil1.[a1] < 1000
Else
If [a1] < 1000 Then
MsgBox "mpfe"
tstA1 = Feuil1.[a1] < 1000
End If
End If
End Sub

'Cordialement.
'lSteph


Merci beaucoup pour toutes ces explications qui me font bien progresser...


[a1] contient une formule ou une valeur?
Tu n'as pas précisé donc je suppose "devient" garde le sens de
l'hypothèse émise dans ma précédente proposition.
Selon le cas tu as différents différents exemples qui t'ont ét é donné
sur ce fil.
l'événement Worksheet_Change(ByVal Target As Range)
peut donc cibler (target) la modification directe d'une cellule ou
plusieurs cellules et conditioner l'execution d'une macro


[A1] contient une formule (=SOMME(B1:B10)). En fonction de la
modification des valeurs de B1:B10, A1 peut donc etre ou devenir <1000.

Je dois donc utiliser Calculate.

Et si A1 contenait une valeur que je modifie "a la main" alors
j'utiliserais Change.

C'est bien ca qu'il fallait retenir? Alors je devrais m'en sortir.

Merci encore et bonne journee.

Pierre



Avatar
Pierre.M
La solution du probleme pose est bien-sur appreciable, mais savoir
donner les explications necessaires pour faire avancer la connaissance
de l'autre l'est bien plus encore.

Pour ca, merci infiniment. Bon apres-midi.

Pierre