Bonjour,
est-il possible de suspendre un code vba avec la procéduredurant un certain temps, sans passer parCode:Application.EnableEvents = False (...) Application.EnableEvents = True
?Code:Application.Wait
Merci beaucoup
Version imprimable
Bonjour,
est-il possible de suspendre un code vba avec la procéduredurant un certain temps, sans passer parCode:Application.EnableEvents = False (...) Application.EnableEvents = True
?Code:Application.Wait
Merci beaucoup
Bonjour,
ça n'arrête pas une procédure, ça désactive uniquement le déclenchement des evènements
exemple : on l'utilise quand on supprime une feuille pour ne pas avoir le pop up de confirmation
pourquoi tu ne veux pas utiliser .wait ?
tu peux te rabattre sur l'API Sleep
à mettre en début d'un module standard
et ensuite on l'utilise comme çaCode:
1
2 Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long)
Code:
1
2
3
4
5
6
7 ' du code ' la macro va s'arrêter 1000 milisecondes = 1 seconde Sleep 1000 ' du code
En fait, j'ai un classeur qui me décompte le temps qui prend pas mal de ressources et peut me poser des difficultés quand je fais tourner d'autres classeurs, je cherchais donc à suspendre "l'horloge" excel que je me suis faite et ce pour un temps donner le temps de faire autre chose mais la seule solution trouvée est le wait qui me fige complètement excel. Je travail sous Office Standard 2013 je crois et j'ai tenté d'ouvrir des workbooks différents sans succès et mon "horloge" tourne sous ThisWorkbook pour se délencher à l'ouverture du fichier excel.
Je ne sais pas si c'est vraiment plus clair.....
et stopper la macro pour la relancer après ??
C'est ce que je voulais faire avec monpuisque ma macro s'applique avec unCode:Application.EnableEvents = False
(Code:Code:Private Sub Workbook_Open()
)Code:
1
2
3
4
5 Sub majHeure() ThisWorkbook.Sheets("feuil1").[A1] = Now temps = Now + TimeValue("00:00:1") Application.OnTime temps, "majHeure" End Sub
Sinon je suis preneur, surtout si on peut automatiser le stop / restart
Je vais aussi essayer le "Sleep"
on peut bricoler un systeme D en attendant une réponse plus jolie
1) on arrête la macro si une cellule n'est pas vide
Code:
1
2
3
4
5
6
7
8
9
10
11
12 Sub majHeure() ThisWorkbook.Sheets("feuil1").[A1] = Now temps = Now + TimeValue("00:00:1") If ThisWorkbook.Sheets("feuil1").[A2] = "" Then Application.OnTime temps, "majHeure" Else MsgBox "stopé" End If End Sub
2) on redémarre la macro quand la cellule test est effacée
à coller directement dans le module de la feuille
j'ai testé rapidement, et sous couvert d'adaptation, ça fonctionneCode:
1
2
3
4
5
6
7
8
9
10
11 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Not Intersect(Target, [A2]) Is Nothing Then If [A2] = "" Then MsgBox "reprise" majHeure End If End If End Sub
Je teste cette solution aussi dès que j'ai une seconde, certainement plus tard dans la journée
Comment j'intègre, comme une sub à part entière? Je l'ai intégré après Sub LANCEURAUCHOIX()et VBA me fait remarquer que je ne peux rien écrire après End Sub????Code:Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Au vu des précisions que tu as apporté dans le message où tu présentes une partie de tes codes, je ne pense pas que Sleep soit adapté
la déclaration doit être positionnée tout en haut d'un module standard :
- avant toute Sub ou Function
- de ma même manière que quand on applique des options comme "Option Explicit"