Boucle qui teste une cellule et joue un son quand celle ci .....

Signaler
Messages postés
7
Date d'inscription
samedi 15 février 2014
Statut
Membre
Dernière intervention
9 mars 2014
-
Messages postés
31082
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 janvier 2021
-
Bonjour,
voici la macro que j'ai actuellement et qui marchouille ! :):

sub timer()
application.ontime now + timevalue("00:00:01"), "jouer_son"
end sub

private sub jouer_son()
if range("horloge!c3").value = 1 then
chemein = activeworkbook.path
leson = chemin & "\tada.wav"
call playsound(leson, 0&, snd_async or snd_filename
end if
timer
end sub


le but de tout ça, est de vérifier l'état de c3 mais en décalant la boucle de 500 milisecondes pour être sûr de tomber sur ce créneau où c3 passe à 1 que pendant 1 seconde, et de jouer un son.
le soucis que j'ai:
pour être sur de ne pas rater ce créneau de 1s ,j'ai du le passer à 2s( si jamais ma boucle se trouve synchronisée avec l'horloge, je rate le coche)
Maintenant, il arrive que le son joue 2 fois parfois.

Dans le pire des cas, si aucune solution n est simple, y a t'il une commande pour lire le son jusqu'à la fin de ce dernier et une seule fois en sachant que l'alarme suivante arrive 3 minutes après ?

merci

3 réponses

Messages postés
15399
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
17 janvier 2021
501
Bonjour, il semble que ta macro soit codée en VBA.
Il ne s'agit donc pas d'un projet VB.Net.
Je déplace le sujet.

Un autre point merci d'utiliser la coloration syntaxique
http://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code .
Messages postés
31082
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 janvier 2021
342
Bonsoir,

Si le but est de surveiller ta cellule C3 ... pourquoi ne pas utiliser la méthode Change de ta feuille ?

http://msdn.microsoft.com/en-us/library/office/ff839775.aspx

Private Sub Worksheet_Change(ByVal Target As Range)
  Debug.Print Target.Address
  If Target.Address = "$C$3" Then
     If Target.Value = 1 Then MsgBox "je joue du piano debout...^^"
  End If
End Sub



Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
Bonjour,
As-tu une formule en C3 ?
Car si oui : l'évènement change doit concerner non la cellule C3, mais la cellule XX dont la modification génère celle de C3. Si la cellulle XX a elle-même une formule, il faudra considérer la modification de la cellule YY dont elle dépend, etc .... En bref : utiliser l'évènement Change concernant la toute première cellule sans formule générant un résultat par la formule située en C3. Ou alors utiliser l'évènement Calculate, qui serait toutefois très pénalisant si les recalculs concernent également d'autres cellules que celles directement liées à ton problème.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
Il est par ailleurs déconseillé de nommer Timer une macro. Timer est une fonction VBA.
Messages postés
31082
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 janvier 2021
342
As-tu une formule en C3 ?
Car si oui : l'évènement change doit concerner non la cellule C3, mais la cellule XX
Si il passe par une formule et qu'elle n'utilise que des cellules de la même feuille alors il ne teste pas le Target mais directement la vaeur de C3
Private Sub Worksheet_Change(ByVal Target As Range)
    If Range("C3").Value = 1 Then MsgBox "musicccc..."
End Sub


Mais pour l'instant, sans informations supplémentaires de la part du demandeur sur le fonctionnement de son fichier, on ne pourra faire que des suppositions....