OVH Cloud OVH Cloud

comment lancer avec un bouton differentes macros suivant condition

5 réponses
Avatar
John-Pet
Salut à tous

dans excel j'ai deux macro
M1 et M2

j'ai un bouton qui lance suivant le cas M1 ou M2

si le bouton n'as pas encore était validé dans l'heure, a la premiere
validation cela execute M1
la macro M1 ne peux se lancer qu'une seule et unique fois par heure
sinon si cette macro a deja était lancée dans l'heure en cours cela
lance M2
et cela pour chaque heure

comment faire ?

merci

JP

--
Ceci est une signature automatique de MesNews.
Site : http://www.mesnews.net

5 réponses

Avatar
LSteph
Bonjour JP,
Peut-être cet exemple :
'************************
Public lastuse
'***
Private Sub commandbutton1_click()

Static Dstep
If IsEmpty(lastuse) Then lastuse = Timer
Dstep = Timer - lastuse

If Dstep > 3600 Then
MsgBox lastuse & " " & Dstep
Call mcr1
lastuse = Timer
Set Dstep = Nothing
Else
MsgBox lastuse & " " & Dstep
Call mcr2

End If

End Sub
'***
Sub mcr1()
MsgBox "execution de mcr1"
End Sub
'***
Sub mcr2()
MsgBox "execution de mcr2"

End Sub
'**************************

'lSteph

"John-Pet" a écrit dans le message de news:

Salut à tous

dans excel j'ai deux macro
M1 et M2

j'ai un bouton qui lance suivant le cas M1 ou M2

si le bouton n'as pas encore était validé dans l'heure, a la premiere
validation cela execute M1
la macro M1 ne peux se lancer qu'une seule et unique fois par heure sinon
si cette macro a deja était lancée dans l'heure en cours cela lance M2
et cela pour chaque heure

comment faire ?

merci

JP

--
Ceci est une signature automatique de MesNews.
Site : http://www.mesnews.net



Avatar
papou
Bonjour
Une solution pourrait consister à tenir un historique de l'exécution de
chaque macro sur une feuille de ton classeur.
A chaque exécution de tes macros, tu pourrais inscrire sur cette feuille
l'heure d'exécution dans une colonne différente (ex : M1 en colonne A et M2
en colonne B)
Public LaDiff As Long
Public DerniereM1 As Long
Public DerniereM2 As Long
Public Sub M1()
Feuil2.Range("A65536").End(xlUp)(2) = Format(Now, "HH:MM")
MsgBox "C'est M1"
End Sub
Public Sub M2()
Feuil2.Range("B65536").End(xlUp)(2) = Format(Now, "HH:MM")
MsgBox "C'est M2"
End Sub
Puis d'aller avant de lancer quoi que ce soit, vérifier dans cette feuille
quand a eut lieu la dernière exécution en récupérant le numéro de la
dernière ligne.
Donc quelque chose dans ce goût-là :

Private Sub CommandButton1_Click()
DerniereM1 = Feuil2.Range("A65536").End(xlUp).Row
DerniereM2 = Feuil2.Range("B65536").End(xlUp).Row
Select Case DerniereM1 - DerniereM2
Case 0
M1
Case Is > 0
M2
End Select
End Sub

Après il faudrait intégrer un contrôle quant à l'heure de l'exécution, mais
pour ça je te laisse chercher un peu ;-)

Cordialement
Pascal



"John-Pet" a écrit dans le message de news:

Salut à tous

dans excel j'ai deux macro
M1 et M2

j'ai un bouton qui lance suivant le cas M1 ou M2

si le bouton n'as pas encore était validé dans l'heure, a la premiere
validation cela execute M1
la macro M1 ne peux se lancer qu'une seule et unique fois par heure sinon
si cette macro a deja était lancée dans l'heure en cours cela lance M2
et cela pour chaque heure

comment faire ?

merci

JP

--
Ceci est une signature automatique de MesNews.
Site : http://www.mesnews.net



Avatar
John-Pet
Merci à vous deux pour vos réponses, je suis donc passé par un autre
chemin car la premiere solution me donnait toujours comme réponse
execution de mcr2 , je me suis un peu inspiré de la deuxieme avec une
date en clair sur la feuille

Private Sub commandbutton1_click()
date_actu = Range("a1").Value
heure = Hour(Time)
heure1 = heure + 1
If date_actu < (heure * 1 / 24) Or date_actu > (heure1 * 1 / 24) Then
Call mcr1
Else
Call mcr2
End If
End Sub


Sub mcr1()
Range("A1").Value = Time
MsgBox "execution de mcr1"
End Sub


Sub mcr2()
Range("A1").Value = Time
MsgBox "execution de mcr2"

End Sub


merci encore

JP

--
Ceci est une signature automatique de MesNews.
Site : http://www.mesnews.net
Avatar
LSteph
Bonjour,
chemin car la premiere solution me donnait toujours comme réponse
execution de mcr2 ,
c'est normal pendant 3600 secondes , tu avais demandé un intervalle d'une

heure
Il suffit de règler à 1 ou 2 au lieu de3600
pour voir que cela fonctionne.

;-)
lSteph

"John-Pet" a écrit dans le message de news:

Merci à vous deux pour vos réponses, je suis donc passé par un autre
chemin car la premiere solution me donnait toujours comme réponse
execution de mcr2 , je me suis un peu inspiré de la deuxieme avec une date
en clair sur la feuille

Private Sub commandbutton1_click()
date_actu = Range("a1").Value
heure = Hour(Time)
heure1 = heure + 1
If date_actu < (heure * 1 / 24) Or date_actu > (heure1 * 1 / 24) Then
Call mcr1
Else
Call mcr2
End If
End Sub


Sub mcr1()
Range("A1").Value = Time
MsgBox "execution de mcr1"
End Sub


Sub mcr2()
Range("A1").Value = Time
MsgBox "execution de mcr2"

End Sub


merci encore

JP

--
Ceci est une signature automatique de MesNews.
Site : http://www.mesnews.net



Avatar
LSteph
Re, bonjour,
et oupss..autant pour moi ce que je t'ai donné après plusieurs test va
à ceci près qu'il fallait commencer par executer une 1ère fois mcr1
donc je corrige (ici avec délai de 10 secondes)
'************************
Public lastuse
'***
Private Sub commandbutton1_click()

Static Dstep
If IsEmpty(lastuse) Then
lastuse = Timer
Call mcr1
End If

Dstep = Timer - lastuse

If Dstep > 10 Then
MsgBox lastuse & " " & Dstep
Call mcr1
lastuse = Timer
Set Dstep = Nothing
Else
MsgBox lastuse & " " & Dstep
Call mcr2

End If

End Sub
'***
Sub mcr1()
MsgBox "execution de mcr1"
End Sub
'***
Sub mcr2()
MsgBox "execution de mcr2"

End Sub
'**************************
'lsteph

"John-Pet" a écrit dans le message de news:

Merci à vous deux pour vos réponses, je suis donc passé par un autre
chemin car la premiere solution me donnait toujours comme réponse
execution de mcr2 , je me suis un peu inspiré de la deuxieme avec une date
en clair sur la feuille

Private Sub commandbutton1_click()
date_actu = Range("a1").Value
heure = Hour(Time)
heure1 = heure + 1
If date_actu < (heure * 1 / 24) Or date_actu > (heure1 * 1 / 24) Then
Call mcr1
Else
Call mcr2
End If
End Sub


Sub mcr1()
Range("A1").Value = Time
MsgBox "execution de mcr1"
End Sub


Sub mcr2()
Range("A1").Value = Time
MsgBox "execution de mcr2"

End Sub


merci encore

JP

--
Ceci est une signature automatique de MesNews.
Site : http://www.mesnews.net