bonsoir
je souhaiterai qu'une fois un fichier excel ouvert une macro s'execute automatiquement toutes les minutes pendant 9 heures
avez vous un code a me proposer ?
merci
Version imprimable
bonsoir
je souhaiterai qu'une fois un fichier excel ouvert une macro s'execute automatiquement toutes les minutes pendant 9 heures
avez vous un code a me proposer ?
merci
Tu disCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 Public Chrono As Boolean Sub Workbook_Open() Dim HFin HFin = Now + TimeValue("09:00:00") 'Délai fixé à 9 heures Chrono = True Call FaitTourner Do Chrono = Now < HFin DoEvents Loop While Chrono 'Arrête si temps est dépassé End Sub Sub FaitTourner() 'Relance la pendule (mise à jour de OnTime) toutes les minutes If Chrono Then Application.OnTime Now + TimeValue("00:01:00"), "FaitTourner" Call TaMacro '*********** End Sub
A+
cela ne semble pas fonctionner
j ai deux trois question
la macroa partir du moment que je fais une macro portant se "nom" elle va s'executer des que j'ouvre mon fichier ?Code:Sub Workbook_Open()
je ne comprends pas bien cette ligne
une fois que j'appelle ma macro ne faut il pas dans mamacro rapeller fait trouner ?Code:Chrono = Now < HFin
Déjà, pour tester, réduits les délais. Chez moi, ces macros fonctionnent. J'ai fait les tests dur une durée d'une minute, avec 5 secondes entre chaque appel.
Pour tester, fais ça
Quant à Sub Workbook_Open(), tu la places dans ThisWorkbook pour que la macro se déclenche à l'ouverture du classeur. Si tu veux la lancer depuis un bouton, rebaptise-la d'un autre nom et place-la dans un module standardCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 Public Chrono As Boolean Sub Workbook_Open() Dim HFin HFin = Now + TimeValue("00:00:30") 'Délai fixé à 9 heures Chrono = True Call FaitTourner Do Chrono = Now < HFin DoEvents Loop While Chrono 'Arrête si temps est dépassé End Sub Sub FaitTourner() 'Relance la pendule (mise à jour de OnTime) toutes les minutes If Chrono Then Application.OnTime Now + TimeValue("00:00:05"), "FaitTourner" Call TaMacro '*********** End Sub Sub TaMacro() Msgbox "Coucou !" End sub
A+
Si tu as toujours un pb de fonctionnement, tu dis, je te donnerai une solution. C'est peut-être un pb de vitesse de Mµ (?)
ok je n avais pas place workbook_open dans worksheet
ca semble marché cependant j ai maintenant un souci dans ma macro
la voici
j ai le messageCode:
1
2
3
4
5
6
7
8
9
10
11
12
13 sub var() Range("M1:M15").Select Selection.ClearContents Range("N1:N15").Select Selection.ClearContents For i = 3 To 15 If Range("G" & i & "").Value < 0 Then Range("M" & i & "").Value = "BAISSE": _ Range("M" & i & "").Select: Selection.Font.ColorIndex = 3 Else: Range _ ("M" & i & "").Value = "HAUSSE": Range("M" & i & "").Select: Selection.Font.ColorIndex = 4 If Range("G" & i & "").Value = 0 Then Range("M" & i & "").Value = "EGAL": Range("M" & i & "").Select: Selection.Font.ColorIndex = 1 Next i end sub
alors que si lance ma macro a partir d'un bouton elle fonctionneCode:
1
2
3 incompatibilite de type If Range("G" & i & "").Value < 0
ok j ai trouve j avais un #NA dans ma cellule
merci encore pour ton aide
a+
Et pourremplace parCitation:
If Range("G" & i & "").Value < 0
A+Code:If Range("G" & i).Value < 0
je te reviens sur ce sujet
tu disais que tu avais une soluce pour probleme de vitesse ?
en fait ca fais pas mal mouliné mon processeur
Non, ce dont je voulais parler était un pb si le Mµ est plus rapide que le mien (2,4MHz) le DoEvents aurait pu ne pas suffire et le premier appel à FaitTouner() ne pas se faire.
Pour accélérer ton code ? Je regarde... Déjà, faudrait supprimer tous les select, ajouter
au début et remettre à true à la fin.Code:
1
2 sub var() Application.screenUpdating = false
Et évite de faire du basic, on n'a pas de pb de place... (remplace tes ":" par un retour à la ligne, c'est plus facile de corriger ou de relire ;) )
Ça devrait donner un truc qui ressemble à ça
A+Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 Application.screenUpdating = false Range("M1:M15").ClearContents Range("N1:N15").ClearContents For i = 3 To 15 If Range("G" & i & "").Value < 0 Then Range("M" & i & "").Value = "BAISSE" Range("M" & i & "").Font.ColorIndex = 3 Else Range("M" & i & "").Value = "HAUSSE" Range("M" & i & "").Font.ColorIndex = 4 'là je ne sais même pas s'il y a un endif (...) If Range("G" & i & "").Value = 0 Then Range("M" & i & "").Value = "EGAL" Range("M" & i & "").Font.ColorIndex = 1 endif Endif 'Tu corrige s'il n'est pas là ;) Next i Application.screenUpdating = True
ok merci pour ces conseils