OVH Cloud OVH Cloud

Naviguer pendant l'arrêt d'une macro

4 réponses
Avatar
JeNeVois
Bonjour,

J'ai une petite macro qui me permet de suivre un par un
le développement d'un graphique. Pour avoir un temps
d'arrêt après chaque pas, je n'ai rien trouver de mieux
que de faire apparaître une msgbox (vbyesno) qui me
démande si je veux continuer ou arrêter le processus.
Le problème est que je ne peux pas naviguer dans
le classeur etc. pendant ces temps d'arrêt..
Comment donc créer quelquechose d'analogue à la
fonction "rechercher" intégrée qui laisse la main libre
pour la manipulation des objets ?

Merci d'avance pour toute réponse

4 réponses

Avatar
anonymousA
Bonjour,

utiliser un UF non modal avec un bouton avec une variable de niveau
module dans le UF qui sera incrémentée chaque fois que tu cliqueras
sur le bouton pour relancer la suite de la macro. Si le UF non modal
prend trop de place sur l'écran, on peut utiliser en écrivant une
procédure la possibilité de minimiser/maximiser le UF dans la barre
des taches.

Cette macro pourrait être appelée par l'evenement click du
commandbutton et en passant par paramètre à la macro la valeur de la
variable de niveau module, ta macro ne ferait qu'un certain nombre de
choses. Si par contre, ta macro , pour fonctionner d'une étape à
l'autre , a besoin d'éléments de l'étape précédente, il te faudra
conserver ces éléments dans des variables de niveau module du UF.

Exemple à mettre dans le module du UF

Dim bt as integer

Private Sub CommandButton1_Click()
mamacro bt
End Sub

Sub mamacro(valbouton as integer)

select case valbouton

case 0
'Faire le 1er pas
Case 1
'Faire le second pas

'et ainsi de suite

end select

end sub


A+
Avatar
michdenis
Bonjour JeNeVois,

Si tu désires seulement un temps d'attente ... il y a ceci :

5 = délai de 5 secondes

'---------------------
Sub Test()
Attente 5
End Sub
'---------------------
Sub Attente(Sec As Double)
Dim T As Double, A As Double

A = Timer: T = A + Sec

Do While T > Timer
DoEvents 'Pas obligatoire ...
Loop

End Sub
'---------------------


Salutations!




"JeNeVois" a écrit dans le message de news:

Bonjour,

J'ai une petite macro qui me permet de suivre un par un
le développement d'un graphique. Pour avoir un temps
d'arrêt après chaque pas, je n'ai rien trouver de mieux
que de faire apparaître une msgbox (vbyesno) qui me
démande si je veux continuer ou arrêter le processus.
Le problème est que je ne peux pas naviguer dans
le classeur etc. pendant ces temps d'arrêt..
Comment donc créer quelquechose d'analogue à la
fonction "rechercher" intégrée qui laisse la main libre
pour la manipulation des objets ?

Merci d'avance pour toute réponse
Avatar
JeNeVois
Bonjour,

je n'ai pas encore essayé cette possibilité,
mais, à prémière vue, une difficulté me
semble résider dans le fait qu'il s'agit
des arrêts à l'intérieur d'une boucle d'une
macro plus longue et qu'il est donc
impossible de la rélancer depuis le début.
Faudrait-il alors isoler cette boucle et en
faire une sub indépendante ?
Et dans ce cas ne faudrait-il alors pas
2 boutons, l'un pour initialiser la macro
et l'autre pour le processus ?
Et à quoi sert en fait l'incrémentation
et quelle variable passer à la macro
avec le SelectCase ?
Je dois avouer que je me sens un peu
bredouille...

salutations


Bonjour,

utiliser un UF non modal avec un bouton avec une variable de niveau
module dans le UF qui sera incrémentée chaque fois que tu cliqueras
sur le bouton pour relancer la suite de la macro. Si le UF non modal
prend trop de place sur l'écran, on peut utiliser en écrivant une
procédure la possibilité de minimiser/maximiser le UF dans la barre
des taches.

Cette macro pourrait être appelée par l'evenement click du
commandbutton et en passant par paramètre à la macro la valeur de la
variable de niveau module, ta macro ne ferait qu'un certain nombre de
choses. Si par contre, ta macro , pour fonctionner d'une étape à
l'autre , a besoin d'éléments de l'étape précédente, il te faudra
conserver ces éléments dans des variables de niveau module du UF.

Exemple à mettre dans le module du UF

Dim bt as integer

Private Sub CommandButton1_Click()
mamacro bt
End Sub

Sub mamacro(valbouton as integer)

select case valbouton

case 0
'Faire le 1er pas
Case 1
'Faire le second pas

'et ainsi de suite

end select

end sub


A+




Avatar
anonymousA
un exemple complet .
à mettre dans le module du UF que tu afficheras en non modal. Ce qui
suit nécéssite bien sur pour être plus robuste une gestion d'erreur,
mais le principe est là. J'ai volontairement laissé l'instruction
MsgBox valbouton bien qu'elle soit inutile pour te montrer où on veut
en venir.

Dim CtChart As Chart, bt As Integer

Sub Chartcreate(valbouton As Integer)

MsgBox valbouton

Dim sh As Worksheet
Set sh = ActiveSheet

Select Case valbouton

Case 0
'1ere étape
Set rng = sh.Range("A1:C10")
Set oChart = sh.ChartObjects.Add(0, 0, 200, 100)
'oChart.Name = "toto"
Set CtChart = oChart.Chart

With CtChart
.ChartType = xlColumnClustered
.SetSourceData Source:=rng
End With

Case 1
'2eme étape
With CtChart
.SeriesCollection(2).Interior.ColorIndex = 6
End With

Case 2
'3eme étape
With CtChart
.SeriesCollection(1).ApplyDataLabels
End With

End Select

End Sub
Private Sub CommandButton1_Click()

Chartcreate bt
bt = bt + 1

End Sub

A+