Effacer une image

ray76

Nouveau membre
Bonjour a toutes et tous, forum bonjour

Dans la suite de mon programme, je rencontre un souci auquel je n’ai pas la solution.

Je m’explique :

Dans la colonne (A) j’ai une liste de films, quand je clic sur un nom de film, je lance Windows Média Player pour visualiser celui-ci et dans la foulée l’image correspondante au film s’affiche.

Quand je n’ai pas l’image du film, j’en affiche une autre par défaut toujours la même (Liberty.jpg)
Quand je clic sur WMP pour l’arrêter un message qui dit que WMP est a l’arrêt, je clic de nouveau et l’image s’efface, enfin presque d’où le souci.

En fait seule l’image (afficher par défaut s’efface) et en (aucun cas celle qui correspond au film) ne veut pas s’effacer.

Alors que bien sur dans les deux cas il faudrait de toutes manières effacer l’image par défaut OU celle correspondante au film.

Je joins le code qui permets de faire fonctionner ca et S’il vous plait de regarder mon code afin d’y déceler une erreur.

Par avance je vous remercie de corriger.

Bon 14 Juillet a vous et encore merci a vous et de votre temps.

Raymond

[cpp]'*** LANCE UN FILM SUR DOUBLE CLIC DANS LA LISTE COLONNE A
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim Chemin As String: Dim Fichier As String: Dim Shp As Shape: Dim Retval As Long: Dim ID As Variant
Application.ScreenUpdating = False

If Not Intersect(Target, Range("A2:A" & [A3000].End(xlUp).Row)) Is Nothing Then
Cancel = True
Chemin = "E:\Videos\"
Fichier = "E:\Affiche\" & Target.Value & ".jpg"
End If

'*** APPEL DU FILM CHOISI DANS LA COLONNE A
ID = Shell("""C:\Program Files\Windows Media Player\wmplayer.exe"" """ & Chemin & Target & ".avi", vbMaximizedFocus)
Retval = ExecCmd("Wmplayer.exe")

'*** APPEL DE L'IMAGE CORRESPONDANT AU FILM L T W H
On Error Resume Next
Set Shp = Feuil1.Shapes.AddPicture(Fichier, msoFalse, msoCTrue, 945, 196, 194, 240)
On Error GoTo 0
Fichier = IIf(Shp Is Nothing, "E:\Affiche\Liberty.jpg", Fichier)
Set Shp = Feuil1.Shapes.AddPicture(Fichier, msoFalse, msoCTrue, 945, 196, 194, 240)
Shp.Name = Fichier

Application.ScreenUpdating = True
'*** ARRET DU LECTEUR ET EFFACE L'AFFICHE
If Retval = -1 Then MsgBox "Windows média player est arrêter."
Shp.Delete
End Sub[/cpp]
 

zeb

Modérateur
Ce code n'est pas très beau, mais devrait fonctionner :(

Mais qu'est ce que vous avez tous avec ces On Error d'un autre âge :pfff:
Avant d'utiliser un fichier, on vérifie qu'il existe !

Code:
' // On Error Resume Next
' // Set Shp = Feuil1.Shapes.AddPicture(Fichier, msoFalse, msoCTrue, 945, 196, 194, 240)
' // On Error GoTo 0
' // Fichier = IIf(Shp Is Nothing, "E:\Affiche\Liberty.jpg", Fichier)
If Not FileExists(Fichier) Then Fichier = "E:\Affiche\Liberty.jpg"

Set Shp = Feuil1.Shapes.AddPicture(Fichier, msoFalse, msoCTrue, 945, 196, 194, 240)
Shp.Name = Fichier

Je propose une version de FileExists ici :
 

ray76

Nouveau membre


Salut Zed, forum

Merci pour ta réponse, j'ai essayer ton code mais ca bug ici ''' FileExists(Fichier) ''' en me générant une erreur de compilation sub ou fonction non définie

Ou bien je me suis planter en faisant la modification code ci-joint que j'ai modifier selon tes conseils

[cpp] '*** LANCE UN FILM SUR DOUBLE CLIC DANS LA LISTE COLONNE A
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim Chemin As String: Dim Fichier As String: Dim Shp As Shape: Dim Retval As Long: Dim ID As Variant
Application.ScreenUpdating = False

If Not Intersect(Target, Range("A2:A" & [A3000].End(xlUp).Row)) Is Nothing Then
Cancel = True
Chemin = "E:\Videos\"
Fichier = "E:\Affiche\" & Target.Value & ".jpg"
End If

'*** APPEL DU FILM CHOISI DANS LA COLONNE A
ID = Shell("""C:\Program Files\Windows Media Player\wmplayer.exe"" """ & Chemin & Target & ".avi", vbMaximizedFocus)
Retval = ExecCmd("Wmplayer.exe")

'*** APPEL DE L'IMAGE CORRESPONDANT AU FILM L T W H
If Not FileExists(Fichier) Then Fichier = "E:\Affiche\Liberty.jpg" '>>>>>>>>>>>>>>>>>>>> c'est ici l'erreur
Set Shp = Feuil1.Shapes.AddPicture(Fichier, msoFalse, msoCTrue, 945, 196, 194, 240)
Shp.Name = Fichier

Application.ScreenUpdating = True
'*** ARRET DU LECTEUR ET EFFACE L'AFFICHE
If Retval = -1 Then MsgBox "Windows média player est arrêter."
Shp.Name = Fichier
End Sub[/cpp]

Merci c'est sympa a toi

bonne après midi

Raymond



 

zeb

Modérateur


Il faut lire jusqu'au bout :sarcastic: ...

----------------------------------
Et pour la 1000ème fois, je m'appelle Zeb, avec un B final comme Bourricot !!!!!
Un ptit tour chez les télétubbies, avec deux B comme Bourricot devrait te faire réfléchir.
 

batchy

Grand Maître
C'est quoi ces vérifications d'un autre âge ?

Ton fichier existe peut être, mais c'est pas pour autant que tu a le droit de le lire ou qu'il n'est pas verrouillé. Et inutile d'essayer de commencer par tester si le fichier peut être lu, puisqu'aujourd'hui à l'heure du mélange des genres question lecteurs réseaux, entre le sharepoint/samba/cifs avec des ACL à la mord-moi-le-noeud, ça en deviens un bordel monstre à tel point que la réponse à la question "est ce que j'ai le droit d'ouvrir le fichier" peut être complètement bidon.

La solution c'est de chercher à lire le fichier et à gérer l'erreur. On peut pas faire autrement. Après, peut être qu'on peut gérer l'erreur sans utiliser On Error, mais là j'en sais rien.
 

zeb

Modérateur
Oh, batchy, VB n'est vraiment pas fait pour gérer les erreurs.
C'est comme si ses concepteurs avaient estimé que le monde était celui des bisounours :pfff:
 

ray76

Nouveau membre
Forum un peu bizarre et pas courtois

c'est plutot du style règlement

auriez vous oubliez qu'un jour on a tous appris a marcher

je croyais que le but d'un forum était d'un bénévola pour aider

les autres et non pas pour les crucifiés
 

zeb

Modérateur
Salut Ray,

Les conseils que je dispense sur ce forum sont avisés. Et ceux de Batchy le sont aussi.

Or, aucun de nous deux ne détient la vérité absolue, et nous apportons indépendamment notre avis. Parfois nous ne sommes pas d'accord, et nous en débattons, en nous justifiant, en nous expliquant. Jamais je ne manquerai de courtoisie envers un membre de ce forum sous prétexte que je ne suis pas du même avis que lui, et j'ajoute même qu'en tant que modérateur, je tente de faire respecter cet état d'esprit.

Par ailleurs, si tu ne lis pas de salutations entre batchy et moi sur ton sujet, ne pense pas que nous ne nous respectons pas. Au contraire. Nous nous sommes sans doute déjà échangé des politesses plus tôt dans un autre sujet, puisque nous sommes de gros contributeurs, souvent d'accord, en plus ;)
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 152
Messages
6 718 437
Membres
1 586 427
Dernier membre
Huxley88
Partager cette page
Haut