WebBrowser figé dans UserForm

StagiaireEnMousse

XLDnaute Nouveau
Bonjour à tous ! :)

Je me permets de créer un sujet concernant les gifs animés et les UserForm.
Je sais, il existe plein de posts similaires, mais je n'arrive pas à régler mon problème d'animation du gif.

Je suis plutôt novice en VBA, vu que ça ne fait qu'un petit mois que je suis en plein dedans. Depuis le début de mon projet, j'ai touours pu trouver les réponses souhaitées, mais pas cette fois. Donc je fais appel à vous ! :D

Voici mon problème:

J'ai crée un UserForm avec un WebBrowser pour faire patientez l'utilisateur le temps d'exécuter une série de calculs.
Message attente.jpg

Cependant, le gif ne s'anime que lorsque ma fenêtre active n'est plus Excel. Je ne comprends vraiment pas ce problème...
Voici mon code pour le UserForm "ATTENTE" + WebBrowser :

Code:
 Private Declare Function GetWindowLongA Lib "user32" _
(ByVal hwnd As Long, ByVal nIndex As Long) As Long

Private Declare Function SetWindowLongA Lib "user32" _
(ByVal hwnd As Long, ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long

Private Declare Function FindWindowA Lib "user32" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long


Private Sub UserForm_Initialize()
Dim S As String
Dim Hauteur As Long, Largeur As Long
Dim LePath As String

Dim hwnd As Long
    hwnd = FindWindowA("Thunder" & IIf(Application.version Like "8*", "X", "D") _
    & "Frame", Me.Caption)
    SetWindowLongA hwnd, -16, GetWindowLongA(hwnd, -16) And &HFFF7FFFF

LePath = ActiveWorkbook.path & "\"
Largeur = WebBrowser1.Width + 10
Hauteur = WebBrowser1.Height + 10
'Le nom du fichier Zip
S = LePath & "loading2.gif"

WebBrowser1.Navigate _
"ABOUT:<HTML><CENTER><HEAD><body scroll='no' LEFTMARGIN=0 TOPMARGIN=0><IMG WIDTH=" & _
Largeur & " HEIGHT=" & Hauteur & _
" SRC='" & S & "'</IMG></BODY></CENTER></HTML>" & _
DoEvents


End Sub

Private Sub UserForm_Activate()

WebBrowser1.Document.Body.Style.backgroundColor = xlTransparent
WebBrowser1.Document.Body.Style.Border = "none"

End Sub


Pour activer le UserForm :

Code:
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sub SuccessionsDeCalculs()

ATTENTE.Show 0 
Sleep (5)
DoEvents
Sleep (5)
ATTENTE.Repaint
Call CalculsLongs
Unload ATTENTE

End Sub

En espérant avoir été claire et obtenir des réponses (et non pas des moqueries et du manque de respect comme sur d'autres forums Excel...)

Merci d'avance !

Cordialement,

Une stagiaire en mousse.

PS: Comment fait-on pour mettre des couleur dans le code pour qu'il soit plus lisible ? :confused:
 

StagiaireEnMousse

XLDnaute Nouveau
Re : WebBrowser figé dans UserForm

Personne n'a une idée d'où vient ce problème ??
Je trouve ça surprenant mine de rien. En quoi le fait de désactiver la fenêtre Excel fait que le programme fonctionne comme je le souhaite..?

EDIT : En fait, il faut que je désactive puis réactive la page pour que le WebBrowser soit en marche + exécution de ma macro ! Toujours est-il que c'est un mystère...
 
Dernière édition:

StagiaireEnMousse

XLDnaute Nouveau
Re : WebBrowser figé dans UserForm

Bon, personne n'a l'air d'être inspiré...

J'ai à moitié résolu le problème. Disons que si vous avez une procédure qui contient une boucle For, il faut mettre un "DoEvents" juste avant le Next.

Par contre je fais appel à des procédures qui sont des successions d'actions (des égalités entre valeurs CATIA et des cellules Excel), et là, aucune idée de comment faire...

Je pense que je vais clore la recherche ce soir, tant pis. Je bidouillerai un truc. Et au pire, je mettrai une image fixe et non pas un gif animé. Mais je trouve ça dommage...
 

StagiaireEnMousse

XLDnaute Nouveau
Re : WebBrowser figé dans UserForm

Bon, je fais la discussion toute seule, mais j'espère que ça aidera quelqu'un qui sera dans la mouise comme moi.
Je n'ai pas réussi à faire fonctionner mon WebBrowser comme je le souhaitais, mais disons que j'ai réussi à bidouiller.

Comme dit précédemment, pour le défigé, il faut un DoEvents avant le next si il y a une boucle dans votre procédure.

Sinon, la boucle, vous la créez vous-même :

Code:
X = Timer()
   Do While X + 5 > Timer()
        DoEvents
  Loop

J'ai ajouté cette boucle au milieu d'une procédure sans boucle.

Ca marche à moitié, mais c'est la solution que je vais retenir, faute d'aide.
 

StagiaireEnMousse

XLDnaute Nouveau
Re : WebBrowser figé dans UserForm

Bonjour,
je pense qu'un petit fichier exemple comme précisé lorsque tu ouvres une discussion t'aiderait peut-être à obtenir des réponses car sans cela comment tester ?
A+

Bonjour,

Le fichier en question est confidentiel. J'ai mis la partie la moins explicite dans mon post. Du coup, impossible de joindre un fichier ressemblant plus ou moins à celui sur lequel je travaille.

Merci quand même.
 

Discussions similaires

Statistiques des forums

Discussions
312 329
Messages
2 087 333
Membres
103 519
dernier inscrit
Thomas_grc11