Afficher une forme pendant X secondes à l'ouverture d'un classeur
Bonsoir à tous,
Tout est dans le titre, mes recherches sont infructueuses pour l'instant. Donc je viens vers vous pour savoir si quelqu'un possède le petit bout de code qui me permettrait de rendre visible une image ou forme pendant quelques secondes à l'ouverture du classeur sur feuil1.
D'avance merci.
Bonsoir,
Cela pourra sans doute t'aiguiller.
Affichage temporisé d'une image à l'ouverture d'un classeur (excel-pratique.com)
Bonsoir Pigneau, bonsoir à tous,
Voici un petit code trouvé sur le net qui permet à une forme de rester quelques secondes et de s'estomper jusqu'à disparaître complétement.
Bien sûr le délai est paramétrable directement dans la macro (module1).
Dans le classeur joint, le texte du "shape" est issu d'une formule (dynamique) en H1; c'est un exemple.
La macro se déclenche à l'ouverture du classeur.
Bonne soirée
AL 22
Merci à Thrrybo pour sa piste mais je l'avais vu en cherchant sur le forum.
Merci à AL22 pour son fichier qui correspond à ce que je cherchais. J'ai voulu y apporter un petit changement en y ajoutant une image et en invalidant le message mais je n'obtiens pas l'effet de disparition comme avec le message. Si tu as une petite piste ou une petite modif à faire, je suis preneur et serait très reconnaissant.
Merci également à EXCEL PRATIQUE qui me permet de découvrir un peu plus la puissance de ce logiciel.
Bonjour Pigneau, bonjour à tous,
Dans le classeur joint, tu trouveras une autre méthode pour faire apparaître puis disparaître une photo.
Effectivement, le traitement d'une forme est différent d'une image, et le code s'en ressent.
Dans l'image animé en dessous, le fondu de l'image n'empêche pas d'utiliser Excel.
Comme d'habitude, la macro se déclenche à l'ouverture de classeur.
Attention à la première exécution, tu auras une erreur car le classeur ne contient pas d'image (trop lourd à l'envoi).
Tu devras en charger une en utilisant un bouton que j'ai placé et le faire disparaître après.
Bonne soirée.
AL 22
Bonsoir AL 22
Malgré tout ton travail, je ne peux hélas faire fonctionner ton fichier qui génère une erreur lors de son ouverture. Il m'indique une erreur de compilation :
"Le code contenu dans ce projet dot être mis à jour pour pouvoir être utilisé sur les systèmes 64 bits. Vérifier et mettez à jour les instructions Declare, puis marquez-les avec l'attribut PtrSafe. Le problème se situe au niveau du module1 à partir de cette ligne qui sont en rouge :
"Public Declare Function GdiplusStartup Lib "gdiplus" (ByRef token As Long, inputbuf As GdiplusStartupInput, Optional ByVal outputbuf As Long = 0) As GpStatus"
et les 4 suivantes.
Je n'ai hélas pas les compétences pour régler ce problème et effectivement le code est beaucoup, beaucoup plus complexe.
Voilà et encore merci pour ta patience.
Bonjour Pigneau, bonjour à tous,
Aïe !
Remplace les 5 lignes qui posent problème par celles-ci :
#If VBA7 Then
Public Declare PtrSafe Function GdiplusStartup Lib "gdiplus" (ByRef token As Long, inputbuf As GdiplusStartupInput, Optional ByVal outputbuf As Long = 0) As GpStatus
Public Declare PtrSafe Function GdipLoadImageFromFile Lib "gdiplus" (ByVal filename As String, ByRef image As Long) As GpStatus
Public Declare PtrSafe Function GdipGetImageDimension Lib "GdiPlus.dll" (ByVal mImage As Long, ByRef mWidth As Single, ByRef mHeight As Single) As GpStatus
Public Declare PtrSafeFunction GdipDisposeImage Lib "gdiplus" (ByVal image As Long) As GpStatus
Public Declare PtrSafeSub GdiplusShutdown Lib "gdiplus" (ByVal token As Long)
Else
Public Declare Function GdiplusStartup Lib "gdiplus" (ByRef token As Long, inputbuf As GdiplusStartupInput, Optional ByVal outputbuf As Long = 0) As GpStatus
Public Declare Function GdipLoadImageFromFile Lib "gdiplus" (ByVal filename As String, ByRef image As Long) As GpStatus
Public Declare Function GdipGetImageDimension Lib "GdiPlus.dll" (ByVal mImage As Long, ByRef mWidth As Single, ByRef mHeight As Single) As GpStatus
Public Declare Function GdipDisposeImage Lib "gdiplus" (ByVal image As Long) As GpStatus
Public Declare Sub GdiplusShutdown Lib "gdiplus" (ByVal token As Long)En fait, tu travailles sur une version W64bits, ce qui n'est pas mon cas, donc attention je ne peux pas tester !
Bonne journée
AL 22
AL22, ok et merci pour ton retour, je testerai cela dès que j'en aurais fini avec POWER QUERY que je connais pas. LOL
Je ne manquerais pas de faire un retour sur ton partage.
AL22, donc il y a toujours un problème. Voici ce qui apparait après remplacement des 5 lignes. Les 3 premières semblent bonnes mais pas le reste. Il semble qu'il manquait également un EndIf dans les lignes que tu m'as fait passer. Je pense que tu ne l'avais pas sélectionné dans ta copie. Le programme plante à l'ouverture du fichier ligne (4) il bloque sur le premier PtrSafeFunction
#If VBA7 Then
Public Declare PtrSafe Function GdiplusStartup Lib "gdiplus" (ByRef token As Long, inputbuf As GdiplusStartupInput, Optional ByVal outputbuf As Long = 0) As GpStatus
Public Declare PtrSafe Function GdipLoadImageFromFile Lib "gdiplus" (ByVal filename As String, ByRef image As Long) As GpStatus
Public Declare PtrSafe Function GdipGetImageDimension Lib "GdiPlus.dll" (ByVal mImage As Long, ByRef mWidth As Single, ByRef mHeight As Single) As GpStatus
(4) Public Declare PtrSafeFunction GdipDisposeImage Lib "gdiplus" (ByVal image As Long) As GpStatus
Public Declare PtrSafeSub GdiplusShutdown Lib "gdiplus" (ByVal token As Long)
Else
Public Declare Function GdiplusStartup Lib "gdiplus" (ByRef token As Long, inputbuf As GdiplusStartupInput, Optional ByVal outputbuf As Long = 0) As GpStatus
Public Declare Function GdipLoadImageFromFile Lib "gdiplus" (ByVal filename As String, ByRef image As Long) As GpStatus
Public Declare Function GdipGetImageDimension Lib "GdiPlus.dll" (ByVal mImage As Long, ByRef mWidth As Single, ByRef mHeight As Single) As GpStatus
Public Declare Function GdipDisposeImage Lib "gdiplus" (ByVal image As Long) As GpStatus
Public Declare Sub GdiplusShutdown Lib "gdiplus" (ByVal token As Long)
#End If
Voilà
Re,
Oui, désolé je t'ai envoyé un code boiteux...
Teste ceci :
#If VBA7 Then
Public Declare PtrSafe Function GdiplusStartup Lib "gdiplus" (ByRef token As Long, inputbuf As GdiplusStartupInput, Optional ByVal outputbuf As Long = 0) As GpStatus
Public Declare PtrSafe Function GdipLoadImageFromFile Lib "gdiplus" (ByVal filename As String, ByRef image As Long) As GpStatus
Public Declare PtrSafe Function GdipGetImageDimension Lib "GdiPlus.dll" (ByVal mImage As Long, ByRef mWidth As Single, ByRef mHeight As Single) As GpStatus
Public Declare PtrSafe Function GdipDisposeImage Lib "gdiplus" (ByVal image As Long) As GpStatus
Public Declare PtrSafe Sub GdiplusShutdown Lib "gdiplus" (ByVal token As Long)
#Else
Public Declare Function GdiplusStartup Lib "gdiplus" (ByRef token As Long, inputbuf As GdiplusStartupInput, Optional ByVal outputbuf As Long = 0) As GpStatus
Public Declare Function GdipLoadImageFromFile Lib "gdiplus" (ByVal filename As String, ByRef image As Long) As GpStatus
Public Declare Function GdipGetImageDimension Lib "GdiPlus.dll" (ByVal mImage As Long, ByRef mWidth As Single, ByRef mHeight As Single) As GpStatus
Public Declare Function GdipDisposeImage Lib "gdiplus" (ByVal image As Long) As GpStatus
Public Declare Sub GdiplusShutdown Lib "gdiplus" (ByVal token As Long)
#End IfA+
AL 22
J'ai remplacé le code. Les lignes après le Else sont toujours en rouge mais je suppose que c'est la partie utile au 32 bits. Utilisation du premier bouton il ouvre l'explorateur, je peux charger l'image en. Bmp, le fichier se ferme. Je l'ouvre à nouveau mais il n'y a pas d'image mais le petit Rectangle s'estompe.
Hypothèse: peut être que mon Bmp est trop grand, ou agir pour agrandir le Rectangle1. Car je l'ai agrandi et j'ai enregistré mon fichier mais rien à faire le Rectangle bleu s' estompe comme prévu mais sans photo.
Remarque lorsque je téléchargais mon Bmp, il a un beep avant fermeture du fichier.
@+
J'ai insérer mon Bmp manuellement et je l'ai renommé Rectangle 1, elle disparaît sans s'estomper. C'est vrai bête le concept me plaît bien pourtant.
Re,
Il est important que l'image importée soit renommée "Rectangle 1" et doit être la seule à porter ce nom.
C'est certainement ce qui s'est passé d'après ta description, c'est à dire qu'une autre forme portait le même nom et à pris la main.
C'est le petit bouton qui s'estompait et ton image restait invisible.
Va dans le ruban d'Excel, onglet Mise en page et Volet Sélection. Assure toi qu'il n'y ait qu'un seul "Rectangle 1" dans le volet qui s'ouvrira à droite. Modifie les noms au besoin.
J'ai retravaillé un classeur pour simplifier l'ajout d'une image, mais celle ci sera dimensionnée par rapport aux cellules "F7" et "G10". Tu peux corriger les valeurs dans le code. Fais moi un retour s'il te plaît.
En revanche, je ne comprends pas quand tu écrit :"elle disparaît sans s'estomper.", là je ne vois pas. La boucle dans la macro fait son boulot normalement.
AL 22
AL22,
J'utilise ton fichier pour l'instant. A l'ouverture de celui-ci il m'affiche "Erreur d’exécution avec des numéros" et bloque sur la Sub Transparence à la ligne
With ActiveSheet.Shapes("Rectangle 1") '.Select
J'arrête la macro et retourne sur ton doc. Je clique sur le premier bouton pour aller cherche mon BMP. "Erreur d'exécution" L'élément portant ce nom est introuvable. Sub RemplaceImage il bloque sur ActiveSheet.Shapes("Rectangle 1").Delete
J'affiche le volet de sélection mais le "Rectangle 1" n'est pas créer. Je crois que c'est là le problème depuis le début car la macro ne crée pas le "Rectangle 1". Lorsque que j'ai créé le "Rectangle 1" manuellement avec une taille de 10x15 que je dispose où je veux dans l'écran, le "Rectangle 1" contenant le BMP s'affiche et s'estompe.
Dans la Sub RemplaceImage sur la ligne qui bloque, ActiveSheet.Shapes("Rectangle 1").Delete, le Delete ne supprimerait-il pas le rectangle.
Dans ton message tu parles de coordonnées du "Rectangle 1" en F7 - G10 mais il semble que tu as codé F7 - F10, cela ne change rien apparemment car une fois que j'ai créer mon "Rectangle 1" et j'y ai insérer mon BMP et bien ta macron fonctionne du TONNERRE.
PETIT PRÉCISION : Concernant la mention où j'évoque que le "Rectangle 1" ne s'estompe pas, mais ne faisait que ce fermer. A l'origine ton rectangle se fermait en s'estompant progressivement mais une fois le BMP à l'intérieur, ta macro n'avais plus la fonction d’estompage de l'image mais elle disparaissait au bout de quelques secondes.
Donc que dois-je modifier pour que celle-ci ne provoque plus d'erreur.
J'espère que tu comprendras mes explications. Pour info, je suis sous Office 2021 - 64 bits
Bon codage et merci.
Bonjour Pigneau, bonjour à tous,
Tu as raison pour la référence de cellule, c'est bien F10 et non G10, désolé.
À l'ouverture du classeur, valide le premier bug de la macro Transparence puisque effectivement l'image n'existe pas.
Mets en commentaire (') la ligne "ActiveSheet.Shapes("Rectangle 1").Delete" de la macro RemplaceImage et lance la.
Crée alors ton image (BMP) en t'assurant qu'elle porte bien le nom adéquat ("Rectangle 1"), retire l'apostrophe du commentaire sur la ligne du 'Delete' et enregistre le classeur.
Rouvre le et teste avec ton image dedans.
Concernant la petite précision, comme nos versions d'Excel différent, je ne pourrai pas tester mais en modifiant le Delay = 0.02 en Delay = 0.09 (macro Transparence) par exemple tu peux avoir des comportements différents. À tester.
As tu la même chose sur les deux derniers classeurs que j'ai joint (Image Pigneau et Image Pigneau 2).
Bonne soirée
AL 22
AL 22
Modification faites pas de problème, cela fonctionne à merveille.
A ta dernière question oui j'avais le même problème.