OVH Cloud OVH Cloud

Calendrier de l'Avent [Correctif]

20 réponses
Avatar
Modeste
Bonsour®
petits correctifs suite aux remarques émises
;o)))
http://cjoint.com/?lDwVpB75S5
Tout dézipper dans un même répertoire
le contenu est actif à partir du 1er décembre ;o)))

--
@+
;o)))

10 réponses

1 2
Avatar
Philippe.R
Bonjour Misange,
On va bien voir s'il y a aussi, parmi les dotés d'outils dernier cri, des
caleçons qui se manifestent.
;o)))
--
http://www.excelabo.net/mpfe/connexion.php
News://news.microsoft.com/microsoft.public.fr.excel
Avec plaisir
http://dj.joss.free.fr/trombine.htm
Philippe.R
"Misange" a écrit dans le message de
news:
ben moi avec XP et XL2007 j'ai pas de son non plus :-(
pour l'instant les pas de sons sont majoritaires non ?
Misange

Bonjour votre ferveuR,

N'ai-je pas été assez sage..?


Bonjour,

Eh bien moi, j'ai du être sage !

Avec mon XL2000 et mon vieux Win Me, ça marche.
:-))



--
Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !
http://xlwiki.free.fr/wiki
http://www.excelabo.net




Avatar
Modeste
Bonsour® Jacques93 avec ferveur ;o))) vous nous disiez :

. Mais en modifiant la ligne :
r% = mciSendString("OPEN " + FileToPlay + " TYPE SEQUENCER ALIAS "
+ Alias, 0&, 0, 0)
pour y ajouter le chemin, c'est OK :


tu as raison Jacques...
dans ce genre de truc, préciser le chemin complet est toujours sécuritaire,
d'autant que je ne teste pas réellement le code retour, .
pour moi, le fichier étant réellement là, le son à toujour été audible

:-(((
Car en effet même chez moi XP Home + EXCEL 2002
chemin ou pas chemin ...
j'ai un code retour 289 sur l'instruction OPEN
"l'alias spécifié est déja utilisé dans cette application. utilisez un alias
unique" ??????

code retour 0 sur l'instruction PLAY
????? le son MID est émis !!!!!

code retour 263 sur l'instruction CLOSE ANIMATION
"le péripherique spécifié n'est pas ouvert ou n'est par reconnu par MCI " ?????

j'utilise un code adapté de API-Guide 3.7 (allapinet.org)
For a list of possible error values, see Constants: MCIERR Return Values.
ou trouve-t-on les MCIERR Return Value ???

????
j'ai utilisé cette façon de faire déja dans plusieurs fichiers, sans faire
attention à ces problemes
notament dans
http://excelabo.net/moteurs/compteclic.php?nom=gd-matriochkas
et
http://excelabo.net/moteurs/compteclic.php?nom=gd-hanoi

@+
;o)))

Avatar
Jacques93
Bonjour Modeste,

Le problème semble lié au répertoire courant, sous XP avec Office 2003
la fonction CurDir me renvoie :

C:Documents and SettingsJacquesMes documents

sous Vista avec Excel 2007 :

F:UsersJacquesDocuments

qui sont les répertoires par défaut d'Excel (modifiable
dans options => Général), et c'est là que les .mid sont recherchés, je
pense, et donc non trouvés, car je les ai installés, comme le .xls,
dans :

C:Calendrier

D'ailleurs pour la texture, tu indiques bien le répertoire du classeur :

ThisWorkbook.Path & "texture" & Format(Target, "0000") & ".jpg"

Pour les codes erreurs de mciSendString, ils sont dans mmsystem.h
(154 494 octets), livré avec VC++ . Les codes erreurs retranscrits en
VB, euh y'a du monde ...

' ---------------------------------------------------------------------
Private Const MCIERR_BASE = 256

' MCI error return values
Private Const MCIERR_INVALID_DEVICE_ID = (MCIERR_BASE + 1)
Private Const MCIERR_UNRECOGNIZED_KEYWORD = (MCIERR_BASE + 3)
Private Const MCIERR_UNRECOGNIZED_COMMAND = (MCIERR_BASE + 5)
Private Const MCIERR_HARDWARE = (MCIERR_BASE + 6)
Private Const MCIERR_INVALID_DEVICE_NAME = (MCIERR_BASE + 7)
Private Const MCIERR_OUT_OF_MEMORY = (MCIERR_BASE + 8)
Private Const MCIERR_DEVICE_OPEN = (MCIERR_BASE + 9)
Private Const MCIERR_CANNOT_LOAD_DRIVER = (MCIERR_BASE + 10)
Private Const MCIERR_MISSING_COMMAND_STRING = (MCIERR_BASE + 11)
Private Const MCIERR_PARAM_OVERFLOW = (MCIERR_BASE + 12)
Private Const MCIERR_MISSING_STRING_ARGUMENT = (MCIERR_BASE + 13)
Private Const MCIERR_BAD_INTEGER = (MCIERR_BASE + 14)
Private Const MCIERR_PARSER_INTERNAL = (MCIERR_BASE + 15)
Private Const MCIERR_DRIVER_INTERNAL = (MCIERR_BASE + 16)
Private Const MCIERR_MISSING_PARAMETER = (MCIERR_BASE + 17)
Private Const MCIERR_UNSUPPORTED_FUNCTION = (MCIERR_BASE + 18)
Private Const MCIERR_FILE_NOT_FOUND = (MCIERR_BASE + 19)
Private Const MCIERR_DEVICE_NOT_READY = (MCIERR_BASE + 20)
Private Const MCIERR_INTERNAL = (MCIERR_BASE + 21)
Private Const MCIERR_DRIVER = (MCIERR_BASE + 22)
Private Const MCIERR_CANNOT_USE_ALL = (MCIERR_BASE + 23)
Private Const MCIERR_MULTIPLE = (MCIERR_BASE + 24)
Private Const MCIERR_EXTENSION_NOT_FOUND = (MCIERR_BASE + 25)
Private Const MCIERR_OUTOFRANGE = (MCIERR_BASE + 26)
Private Const MCIERR_FLAGS_NOT_COMPATIBLE = (MCIERR_BASE + 28)
Private Const MCIERR_FILE_NOT_SAVED = (MCIERR_BASE + 30)
Private Const MCIERR_DEVICE_TYPE_REQUIRED = (MCIERR_BASE + 31)
Private Const MCIERR_DEVICE_LOCKED = (MCIERR_BASE + 32)
Private Const MCIERR_DUPLICATE_ALIAS = (MCIERR_BASE + 33)
Private Const MCIERR_BAD_CONSTANT = (MCIERR_BASE + 34)
Private Const MCIERR_MUST_USE_SHAREABLE = (MCIERR_BASE + 35)
Private Const MCIERR_MISSING_DEVICE_NAME = (MCIERR_BASE + 36)
Private Const MCIERR_BAD_TIME_FORMAT = (MCIERR_BASE + 37)
Private Const MCIERR_NO_CLOSING_QUOTE = (MCIERR_BASE + 38)
Private Const MCIERR_DUPLICATE_FLAGS = (MCIERR_BASE + 39)
Private Const MCIERR_INVALID_FILE = (MCIERR_BASE + 40)
Private Const MCIERR_NULL_PARAMETER_BLOCK = (MCIERR_BASE + 41)
Private Const MCIERR_UNNAMED_RESOURCE = (MCIERR_BASE + 42)
Private Const MCIERR_NEW_REQUIRES_ALIAS = (MCIERR_BASE + 43)
Private Const MCIERR_NOTIFY_ON_AUTO_OPEN = (MCIERR_BASE + 44)
Private Const MCIERR_NO_ELEMENT_ALLOWED = (MCIERR_BASE + 45)
Private Const MCIERR_NONAPPLICABLE_FUNCTION = (MCIERR_BASE + 46)
Private Const MCIERR_ILLEGAL_FOR_AUTO_OPEN = (MCIERR_BASE + 47)
Private Const MCIERR_FILENAME_REQUIRED = (MCIERR_BASE + 48)
Private Const MCIERR_EXTRA_CHARACTERS = (MCIERR_BASE + 49)
Private Const MCIERR_DEVICE_NOT_INSTALLED = (MCIERR_BASE + 50)
Private Const MCIERR_GET_CD = (MCIERR_BASE + 51)
Private Const MCIERR_SET_CD = (MCIERR_BASE + 52)
Private Const MCIERR_SET_DRIVE = (MCIERR_BASE + 53)
Private Const MCIERR_DEVICE_LENGTH = (MCIERR_BASE + 54)
Private Const MCIERR_DEVICE_ORD_LENGTH = (MCIERR_BASE + 55)
Private Const MCIERR_NO_INTEGER = (MCIERR_BASE + 56)

' Erreurs .wav
Private Const MCIERR_WAVE_OUTPUTSINUSE = (MCIERR_BASE + 64)
Private Const MCIERR_WAVE_SETOUTPUTINUSE = (MCIERR_BASE + 65)
Private Const MCIERR_WAVE_INPUTSINUSE = (MCIERR_BASE + 66)
Private Const MCIERR_WAVE_SETINPUTINUSE = (MCIERR_BASE + 67)
Private Const MCIERR_WAVE_OUTPUTUNSPECIFIED = (MCIERR_BASE + 68)
Private Const MCIERR_WAVE_INPUTUNSPECIFIED = (MCIERR_BASE + 69)
Private Const MCIERR_WAVE_OUTPUTSUNSUITABLE = (MCIERR_BASE + 70)
Private Const MCIERR_WAVE_SETOUTPUTUNSUITABLE = (MCIERR_BASE + 71)
Private Const MCIERR_WAVE_INPUTSUNSUITABLE = (MCIERR_BASE + 72)
Private Const MCIERR_WAVE_SETINPUTUNSUITABLE = (MCIERR_BASE + 73)

' Erreurs .mid
Private Const MCIERR_SEQ_DIV_INCOMPATIBLE = (MCIERR_BASE + 80)
Private Const MCIERR_SEQ_PORT_INUSE = (MCIERR_BASE + 81)
Private Const MCIERR_SEQ_PORT_NONEXISTENT = (MCIERR_BASE + 82)
Private Const MCIERR_SEQ_PORT_MAPNODEVICE = (MCIERR_BASE + 83)
Private Const MCIERR_SEQ_PORT_MISCERROR = (MCIERR_BASE + 84)
Private Const MCIERR_SEQ_TIMER = (MCIERR_BASE + 85)
Private Const MCIERR_SEQ_PORTUNSPECIFIED = (MCIERR_BASE + 86)
Private Const MCIERR_SEQ_NOMIDIPRESENT = (MCIERR_BASE + 87)

Private Const MCIERR_NO_WINDOW = (MCIERR_BASE + 90)
Private Const MCIERR_CREATEWINDOW = (MCIERR_BASE + 91)
Private Const MCIERR_FILE_READ = (MCIERR_BASE + 92)
Private Const MCIERR_FILE_WRITE = (MCIERR_BASE + 93)

Private Const MCIERR_NO_IDENTITY = (MCIERR_BASE + 94)


Bonsour® Jacques93 avec ferveur ;o))) vous nous disiez :

. Mais en modifiant la ligne :
r% = mciSendString("OPEN " + FileToPlay + " TYPE SEQUENCER ALIAS "
+ Alias, 0&, 0, 0)
pour y ajouter le chemin, c'est OK :


tu as raison Jacques...
dans ce genre de truc, préciser le chemin complet est toujours sécuritaire,
d'autant que je ne teste pas réellement le code retour, .
pour moi, le fichier étant réellement là, le son à toujour été audible

:-(((
Car en effet même chez moi XP Home + EXCEL 2002
chemin ou pas chemin ...
j'ai un code retour 289 sur l'instruction OPEN
"l'alias spécifié est déja utilisé dans cette application. utilisez un alias
unique" ??????

code retour 0 sur l'instruction PLAY
????? le son MID est émis !!!!!

code retour 263 sur l'instruction CLOSE ANIMATION
"le péripherique spécifié n'est pas ouvert ou n'est par reconnu par MCI " ?????

j'utilise un code adapté de API-Guide 3.7 (allapinet.org)
For a list of possible error values, see Constants: MCIERR Return Values.
ou trouve-t-on les MCIERR Return Value ???

????
j'ai utilisé cette façon de faire déja dans plusieurs fichiers, sans faire
attention à ces problemes
notament dans
http://excelabo.net/moteurs/compteclic.php?nom=gd-matriochkas
et
http://excelabo.net/moteurs/compteclic.php?nom=gd-hanoi

@+
;o)))





--
Cordialement,

Jacques.


Avatar
Jacques93
la commande ClOSE est sensé stopper la lecture, mais son paramètre est
en fait le nom de l'alias, voir :

<http://support.microsoft.com/kb/463361/fr>

donc ici cela serait :

r% = mciSendString("CLOSE " + Alias, 0&, 0, 0)

et cela arrête bien la lecture, ce qui n'est pas le but. Mais à mon
avis, cela prête à confusion, je remplacerai la variable :

Dim Alias as String

par

Dim MonMid as String

et le code devient :

Sub stop_Musique()
r% = mciSendString("STOP " + MonMid, 0&, 0, 0)
r% = mciSendString("CLOSE " + MonMid, 0&, 0, 0)
DoEvents
End Sub

Sub Musique()
r% = mciSendString("OPEN " + ActiveWorkbook.Path + "" + _
FileToPlay + " TYPE SEQUENCER ALIAS " + MonMid, 0&, 0, 0)
r% = mciSendString("PLAY " + MonMid + " FROM 0", 0&, 0, 0)
End Sub


Il faut modifier le code de la feuille aussi pour l'initialisation de
MonMid ;-)

Bonsour® Jacques93 avec ferveur ;o))) vous nous disiez :


[...]

code retour 0 sur l'instruction PLAY
????? le son MID est émis !!!!!

code retour 263 sur l'instruction CLOSE ANIMATION
"le péripherique spécifié n'est pas ouvert ou n'est par reconnu par MCI " ?????




--
Cordialement,

Jacques.

Avatar
Modeste
Bonsour® Jacques93 avec ferveur ;o))) vous nous disiez :

merci pour tes investigation et réponses
Le problème semble lié au répertoire courant, sous XP avec Office 2003
la fonction CurDir me renvoie :
C:Documents and SettingsJacquesMes documents
sous Vista avec Excel 2007 :
F:UsersJacquesDocuments
qui sont les répertoires par défaut d'Excel (modifiable
dans options => Général), et c'est là que les .mid sont recherchés, je
pense, et donc non trouvés, car je les ai installés, comme le .xls,
dans :
C:Calendrier


Et la lumière fut !!!!!
le fait d'indiquer le chemin devrait suffir au device MCI ....
Mais ... Mais
Celui-ci ne sait pas interpréter les chemins contenant un ou des espaces
Filetoplay C:Documents and SettingsmoiMes documentsMes fichiers
reçuscalendrier_de_l_aventnoel19.MID
Alias C:Documents and SettingsmoiMes documentsMes fichiers
reçuscalendrier_de_l_aventnoel19
OPEN 259
PLAY 263

Filetoplay C:tempcalendrier_de_l_aventnoel19.MID
Alias C:tempcalendrier_de_l_aventnoel19
OPEN 0
PLAY 0

tentative de correction :
ça marche, le PLAY marche à chaque fois,
mais on a toujours le cas DUPLICATE ALIAS sur OPEN
'================== Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA"
(ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal
uReturnLength As Long, ByVal hwndCallback As Long) As Long
Dim MonMid As String, chemin As String
Sub Play_midi()
chemin = ThisWorkbook.Path
MonMid = "noel" & Format(1 + Int(Rnd() * 25), "00")
filetoplay = Chr(34) & chemin & "" & MonMid & ".MID" & Chr(34)
'play midi
R% = mciSendString("OPEN " + filetoplay + " TYPE SEQUENCER ALIAS " + MonMid,
0&, 0, 0)
R% = mciSendString("PLAY " + MonMid + " FROM 0", 0&, 0, 0)
R% = mciSendString("CLOSE ANIMATION", 0&, 0, 0)
DoEvents
'play midi for 10 secs
Application.Wait Now + TimeValue("00:00:05")

'stop midi and close it
R% = mciSendString("OPEN " + filetoplay + " TYPE SEQUENCER ALIAS " + MonMid,
0&, 0, 0)
R% = mciSendString&("STOP " + MonMid, 0&, 0, 0)
R% = mciSendString&("CLOSE ANIMATION", 0&, 0, 0)
DoEvents
End Sub
'===================



@+
;o)))

Avatar
Modeste
Bonsour® Jacques93 avec ferveur ;o))) vous nous disiez :

la commande ClOSE est sensé stopper la lecture, mais son paramètre est
en fait le nom de l'alias, voir :> http://support.microsoft.com/kb/463361/fr>
donc ici cela serait :> r% = mciSendString("CLOSE " + Alias, 0&, 0, 0)
et cela arrête bien la lecture, ce qui n'est pas le but. Mais à mon
avis, cela prête à confusion


en fait aprés compilation de tous ces documents
Alias une un nom quelconque donné par l'utilisateur désignant l'instance du
péripherique multimedia utilisé et ne correspond donc pas à une redefinition du
fichier lu

'------------Lecteur midi passe-partout pour VBA EXCEL---------------------
Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA"
(ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal
uReturnLength As Long, ByVal hwndCallback As Long) As Long

Sub Play_midi()
fileToplay = Application.GetOpenFilename("MIDI Files (*.MID), *.MID")
If fileToplay <> False Then
'-----Fermeture préventive du lecteur MIDI
R% = mciSendString("CLOSE Mon_Lecteur_MIDI", 0&, 0, 0)
'-----ouverture du fichier MIDI
' ----- ajout de guillemets(chr(34)) pour encadrer le nom du fichier à lire
' ------et éviter le probleme des espaces dans la chaine
R% = mciSendString("OPEN " + Chr(34) + fileToplay + Chr(34) + " TYPE
SEQUENCER ALIAS Mon_Lecteur_MIDI", 0&, 0, 0)
'-----Lecture du fichier MIDI
R% = mciSendString("PLAY Mon_Lecteur_MIDI FROM 0", 0&, 0, 0)
'-----Exécution masquée
R% = mciSendString("CLOSE ANIMATION", 0&, 0, 0)
DoEvents
End If
End Sub

l'application Calendrier de l'Avent modifiée en conséquence
http://cjoint.com/?mdkUBffE0T




@+
;o)))

Avatar
Jacques93
Bonjour Modeste,

Tout à fait d'accord, sauf pour

If FileToPlay = False (incompatibilité de type)

mais il n'est pas dans le classeur, et

CLOSE ANIMATION

mais dans le classeur il est en remarque, donc c'est bon :-)

Dans les codes qu'on trouve sur la toile ANIMATION est en fait un
alias, utilisé en général pour la lecture de vidéo .avi par exemple.

Bonsour® Jacques93 avec ferveur ;o))) vous nous disiez :

la commande ClOSE est sensé stopper la lecture, mais son paramètre est
en fait le nom de l'alias, voir :> http://support.microsoft.com/kb/463361/fr>
donc ici cela serait :> r% = mciSendString("CLOSE " + Alias, 0&, 0, 0)
et cela arrête bien la lecture, ce qui n'est pas le but. Mais à mon
avis, cela prête à confusion


en fait aprés compilation de tous ces documents
Alias une un nom quelconque donné par l'utilisateur désignant l'instance du
péripherique multimedia utilisé et ne correspond donc pas à une redefinition du
fichier lu

'------------Lecteur midi passe-partout pour VBA EXCEL---------------------
Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA"
(ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal
uReturnLength As Long, ByVal hwndCallback As Long) As Long

Sub Play_midi()
fileToplay = Application.GetOpenFilename("MIDI Files (*.MID), *.MID")
If fileToplay <> False Then
'-----Fermeture préventive du lecteur MIDI
R% = mciSendString("CLOSE Mon_Lecteur_MIDI", 0&, 0, 0)
'-----ouverture du fichier MIDI
' ----- ajout de guillemets(chr(34)) pour encadrer le nom du fichier à lire
' ------et éviter le probleme des espaces dans la chaine
R% = mciSendString("OPEN " + Chr(34) + fileToplay + Chr(34) + " TYPE
SEQUENCER ALIAS Mon_Lecteur_MIDI", 0&, 0, 0)
'-----Lecture du fichier MIDI
R% = mciSendString("PLAY Mon_Lecteur_MIDI FROM 0", 0&, 0, 0)
'-----Exécution masquée
R% = mciSendString("CLOSE ANIMATION", 0&, 0, 0)
DoEvents
End If
End Sub

l'application Calendrier de l'Avent modifiée en conséquence
http://cjoint.com/?mdkUBffE0T




@+
;o)))





--
Cordialement,

Jacques.


Avatar
Misange
Ah cette fois ça marche !
Avec un petit truc marrant : j'ai fermé le classeur mais la musique elle
est allée jusqu'au bout de la chanson :-)
Misange

Bonsour® Jacques93 avec ferveur ;o))) vous nous disiez :

la commande ClOSE est sensé stopper la lecture, mais son paramètre est
en fait le nom de l'alias, voir :> http://support.microsoft.com/kb/463361/fr>
donc ici cela serait :> r% = mciSendString("CLOSE " + Alias, 0&, 0, 0)
et cela arrête bien la lecture, ce qui n'est pas le but. Mais à mon
avis, cela prête à confusion


en fait aprés compilation de tous ces documents
Alias une un nom quelconque donné par l'utilisateur désignant l'instance du
péripherique multimedia utilisé et ne correspond donc pas à une redefinition du
fichier lu

'------------Lecteur midi passe-partout pour VBA EXCEL---------------------
Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA"
(ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal
uReturnLength As Long, ByVal hwndCallback As Long) As Long

Sub Play_midi()
fileToplay = Application.GetOpenFilename("MIDI Files (*.MID), *.MID")
If fileToplay <> False Then
'-----Fermeture préventive du lecteur MIDI
R% = mciSendString("CLOSE Mon_Lecteur_MIDI", 0&, 0, 0)
'-----ouverture du fichier MIDI
' ----- ajout de guillemets(chr(34)) pour encadrer le nom du fichier à lire
' ------et éviter le probleme des espaces dans la chaine
R% = mciSendString("OPEN " + Chr(34) + fileToplay + Chr(34) + " TYPE
SEQUENCER ALIAS Mon_Lecteur_MIDI", 0&, 0, 0)
'-----Lecture du fichier MIDI
R% = mciSendString("PLAY Mon_Lecteur_MIDI FROM 0", 0&, 0, 0)
'-----Exécution masquée
R% = mciSendString("CLOSE ANIMATION", 0&, 0, 0)
DoEvents
End If
End Sub

l'application Calendrier de l'Avent modifiée en conséquence
http://cjoint.com/?mdkUBffE0T




@+
;o)))




--
Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !
http://xlwiki.free.fr/wiki
http://www.excelabo.net


Avatar
Modeste
Bonsour® Misange avec ferveur ;o))) vous nous disiez :

Ah cette fois ça marche !
Avec un petit truc marrant : j'ai fermé le classeur mais la musique
elle est allée jusqu'au bout de la chanson :-)
c'est normal le player MIDI est piloté mais reste indépendant d'EXCEL

et comme je ne l'arrete pas en quittant ...

--
--
@+
;o)))

Avatar
Misange
pas grave la musique d'hier était mignonne :-)

Misange migrateuse
XlWiki : Participez à un travail collaboratif sur excel !
http://xlwiki.free.fr/wiki
http://www.excelabo.net

Bonsour® Misange avec ferveur ;o))) vous nous disiez :

Ah cette fois ça marche !
Avec un petit truc marrant : j'ai fermé le classeur mais la musique
elle est allée jusqu'au bout de la chanson :-)
c'est normal le player MIDI est piloté mais reste indépendant d'EXCEL

et comme je ne l'arrete pas en quittant ...

--
--
@+
;o)))





1 2