Création d'un UserForm annimé pour faire patienter l'utilisateur

SERIEUXETCOOL

XLDnaute Occasionnel
Bonjour le Forum,

Voici le contexte :

J'ai développé une Macro comportant un sacré paquets de lignes, et qui exécute un sacré paquets d'opérations (Principalement des calculs avec des grosses formules sur des centaines de lignes).

Du coup quand je lance ma Macro et bien mon écran se "fige" l'espace d'une 20aine de secondes. Il s'agit du temps que met le pc pour réaliser les calculs, tracer les graphs, etc. On pourrais penser que la Macro bug, alors que c'est faux.

Du coup j'aimerais mettre un UserForm animé à l'écran et qui se déclenche au moment que je désire avec un "UserFom Show". Puis qui se termine avec un "Userform Unload".

Précisions :

Je ne veux pas mettre une "progress bar" car je ne suis pas capable de déterminer à l'avance le nombre d'opérations qui sera à traiter. Sa pourrait varier de 4 secondes à 40 secondes par exemple. Donc une progress bar n'est pas adaptée pour moi.

Du coup je désire un UserForm qui sois animé en boucle par une série de petites barres, ou de points, ou de lignes etc qui indiquent à l'utilisateur que des calculs sont en cours.

Comme sa, quand la Macro se déclenche, l'utilisateur vois apparaitre à l'écran un message animé lui indiquant que tout est normal.

Pour l’animation je n'ai pas vraiment de préférences, sa peut être un texte qui tourne en boucle, des points qui se suivent les uns après les autres etc. Juste un UserForm animé pour ne pas penser que sa bug (et pour le style aussi^^).

Donc vous l'avez compris, je me fiche d'avoir un pourcentage de progression, simplement un message qui tourne en boucle jusqu’à ce que les calculs soient terminés.

J'ai trouvé sur le net un premier exemple avec une progress bar, peut être est-il possible de le modifier un peu pour que la progression de la barre ne sois plus liée au nombre d'opérations exécutées, mais au temps d'affichage de l'UserForm.

Conclusion :

J'espère avoir été clair sur la définition de mon besoin. Je reste dans le coin pour plus d'infos.

Cordialement,

André

PS : Excel 2007
 

Pièces jointes

  • Exemple barre de progression.xls
    32.5 KB · Affichages: 747
  • Exemple barre de progression.xls
    32.5 KB · Affichages: 805
  • Exemple barre de progression.xls
    32.5 KB · Affichages: 832
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Création d'un UserForm annimé pour faire patienter l'utilisateur

Bonjour Fo-rum
Eh, bien voilà ! Toi au moins tu as fait quelque chose !
Mais Sleep ne suspendrait-il pas l'exécution, empêchant de faire quoi que ce soit pendant ce temps ?
À+
 

jeffe

XLDnaute Impliqué
Re : Création d'un UserForm annimé pour faire patienter l'utilisateur

hello ,
et pourquoi pas avec un webrowser?
pas encore trouvé pour un gif....
 

Pièces jointes

  • serieuetcool.zip
    10.9 KB · Affichages: 310
Dernière édition:

SERIEUXETCOOL

XLDnaute Occasionnel
Re : Création d'un UserForm annimé pour faire patienter l'utilisateur

Coucou tout le monde,

- Fo_rum, ton idée n'est pas mauvaise du tout. Tu affiche une animation pendant une durée définie arbitrairement. On pourrait en effet dimensionner cette durée comme étant très très longue par rapport au temps d'attente moyen des calculs. Comme sa on est sur de conserver l’animation tout le long.

Je vais tester sa dès que j'aurais un peu de temps.

- jeffe, j'utilise déjà un Webrowser...Mais avec une image Gif. Je ne savais pas que l'on pouvait afficher un texte en défilement automatique. C'est une très bonne solution sa aussi. Au lieu d'avoir une image animée, on à un texte qui défile en boucle. Les deux se valent.

Par contre, dans ton archive il y a 2 fichiers. Et je ne sais pas à quoi correspond le deuxième. Si c'est un fichier qui doit être transmis avec le fichier Excel, alors on perd tout intérêt. En effet, le but étant de n'avoir qu'un seul et unique document Excel sans aucune pièce attachée.

En utilisant une image Gif, je dois, pour le moment, transmettre 2 fichiers distincts et inséparables (Classeur plus Image). Or je veux m'en affranchir.

Merci pour vos idées à tous ! Je peux maintenant afficher un message animé pendant une attente.

Néanmoins par curiosité, je vais tout de même voir si je ne parviens pas à afficher une image Gif tout en stockant cette image au classeur Excel. Avec les données que j'ai en ma possession, je pense pouvoir réussir. Je testerais sa avec un peu plus de temps dans la journée...
 

SERIEUXETCOOL

XLDnaute Occasionnel
Re : Création d'un UserForm annimé pour faire patienter l'utilisateur

Bon sa doit être Apple qui fait afficher ce fichier particulier.
Oki pas de soucis. Donc jeffe ta solution me séduit beaucoup.

Je me laisse l'aprèm pour laisser libre court à ma curiosité et si je ne parviens à rien et bien sa sera ta solution jeffe ;)

Un grand merci à tous ceux qui ont contribué.

André
 

SERIEUXETCOOL

XLDnaute Occasionnel
Re : Création d'un UserForm annimé pour faire patienter l'utilisateur

Re-bonjour tout le monde...Que dis-je !!! Bonsoir vu l'heure...

Alors comme promis je reviens ici pour faire état de mon avancement. L'idée de base était de créer un UserForm qui affiche une image Gif animée pendant l'exécution de certains calculs longs.

Et bien après avoir planché quelques heures dessus j'en suis arrivé à la conclusion que j'avais raison sur bcp de points (enfin je suis convaincu quoi). Mon idée était la suivante :

- Charger une image Gif depuis le disque local du PC et qui sera stockée dans une feuille Excel. Pour ce faire on décompose l'image en binaire dans une nouvelle feuille Excel. Jusque la je sais faire. Je peux donc sauvegarder dans une feuille Excel n'importe quelle image Gif de mon choix. Ça c'est cool quand même.
Quand je fais enregistrer le classeur, Excel sauvegarde la feuille contenant les informations de l'image. Et voila du coup comment on stocke une image Gif sous Excel. Sa évite d'avoir 2 fichiers à trimbaler.

Ça, c'est le bon point.

-Ensuite, j'utilise un WebBrowser dans un UserForm pour lire les informations que contient la feuille Excel pour afficher l'image animée. Jusque la j'y arrive...presque ! Et c'est bien la, la dernière petite limite qu'il me reste avant de pouvoir dire, "Ok la réponse à mon besoin initial est terminé".

Quel est le problème ?

Et bien je dispose d'un classeur Excel qui contient 2 feuilles. Sur la première feuille rien de spécial. Juste un bouton de commande pour lancer la macro. La deuxième feuille contient le code de l'image. Sur mon UserForm, j'ai une ComboBox qui m’emmerde comme pas possible ! Elle contient les instructions pour faire créer l'image et la faire charger dans le WebBrowser. Sauf que moi je me moque de la ComboBox. Je désire qu'a l'affichage de l'UserForm :

-La combobox sois supprimée car elle ne m'est d'aucune utilité.

-Le webBrowser affiche directement l'image qui est contenu dans la feuille Excel numéro 2. Affichage en boucle sans aucune confirmation de l'utilisateur.

-Tout cela tournant en boucle tant que l'utilisateur n'aie pas quitté l'userform.

Dans le code de l'UserForm, il n'y a que 2 lignes à modifier. Il s'agit des lignes pour la création de l'image et du fichier source. Mais je ne parviens pas à déchiffrer ce code. Du coup je sais d’où viens le problème mais je n'ai pas les compétences pour le modifier.

Je m'en retourne de nouveau vers vous. Sa doit prendre 10 min pour une personne sachant créer et manipuler des fichiers depuis une Macro. Mais pour moi qui débute, c'est juste trop. Déjà j'ai trouvé la solution de principe qui finalement marche. Ne reste plus qu'a apporter une modif et le tour est joué. Sur que sa sera utile pour d'autres personnes.


Bien cordialement,

André

PS : Ces 2 lignes de codes m'ont eu à l'usure, je baisse les bras...pour ce soir seulement^^
 

Pièces jointes

  • CLASSEUR AVEC L'IMAGE GIF PRE-CHARGEE.xlsm
    230 KB · Affichages: 162

laetitia90

XLDnaute Barbatruc
Re : Création d'un UserForm annimé pour faire patienter l'utilisateur

bonjour tous:):):):):):)
change le code de l'user par celui la!!
enfin comme j'ai compris???

Code:
Dim x As Byte, LeTexte As String, LaCouleur As String, S As String, Fs As Object
 Dim i As Long, F As Long, j As Byte, b As Byte, Hauteur As Long, Largeur As Long
Private Sub UserForm_Initialize()
     Set Fs = CreateObject("Scripting.FileSystemObject")
      LeTexte = "Veuillez patienter... traitement en cours ..."
    LaCouleur = "#CC0000"
        WebBrowser2.Navigate _
    "about:<html><body BGCOLOR ='#CCCCCC' scroll='no'><font color= " & LaCouleur & _
    " size='5' face='Arial'>" & _
    "<marquee>" & LeTexte & "</marquee></font></body></html>"
       i = 1
       S = "C:\imageTemp.gif"
       F = FreeFile
    Open S For Binary Access Write As F
            Do
        j = j + 1
                If j = 21 Then
                j = 1
                i = i + 1
                End If
        b = ThisWorkbook.Sheets("IMAGE").Cells(i, j).Value
        Put #F, , b
        DoEvents
        Loop While ThisWorkbook.Sheets("IMAGE").Cells(i, j).Value <> ""
        Close F
       WebBrowser1.Navigate _
    "ABOUT:<HTML><CENTER><HEAD><body scroll='no' LEFTMARGIN=0 TOPMARGIN=0><IMG " & _
        " SRC='" & S & "'</IMG></BODY></CENTER></HTML>"
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Kill "C:\imageTemp.gif"
End Sub

en complement j'ai de gros doute que l'animation soit active pendant qu tu lances une autre macro
cela va reste" fige" excel va avoir beaucoup de mal a faire 2 choses a la fois ???
il faut mettre un timer comme le preconise l'ami forum
Code:
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
bilan de l'operation ton code va être un peu plus long a s'executer
a mediter !!
 
Dernière édition:

laetitia90

XLDnaute Barbatruc
Re : Création d'un UserForm annimé pour faire patienter l'utilisateur

re, je viens de regarder le post plus en details avec les autres solutions apportees en premiere page
perso... j'utilise la solution de l'ami bruno:)sur les "grosses macro" facile a mettre en oeuvre pas de penalite au niveau du temps d'execution ect...
de plus tu presente pas ton code qui est si long a s'executer c'est a ce niveau la qu'il y a un gros travail a faire ... une macro optimisée peut s'executer des dizaines fois plus vite
il faut refléchir de ce côte la
 

Theze

XLDnaute Occasionnel
Re : Création d'un UserForm annimé pour faire patienter l'utilisateur

Bonjour,

Pourquoi pas utiliser un ProgressBar ?
Dans ton code à différents points tu définis une valeur (value) pour le ProgressBar et de cette façon, l'utilisateur voit où en est le traitement et sa cadence d'avancement.
C'est animé et en plus c'est parlant concernant le temps d'attente approximatif. Une animation qui tourne en boucle sans savoir combien de temps ça va durer c'est assez stressant à mon sens.

Hervé.
 

Fo_rum

XLDnaute Accro
Re : Création d'un UserForm annimé pour faire patienter l'utilisateur

Bonjour,

même idée que Thèze : un contrôle ProgressBar dans un UsF.
Maintenant, comme le dit si bien laetitia90 :D, il faut voir avec ta macro.
 

Pièces jointes

  • ProgressBar.xls
    34.5 KB · Affichages: 185
  • ProgressBar.xls
    34.5 KB · Affichages: 169
  • ProgressBar.xls
    34.5 KB · Affichages: 172

SERIEUXETCOOL

XLDnaute Occasionnel
Re : Création d'un UserForm annimé pour faire patienter l'utilisateur

Merci Merci Laeticia !!!

Je savais bien qu'il ne restait plus qu'a changer une petite chose dans le code. Un mot ! Un simple tout petit mot que je ne suis même pas arrivé à trouver. Comme quoi j'ai les idées mais pas la manière de programmer^^

Bon ben après modifications générales de l'ensemble des codes je suis à même de poster une solution finale pour clore cette discussion. Pour rappel à tous les arrivants, mon but était de pouvoir stoker une image Gif animée directement dans un classeur Excel ET d'utiliser cette image animée dans le classeur au moment voulu.

Avantages :

-Un seul et unique document Excel à transmettre. Pas besoin d'envoyer le fichier Excel ET l'image qui lui est associée.

-Esthétiquement sa envoie du lourd d'avoir une petite animation qui tourne sur Excel (Idéal pour faire patienter un utilisateur, c'est mon cas).

-On peut charger plusieurs images différentes et toutes les afficher simultanément ou chacune à un moment décisif de sa Macro.

-Avec les fichiers que je vais mettre en pièce jointe, la procédure est terriblement enfantine...et efficace !


Inconvénients :

-Stocker une image Gif dans une feuille Excel, alourdit le fichier global en taille.

-Demander à Excel de faire tourner une animation PENDANT qu'Excel traite d'autres calculs longs; peut encore plus retarder l'avancement des calculs (on peut très bien afficher une animation pendant qu'un utilisateur remplis tranquillement un formulaire)

-Sa m'a pris du temps pour mettre au point cette petite astuce "inutile" diront certains. Mais maintenant je suis à même de le faire en moins de 10 min ;)


Voili voila de ce que je pouvais conclure. Ma curiosité est maintenant pleinement satisfaite. Je vais pouvoir passer à autre chose lol.


Bien maintenant je vais expliquer très brièvement comment se servir des fichiers.

-Un des classeurs permet de charger une image Gif de son disque dur et de stocker cette image dans une nouvelle feuille d'Excel. Cette image est en fait converti en Binaire.

-Ensuite il suffit d'ouvrir le deuxième classeur Excel, et de copier le code de l'image dans la feuille Excel nommée "IMAGE". Je me répète, avec le premier classeur on copie les données relatives à l'image chargée ET on viens coller les données dans le classeur numéro 2 dans la feuille nommée "IMAGE".

-Suffit de lancer ensuite la Macro et le tour est joué. Chacun adaptera l'userform, l'image stockée, et le texte défilant à sa guise.

Je ne pourrais pas faire plus simple.

Bonne continuation à tous. Et encore merci pour toutes vos solutions proposées ET vos aides qui m'ont beaucoup servi.

Cordialement,

André
 

Pièces jointes

  • POUR CHARGER UNE IMAGE GIF DANS UN CLASSEUR.xls
    70.5 KB · Affichages: 181
  • IMAGE_GIF.gif
    IMAGE_GIF.gif
    38.2 KB · Affichages: 230
  • CLASSEUR OU LES DONNEES DE L'IMAGE DOIVENT ETRE COPIEES.xls
    46 KB · Affichages: 163
Dernière édition:

Discussions similaires