Rico 95
Messages postés18Date d'inscriptionmardi 13 mars 2007StatutMembreDernière intervention21 mai 2008
-
27 mars 2007 à 21:31
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 2011
-
28 mars 2007 à 23:50
Bonjour,
Je recherche un moyen pour lancer une fonction dans une macro sous VBA en tâche de fond.
Concrètement cette fonction aurai pour tâche de regarder périodiquement (à intervals régulier par exemple avec un timer) si des cellules d'une feuille de calcul Excel ont changées (modifiées par l'utilisateur), puis de lancer d'autres fonctions le cas échéant.
Pour moi la création du timer n'est pas un problème, c'est le fait de faire et de lancer la tâche de fond quii est le problème.
Rico 95
Messages postés18Date d'inscriptionmardi 13 mars 2007StatutMembreDernière intervention21 mai 2008 28 mars 2007 à 20:08
En fait ma fonction de tâche de fond sera sensée appeler des fonctions qui elles sont susceptibles de créer des changements de Sheet ou de cellule.
Je recherche plutôt une méthode indépendante des évènements classiques (click, sheet change ...)
J'ai essayé le principe suivant:
Dans une procédure:
Balayage de toutes mes fonctions
Entrée dans une boucle d'attente avec priorité laissée à d'autres processus à l'aide de la fonction "DoEvents"
A la sortie de la boucle on repart dans un balayage des fonctions.
Ainsi je balaye à la vitesse que je veux, mais dès que je modifie une cellule directement au clavier (manuellement), la procédure principale s'arrête (sans plantage) et il semble que ce soit dû à cette fonction "DoEvents"
Est ce le bon principe et que peut on faire pour faire repartir la procédure principale sans passer par les événements classiques ?
Dans ce que j'ai pu trouvé autour de moi, j'ai vu apparaître le contrôle "Active X" ou il semblerai qu'un contrôle Active X EXE puisse lancer une procédure à intervalles réguliers ....
Est ce que c'est plutôt cela qu'il faut faire ?
Y a t il une méthode détaillée ? Car je n'en trouve pas, même sur vbfrance.
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 28 mars 2007 à 23:00
Difficile à dire sans connaître le programme et les actions effectuées par les macros...
Je pense que ce pourrait être une bonne idée d'utiliser un 2e programme Excel avec un Timer (ou une application quelconque externe) qui regarde périodiquement s'il y a eu changement. Si oui, ce 2e programme pourrait copier les données "dans lui-même" ou ailleurs et effectuer les manipulations nécessaires.
Quand la session est terminée, soit il se renomme sous le nom de l'autre, soit il copie les données modifiées dans l'autre... et c'est là que, sans connaître ce que fait le programme à l'origine, il est difficile de trouver une solution...
L'événement Change de la feuille peut tout de même être utile pour déterminer s'il y a eu changement. Si une cellule est modifiée, tu inscris une valeur dans une cellule. Le 2e programme n'a qu'à vérifier cette cellule, démarrer le processus s'il y a lieu et l'effacer lorsqu'il a terminé.
Quelque chose comme ça
Private Sub Worksheet_Change(ByVal Target As Range)
'En autant que Z1 ne soit jamais utilisé...ou que la cellule soit protégée
If Target.Address <> "$Z$1" Then Range("Z1") = "OUI"
End Sub
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 28 mars 2007 à 23:50
Si ce n'est que de la surveillance de cellules (et suite à cela des appels de fonctions / procédures), je suis à 200% d'accord avec Renfield, c'est l'évènement adéquat.
@++
<hr width="100%" size="2" />
--Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
/DIV>