Son et message sous excel VBA

Résolu
mod77 Messages postés 1273 Date d'inscription vendredi 10 juillet 2009 Statut Membre Dernière intervention 14 janvier 2024 - 2 nov. 2012 à 23:40
 Utilisateur anonyme - 4 nov. 2012 à 10:58
Bonsoir,

J'ai un doute avec mon application qui comporte des boutons de commande et qui charge des photos sur chacun d'eux.
Aussi, j'ai décidé de mettre une instruction pour être certain que le chargement des photos est terminé et un message furtif lorsque je clique sur un bouton.
Mais je ne sais pas comment faire.

1-Comment afficher un message du type "point attribué" et qui s'efface tout seul après un peu moins d'1 seconde ou une seconde au plus?

2-Comment émettre un Bip ?

Merci de votre aide.

10 réponses

Utilisateur anonyme
3 nov. 2012 à 00:47
Commence par te créer ton petit message avec une zone de texte (via les graphiques d'Excel) que tu renomme en MsgInfo

Puis voilà un petit code pour te donner une idée

D'abord ajouter ca au début de ton module (retire éventuellement les PtrSafe si il n'est pas content) :
Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Declare PtrSafe Function Beep Lib "kernel32.dll" (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long


A placer après ton traitement :
Dim shape As shape
Set shape = ActiveSheet.Shapes("MsgInfo")
shape.Visible = msoTrue

Call Sleep(1000) 'Attente 1 seconde
Call Beep(800, 500) ' Beep pendant 500ms
shape.Visible = msoFalse


Par contre l'attente est bloquante, aucune actions ne pourra être faite pendant ce temps

_____________
Kenji
3
Utilisateur anonyme
3 nov. 2012 à 00:57
Deuxième possibilité sans les API et l'attente non bloquante

Dim shape As shape
Set shape = ActiveSheet.Shapes("MsgInfo")
shape.Visible = msoTrue
Application.OnTime Now + TimeValue("00:00:01"), "WaitEnd"


Et la fonction de fin

Public Sub WaitEnd()
  Dim shape As shape
  Set shape = ActiveSheet.Shapes("MsgInfo")
  VBA.Beep
  shape.Visible = msoFalse
End Sub


_____________
Kenji
3
Utilisateur anonyme
3 nov. 2012 à 11:45
Si tu veux conserver la TextBox, il faut passer par un OLEObject

Public Sub WaitEnd()
  Dim ctrl As OLEObject
  Set ctrl = ActiveSheet.OLEObjects("MsgInfo1")
  VBA.Beep
  ctrl.Visible = False
End Sub


Dim ctrl As OLEObject
Set ctrl = ActiveSheet.OLEObjects("MsgInfo1")
ctrl.Visible = True
Application.OnTime Now + TimeValue("00:00:01"), "WaitEnd"



_____________
Kenji
3
Utilisateur anonyme
3 nov. 2012 à 00:07
Bonsoir,

Plusieurs choix :

Soit tu affiche le message dans un forme (rectangle, cercle ...) que tu fais apparaitre ou disparaitre
Sois tu affiche une message style msgbox mais de ta propre conception (UserFrom)
Soit juste un texte écris dans une cellule, et qui s'efface après

Soit faire un Bip avec le son de Windows
Soit faire un Bip avec le buzzer du PC


_____________
Kenji
0

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

Posez votre question
mod77 Messages postés 1273 Date d'inscription vendredi 10 juillet 2009 Statut Membre Dernière intervention 14 janvier 2024
3 nov. 2012 à 00:34
J'aimerais que le message "Point attribué!"s'affiche dans un rectangle simple mais qu'il disparaisse sans mon intervention.

Pour le bip le buzzer pc conviendra car je compte opter pour Open office prochainement et y transférer mon application.

Merci
0
mod77 Messages postés 1273 Date d'inscription vendredi 10 juillet 2009 Statut Membre Dernière intervention 14 janvier 2024
3 nov. 2012 à 11:25
Bonjour Charles Racaud,
J'ai essayé la 2e méthode.
J'ai retiré effectivement les ptrSafe, mais
j'ai un message d'erreur qui apparait de temps en temps" Erreur d'exécution n°5: argument ou appel de procédure incorrecte" au niveau de "shape =...".

Mais je ne comprends pas une chose:
J'ai créé ma zone texte MsgInfo1. Via propriété j'ai mis le texte "note attribuée".
Mais il est toujours visible.

Et où dois-je mettre le 1er code "Dim shape.."
0
Utilisateur anonyme
3 nov. 2012 à 11:30
Attention, ce n'est pas un control (ActiveX ou formulaire) qu'il faut insérer mais un dessin Excel
Le premier code se met à la fin de ton traitement.

_____________
Kenji
0
mod77 Messages postés 1273 Date d'inscription vendredi 10 juillet 2009 Statut Membre Dernière intervention 14 janvier 2024
3 nov. 2012 à 11:35
Voici le fichier ça sera plus simple:
http://cjoint.com/?3KdlIRQdrwt
0
mod77 Messages postés 1273 Date d'inscription vendredi 10 juillet 2009 Statut Membre Dernière intervention 14 janvier 2024
3 nov. 2012 à 22:00
J'ai essayé mais j'ai trop de mal alors je me contente de fenêtre de message.

Mais je vous remercie beaucoup de votre aide.
0
Utilisateur anonyme
4 nov. 2012 à 10:58
Quel a été le problèmes ? J'ai fais tes testes sur ton document, ca marchais très bien.
Attention, il faut placer la fonction WaitEnd dans un module et remplacer ActiveSheet par ta feuille Application donc "Feuil3"

_____________
Kenji
0
Rejoignez-nous