OVH Cloud OVH Cloud

ScrollBar et réactualisation d'une feuille

6 réponses
Avatar
Nicolas B.
Bonjour à tous,

Dans une feuille, j'utilise des ScrollBar qui commandent une macro, laquelle
modifie des données sur la feuille.
Le problème est que lorsque je déplace le bouton de la ScrollBar, ma feuille
se réactualise à chaque mouvement de la souris, et la feuille se met à
clignoter désagréablement. Pour remédier à cela, j'aimerais donc que la
feuille ne puisse s'actualiser que toutes les secondes, mais je n'y arrive
pas :-(
J'ai cherché du côté de Wait, ou de OnTime, mais je reste coincé.


Merci de votre aide.

--
Nicolas B.

Adresse @adresse.bidon.com invalide,
E-mail : www.cerbermail.com/?gAAILfkPsC

6 réponses

Avatar
Jean-François Aubert
salut Nicolas,

Est-ce qu'un

Application .Calculation = xlManual

au début de la macro

et un

Application .Calculation = xlAutomatic

à la fin ferait l'affaire ?
--
Amicalement

Jean-François Aubert
{Vaudois de la Côte Lémanique}


"Nicolas B." a écrit dans le message de
news:
Bonjour à tous,

Dans une feuille, j'utilise des ScrollBar qui commandent une macro, laquelle
modifie des données sur la feuille.
Le problème est que lorsque je déplace le bouton de la ScrollBar, ma feuille
se réactualise à chaque mouvement de la souris, et la feuille se met à
clignoter désagréablement. Pour remédier à cela, j'aimerais donc que la
feuille ne puisse s'actualiser que toutes les secondes, mais je n'y arrive
pas :-(
J'ai cherché du côté de Wait, ou de OnTime, mais je reste coincé.


Merci de votre aide.

--
Nicolas B.

Adresse @adresse.bidon.com invalide,
E-mail : www.cerbermail.com/?gAAILfkPsC




Avatar
Nicolas B.
Salut Jean-François,

Malheureusement, ce n'est pas ce que je cherche. Ce ne sont pas des formules
qui ne doivent pas être actualisées, mais la feuille entière (contenu des
cellules, mises en forme...).

Merci quand même pour ton aide.

--
Nicolas B.

Adresse @adresse.bidon.com invalide,
E-mail : www.cerbermail.com/?gAAILfkPsC


Jean-François Aubert wrote:
salut Nicolas,

Est-ce qu'un

Application .Calculation = xlManual

au début de la macro

et un

Application .Calculation = xlAutomatic

à la fin ferait l'affaire ?

"Nicolas B." a écrit dans le
message de news:
Bonjour à tous,

Dans une feuille, j'utilise des ScrollBar qui commandent une macro,
laquelle modifie des données sur la feuille.
Le problème est que lorsque je déplace le bouton de la ScrollBar, ma
feuille se réactualise à chaque mouvement de la souris, et la
feuille se met à clignoter désagréablement. Pour remédier à cela,
j'aimerais donc que la feuille ne puisse s'actualiser que toutes les
secondes, mais je n'y arrive pas :-(
J'ai cherché du côté de Wait, ou de OnTime, mais je reste coincé.


Merci de votre aide.

--
Nicolas B.

Adresse @adresse.bidon.com invalide,
E-mail : www.cerbermail.com/?gAAILfkPsC




Avatar
Hervé
SAlut Nicolas,

Application.ScreenUpdating = False
...
Application.ScreenUpdating = True

Hervé.

"Nicolas B." a écrit dans le message news:

Salut Jean-François,

Malheureusement, ce n'est pas ce que je cherche. Ce ne sont pas des
formules

qui ne doivent pas être actualisées, mais la feuille entière (contenu des
cellules, mises en forme...).

Merci quand même pour ton aide.

--
Nicolas B.

Adresse @adresse.bidon.com invalide,
E-mail : www.cerbermail.com/?gAAILfkPsC


Jean-François Aubert wrote:
salut Nicolas,

Est-ce qu'un

Application .Calculation = xlManual

au début de la macro

et un

Application .Calculation = xlAutomatic

à la fin ferait l'affaire ?

"Nicolas B." a écrit dans le
message de news:
Bonjour à tous,

Dans une feuille, j'utilise des ScrollBar qui commandent une macro,
laquelle modifie des données sur la feuille.
Le problème est que lorsque je déplace le bouton de la ScrollBar, ma
feuille se réactualise à chaque mouvement de la souris, et la
feuille se met à clignoter désagréablement. Pour remédier à cela,
j'aimerais donc que la feuille ne puisse s'actualiser que toutes les
secondes, mais je n'y arrive pas :-(
J'ai cherché du côté de Wait, ou de OnTime, mais je reste coincé.


Merci de votre aide.

--
Nicolas B.

Adresse @adresse.bidon.com invalide,
E-mail : www.cerbermail.com/?gAAILfkPsC








Avatar
Nicolas B.
Salut Hervé,

Je n'avais pas pensé à cela, mais ça ne marche toujours pas :-(
En effet, même avec Application.ScreenUpdating = False, lorsque la macro a
fini d'être exécutée, les modification apparaissent sur la feuille.
En fait, il me faudrait une fonction comme Now ou Time, car elles me
permettent par exemple de déclencher la macro toutes les dix secondes (si
Int(Now*86400) est un multiple de dix, par exemple). Le problème de ces deux
fonctions est qu'elles sont arrondies à la seconde près, et moi je voudrais
descendre dans les millisecondes (ou au moins les dixièmes de secondes). Y
a-t-il une fonction qui fasse cela ?

Merci

--
Nicolas B.

Adresse @adresse.bidon.com invalide,
E-mail : www.cerbermail.com/?gAAILfkPsC


Hervé wrote:
SAlut Nicolas,

Application.ScreenUpdating = False
...
Application.ScreenUpdating = True

Hervé.


Avatar
Hervé
Salut Nicolas,
Avec l'API GetTickCount, tu te mets un bouton pour lancer le timer qui va
lui, lancer la macro voulue toutes les x millisecondes, il va aussi définir
la valeur booléenne de la variable publique "Arreter" pour stopper le timer.
Enfin, adapte :
Declare Function GetTickCount Lib "Kernel32" () As Long

Sub Minuterie(Milliseconde As Long)
Dim Arret As Long
Arret = GetTickCount() + Milliseconde
Do While GetTickCount() < Arret
DoEvents
Loop
End Sub

Private Sub Timer()
Dim I As Integer
Do While Arreter = False
Minuterie 10000
LaMacroALancer
Loop
End Sub

Sub LaMacroALancer()
MsgBox "Macro lancée !"
End Sub

Hervé.

"Nicolas B." a écrit dans le message news:

Salut Hervé,

Je n'avais pas pensé à cela, mais ça ne marche toujours pas :-(
En effet, même avec Application.ScreenUpdating = False, lorsque la macro a
fini d'être exécutée, les modification apparaissent sur la feuille.
En fait, il me faudrait une fonction comme Now ou Time, car elles me
permettent par exemple de déclencher la macro toutes les dix secondes (si
Int(Now*86400) est un multiple de dix, par exemple). Le problème de ces
deux

fonctions est qu'elles sont arrondies à la seconde près, et moi je
voudrais

descendre dans les millisecondes (ou au moins les dixièmes de secondes). Y
a-t-il une fonction qui fasse cela ?

Merci

--
Nicolas B.

Adresse @adresse.bidon.com invalide,
E-mail : www.cerbermail.com/?gAAILfkPsC


Hervé wrote:
SAlut Nicolas,

Application.ScreenUpdating = False
...
Application.ScreenUpdating = True

Hervé.






Avatar
Nicolas B.
Merci beaucoup pour ta réponse.

J'ai réussi à avancer dans mon classeru, mais il reste encore un problème.
Dans le code ci-dessous, la ScrollBar déclenche la macro Attendre, et si le
temps en dixièmes de secondes est divisible par 10, alors la macro Couleurs
se déclenche. Là, tout marche bien : quand je joue de la ScrollBar, la macro
se déclenche toutes les secondes.

Le problème est que si je touche un peu à la scrollbar et que la macro ne se
déclenche pas (car la condition de temps n'est pas respectée), alors après
avoir relâché le clic, la feuille ne se met pas à jour.
Il me faudrait donc quelque chose comme :
- tant que le bouton de la souris est enfoncé, exécuter la macro toutes les
secondes seulement (comme c'est déjà le cas avec le code ci-dessous),
- et lorsque je relâche le bouton, la macro se déclenche.

Encore merci.



Declare Function GetTickCount Lib "Kernel32" () As Long
Sub Attendre()
temps = GetTickCount
If Int(temps / 100) Mod 10 = 0 Then Couleurs
End Sub


--
Nicolas B.

Adresse @adresse.bidon.com invalide,
E-mail : www.cerbermail.com/?gAAILfkPsC


Hervé wrote:
Salut Nicolas,
Avec l'API GetTickCount, tu te mets un bouton pour lancer le timer
qui va lui, lancer la macro voulue toutes les x millisecondes, il va
aussi définir la valeur booléenne de la variable publique "Arreter"
pour stopper le timer. Enfin, adapte :
Declare Function GetTickCount Lib "Kernel32" () As Long

Sub Minuterie(Milliseconde As Long)
Dim Arret As Long
Arret = GetTickCount() + Milliseconde
Do While GetTickCount() < Arret
DoEvents
Loop
End Sub

Private Sub Timer()
Dim I As Integer
Do While Arreter = False
Minuterie 10000
LaMacroALancer
Loop
End Sub

Sub LaMacroALancer()
MsgBox "Macro lancée !"
End Sub

Hervé.

"Nicolas B." a écrit dans le
message news:
Salut Hervé,

Je n'avais pas pensé à cela, mais ça ne marche toujours pas :-(
En effet, même avec Application.ScreenUpdating = False, lorsque la
macro a fini d'être exécutée, les modification apparaissent sur la
feuille.
En fait, il me faudrait une fonction comme Now ou Time, car elles me
permettent par exemple de déclencher la macro toutes les dix
secondes (si Int(Now*86400) est un multiple de dix, par exemple). Le
problème de ces deux fonctions est qu'elles sont arrondies à la
seconde près, et moi je voudrais descendre dans les millisecondes
(ou au moins les dixièmes de secondes). Y a-t-il une fonction qui
fasse cela ?

Merci

--
Nicolas B.

Adresse @adresse.bidon.com invalide,
E-mail : www.cerbermail.com/?gAAILfkPsC


Hervé wrote:
SAlut Nicolas,

Application.ScreenUpdating = False
...
Application.ScreenUpdating = True

Hervé.