Améliorer gestion image animée gif dans formulaire

Résolu/Fermé
GrandJean - 18 oct. 2013 à 17:35
 GrandJean - 28 oct. 2013 à 16:25
Bonjour,

J'ai finalement résolu mon problème tout seul et ai clôturé la discussion.
Je cherche maintenant à améliorer la gestion de l'animation :
1) l'animation tourne en tache de fond, mais ralentit beaucoup le traitement. Peut-on améliorer la vitesse en organisant différemment les lignes de commande ?
2) j'ai trouvé une bidouille pour arrêter l'animation, mais ce n'est pas très propre. Y-a-t'il une meilleure solution.
Voici mon fichier test. Le premier lien contient le fichier, le second l'image gif
http://www.cjoint.com/?0JsrzNrm9kp
http://www.cjoint.com/?0JrssNjjnxC

Par avance, merci de vos idées et suggestions
Cordialement,
Jean

11 réponses

lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 194
19 oct. 2013 à 14:10
Bonjour,
Employer le Webrowser uniquement pour afficher un gif me parais bien disproportionner.
Ce serait beaucoup plus rapide avec des images décomposées.
1°) décomposer ton gif (il y a des logiciel gratuit qui font ça, voir les téléchargement.
2°) Mettre autant d'images (cachées) que de poses.
3°) un timer qui affiche les images dans une PictureBox l'une après l'autre.
A+

0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 194
19 oct. 2013 à 17:43
0
Bonsoir lermitte !
Merci d'avoir pris le temps de regarder ma demande et pour tes suggestions.

Webbrowser est simple à paramétrer et fonctionne bien. C'est très rapide s'il n'y a que le GIF qui tourne.

J'ai testé, partiellement, ta solution. Mon résultat n'est pas encore satisfaisant. Pas eu beaucoup de temps pour cela. Je ferai d'autres tests en début de semaine pour esayer de réduire le temps de traitement avec deux tâches en // avant de clore cette discussion.

Pour décomposer les GIFS, j'ai trouvé un décodeur qui permet de le faire en ligne
http://www.bancreator.com/decoder.html

Encore merci de tes idées,
Bonne soirée
Jean
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 194
19 oct. 2013 à 20:08
J'ai testé, partiellement, ta solution.
Comprend pas, y a juste à cliquer sur le bouton ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bonjour,

J'ai testé la décomposition du gif et son intégration dans un UF. ça, c'est bon. L'avantage de ta solution, c'est qu'on peut modifier la couleur du fond ou travailler en transparence.
Ce que je dois faire maintenant, c'est appliquer cette solution dans mon application, voir si cela tourne plus rapidement, ou tout au moins assez rapidement pour la valider. Et même si j'y arrive, j'ai encore un peu de mal avec les boucles imbriquées (do while, doevents...)
C'est ce que je voulais dire par 'partiellement'

Bonne journée
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 194
21 oct. 2013 à 13:22
Re,
Je ne vois pas l'utilité de mettre une image pour faire patienter ? l'initialisation de la liste est immédiate ! +- un 10e de seconde ?
avec ce code...
Option Explicit

Private Sub A_Fermer1_Click()
Unload Me
End Sub

Private Sub A_Initialiser_Click()
Unload Me
UserForm1.Show
End Sub

Private Sub UserForm_Initialize()
Dim Derligne As Long, G As Long
With Sheets("Donnees")
Derligne = .Cells(Rows.Count, 1).End(xlUp).Row
For G = 1 To Derligne
ListBox1.AddItem .Cells(G, "A")
Next G
End With
'Me.StartUpPosition = 1
End Sub
Si plus de procédures à actualiser tu dis, je te montrerais comment procéder pour inclure l'animation.
A+
0
Bonjour,

J'ai effectivement quelques soucis...
J'utilise presque la même procédure que toi pour l'affichage de la liste, un peu différente car j'ai plusieurs données à afficher sur la même ligne. Dans mon fichier actuel, j'ai environ 500 lignes et cela prend entre 2 et 3 secondes pour l'affichage. Donc, là, effectivement, je n'ai pas vraiment besoin d'une animation. Un simple message suffit. Je voulais la mettre dans une procédure de mise à jour de données plus complexe, pas vraiment parce que c'est utile mais parce que j'aime bien apprendre de nouvelles choses sous VBA (je serai mort que je n'en aurai pas vu le quart de la moitié...). Je voulais faire quelque chose de différent de la progress bar. Cela semble rallonger le temps de traitement par 3 ou 4. Je pense que je vais laisser tomber. Si tu penses aussi que cela rallonge logiquement le temps de traitement, laisses tomber aussi. Si, par contre, tu penses que le temps de traitement ne devrait pas être impacté par l'animation, j'apprécierai ton aide. Voici mon code, qui ne fonctionne pas vraiment : l'affichage de la liste tourne en boucle, i.e. repart à 1 après avoir fini... et l'animation est très très lente.

Dim x As Integer
Dim MyTimer As Double

x = 10
MyTimer = Timer
Do
On Error Resume Next
Me.Image1.Picture = LoadPicture("D:\Mes documents\Mes images\Animees\Anim" & x & ".Gif")
On Error GoTo 0
Do
Loop While Timer - MyTimer < 0.2 '0.07
If x = 17 Then
x = 10
Else
x = x + 1
End If

MyTimer = Timer
DoEvents

With Sheets("Donnees")
Me.ListBox1.AddItem

derligne = .Cells(Rows.Count, 1).End(xlUp).Row

For G = 1 To 100 'derligne
Me.ListBox1.AddItem
Me.ListBox1.List(infos, 0) = .Cells(G, "A") 'j utilise cette méthode car plusieurs données à ajouter sur chaque ligne
infos = infos + 1
DoEvents

Next G

End With
Loop While Running

Running = False

Merci par avance de ton aide
Bonne journée
Jean
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 194
22 oct. 2013 à 10:37
utilise cette méthode car plusieurs données à ajouter sur chaque ligne
Je ne vois vraiment pas où tu ajoute plusieurs données ???

L'animation tel que je t'ai montrer ne prend pratiquement aucun temps mesurable, le timer travail dans un autre thread.
explique pour plusieurs données à ajouter et je verrais pour l'ajouter dans mon code avec l'animation en plus.
0
Pardon si je me suis mal exprimé. Par plusieurs données à ajouter, j'entends les données à ajouter dans chaque colonne de la listbox. Voici un exemple :

For G = 10 To derligne
Me.ListBox1.AddItem
Me.ListBox1.List(infos, 0) = .Cells(G, "B")
Me.ListBox1.List(infos, 1) = .Cells(G, "C")
Me.ListBox1.List(infos, 2) = .Cells(G, "D")
Me.ListBox1.List(infos, 3) = .Cells(G, "E")
Me.ListBox1.List(infos, 4) = .Cells(G, "F")
Me.ListBox1.List(infos, 5) = .Cells(G, "G")

infos = infos + 1
Next G

A+
Jean
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 194
22 oct. 2013 à 13:48
Bon, beh y faut VRAIMENT pas d'animation.
Met ce code dans l'initialise
Private Sub UserForm_Initialize()
Dim Derligne As Long
Derligne = Sheets("Donnees").Cells(Rows.Count, 1).End(xlUp).Row
ListBox1.RowSource = "Donnees!A10:E" & Derligne
End Sub
Tu dis..
A+

0
Trop fort !
Effectivement, la liste apparaît instantanément et il n'est nul besoin d'animation ! Merci beaucoup. Je vais devoir revoir beaucoup de listbox !
Je suppose que la méthode for to est intéressante quand on veut filtrer les données à afficher, mais pas pour une liste complète.

Avant de clôturer cette discussion, je vais faire un test pour inclure une animation dans un traitement un peu long, pour ma culture personnelle. Si j'ai un souci, je me permettrais de revenir vers toi. Pas avant une semaine, parce que trop d'autres choses à faire.

Bon après-midi.
Jean
0
Bonjour,

Avec la technique que tu m'as montrée pour l'affichage des listes, je n'ai plus besoin d'animation puisque mes temps d'affichage, même avec plusieurs opérations en cascade, sont quasi instantanés.

Je garde cependant la technique pour la décomposition d'un GIF. Cela me sera certainement utile.

Merci pour ton temps et tes explications.

Cordialement,
Jean
0