Gif animé durant l'excution d'une macro

man95

XLDnaute Occasionnel
Bonjour à vous tous

Tout d'abord en grand bravo pour tout ce que vous faite partager.

Comme l'intitulé de mon message l'indique, j'aimerai afficher un gif durant le déroulement d'une macro qui est un peu longue

J'ai un fichier ex: Class1.xls qui lance une macro situé dans un autre classeur ex: class2.xls

La macro du class2 importe des données depuis plusieurs autres classeurs (tata, toto, titi, ...) puis les compilent et enfin copie dans Class1.xls.
cela pour chaque jour du mois.

Donc je voudrais en parralèle, un gif puisse s'afficher durant cette procédure de quelques minutes qui informe l'utilisateur du traitement en cours.

J'ai déjà le gif, pour le reste je sèche lamentablement

Merci pour toutes les solutions que vous pourrez me fournir.

Bonne journée

MPR
 

PMO2

XLDnaute Accro
Re : Gif animé durant l'excution d'une macro

Bonjour,

ATTENTION : faites des essais sur des copies de vos classeurs.

Trois pistes utilisant respectivement un WebBrowser, un Scriptlet, un ShockwaveFlash

TOUT D'ABORD
1) Créez un classeur avec une feuille "test"
2) Dans C:\ créez un dossier "MesGifsAnimés" et copiez-y les fichiers animals1.swf, DAFFY.GIF, titi.gif qui sont contenus dans la pièce jointe.
3) dans le VBE créez 3 UserForm (UserForm1, UserForm2, UserForm3)

USERFORM1
Double cliquez sur UserForm1, affichez la boîte à Outils, faites menu Outils/Contrôles supplémentaires… et cochez Microsoft Web Browser.
Insérez dans le UserForm un contrôle WebBrowser.

USERFORM2
Double cliquez sur UserForm2, affichez la boîte à Outils, faites menu Outils/Contrôles supplémentaires… et cochez Microsoft Scriptlet Component.
Insérez dans le UserForm un contrôle Scriptlet et, dans la fenêtre de propriétés, mettez la propriété url file:///c:/mesgifsanimés/daffy.gif

USERFORM3
Double cliquez sur UserForm3, affichez la boîte à Outils, faites menu Outils/Contrôles supplémentaires… et cochez Shockwawe Flash Object.
Insérez dans le UserForm un contrôle ShockwaweFlash.

4) Copiez le code suivant dans un module standard qui réprésente un pseudo traitement (qui simule le vôtre)
IL FAUDRA, dans votre code traitement, inclure l'instruction DoEvents aux divers endroits où cela sera nécessaire. A vous de voir car je ne peux les connaître.

Code:
Sub VotreMacro(Optional dummy As Byte)
Dim i&
Dim j&
'--- Pseudo traitement ---

For i& = 1 To 500
  
  '#################################################################
  '### Il faudra placer judicieusement dans votre traitement     ###
  '### l'instruction suivante et, peut-être à plusieurs reprises ###
  DoEvents
  '#################################################################

  Cells.Delete
  With Range("B2:G32").Interior
    If j& = 56 Then j& = 0
    j& = j& + 1
    .ColorIndex = j&
    .Pattern = xlSolid
  End With
  Range("B2").FormulaR1C1 = i&
  Range("B3").FormulaR1C1 = i& + 1
  Range("B2:B3").AutoFill Destination:=Range("B2:B32"), Type:=xlFillDefault
  Range("B2:B32").AutoFill Destination:=Range("B2:G32"), Type:=xlFillDefault
  Range("A1").Select
Next i&
End Sub

5) Dans un autre module standard, copiez le code suivant
Code:
'### Constante de la feuille test (à adapter) ###
Public Const MA_FEUILLE As String = "test"
'################################################

Sub Lance_UFwithWebBrowser()
Sheets(MA_FEUILLE).Activate
With UserForm1
  .Top = 0
  .Left = 0
  .StartUpPosition = 0
  .Caption = "Avec WebBrowser"
  .WebBrowser1.Navigate "about:<html><body scroll='no'> <img src='C:\MesGifsAnimés\titi.gif'></img></body></html>"
  .Show vbModeless
End With
Call VotreMacro
MsgBox "WebBrowser a terminé."
Unload UserForm1
End Sub

Sub Lance_UFwithScriptlet()
Sheets(MA_FEUILLE).Activate
With UserForm2
  .Top = 0
  .Left = 250
  .StartUpPosition = 0
  .Caption = "Avec Scriptlet"
  .Show vbModeless
End With
Call VotreMacro
MsgBox "Scriptlet a terminé"
Unload UserForm2
End Sub

Sub Lance_UFwithShockwaveFlash()
With UserForm3
  .Top = 0
  .Left = 500
  .StartUpPosition = 0
  .Caption = "ShockwaveFlash"
  .ShockwaveFlash1.Movie = "C:\MesGifsAnimés\animals1.swf"
  .Show vbModeless
End With
Call VotreMacro
MsgBox "ShockwaveFlash a terminé."
Unload UserForm3
End Sub
Lancez, tour à tour, les 3 procédures Lance_xxx pour voir leur effet

Cordialement.

PMO
Patrick Morange
 

man95

XLDnaute Occasionnel
Re : Gif animé durant l'excution d'une macro

Bonjour à tous, PMO

je viens d'intégrer la solution de Patrick dans mon projet. Cela fonctionne mais l'animation contenue dans mon gif défile très très lentement par moment (quand la macro ouvre et ferme des fichiers Xls) elle se fige carrement.

Sauriez vous pourquoi ?

Le DoEvents qu'il faut placer de façon judicieuse, pouvez vous m'expliquer son utilité afin que je le(s) positionne au bon endroit dans mon code.

Merci encore, pour vos retours

MPR
 

Discussions similaires

Statistiques des forums

Discussions
312 838
Messages
2 092 669
Membres
105 482
dernier inscrit
Eric.FKF