Améliorer gestion image animée gif dans formulaire

Résolu
GrandJean -  
 GrandJean -
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

  1. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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
  2. GrandJean
     
    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
  3. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    J'ai testé, partiellement, ta solution.
    Comprend pas, y a juste à cliquer sur le bouton ?
    0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. GrandJean
     
    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
  6. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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
    1. GrandJean
       
      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
  7. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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
  8. GrandJean
     
    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
  9. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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
  10. GrandJean
     
    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
  11. GrandJean
     
    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