Coder bouton ouvrir commondialog

Soyez le premier à donner votre avis sur cette source.

Snippet vu 6 395 fois - Téléchargée 47 fois

Contenu du snippet

J'avais posté un message sur le forum : Je voulais pouvoir ouvrir un fichier en cliquant sur le bouton ouvrir mais je ne savais pas comment le coder (en VBA). L'autre solution était de faire un clic droit sur le fichier et selectionné ouvir (là ça marche) mais c'était moins pratique pour l'utilisateur.
Donc :
- Ouvrez un nouveau projet.
- Sur form1, placez un bouton (Command1) et le controle CommonDialog (CommonDialog1).
- Collez ce code ( Code pour VB. un pett changement expliqué plus bas si c'est pour du VBA)

Ce code n'est pas de moi, mais de la gentille personne qui m'a repondu (pas sur VBFrance).

Source / Exemple :


Option Explicit
Private Declare Function FindExecutable Lib "shell32.dll" Alias "FindExecutableA" _
(ByVal lpFile As String, ByVal lpDirectory As String, _
ByVal lpResult As String) As Long

Private Sub Command1_Click()
Dim sFile As String
Dim sPath As String
Dim lPosition As Long
Dim sPathEXE As String
With CommonDialog1
.Filter = "Tous (*.*)|*.*"
.FileName = ""
.ShowOpen
sFile = .FileName
End With
If sFile <> "" Then
'Cherche la position du dernier "\"

'Attention la ligne qui suit ne marche pas en VBA, il faut mettre a la place :
'sTitle = Comondialog1.FileTitle
'lPosition = len (sFile) - len(sTitle)
'au lieu de :
lPosition = InStrRev(sFile, "\", -1)

'Extrait le chemin
sPath = Left(sFile, lPosition - 1)
'Extrait le nom du fichier
sFile = Mid(sFile, lPosition + 1)
'Recherche le programme associé à ce fichier
sPathEXE = FichierAssocie(sFile, sPath)
If sPathEXE <> "" Then
'Appelle le programme et ouvre le fichier
Shell sPathEXE & " " & sPath & "\" & sFile, vbNormalFocus
Else
MsgBox "Il n'y a aucun programme associé au fichier " & sFile & ".", vbExclamation
End If
End If
End Sub

Private Function FichierAssocie(stFichier As String, stChemin As String) As String
' Retour l'application associé au fichier passé en argument.
Dim stRep As String
Dim lgRep As Long
' Initialisation du buffer de retour
stRep = Space$(250)
' Appel à la fonction
lgRep = FindExecutable(stFichier, stChemin, stRep)
' Traitement de la valeur de retour
stRep = Left$(stRep, InStr(1, stRep, vbNullChar) - 1)
' Retourne le résultat
FichierAssocie = stRep
End Function

Conclusion :


N'hésitez pas à laisser un comentaire.

Stoomm.

A voir également

Ajouter un commentaire

Commentaires

pm_fougeray
Messages postés
3
Date d'inscription
lundi 9 février 2004
Statut
Membre
Dernière intervention
6 avril 2004
-
J'ai essaye ce code, avec VB6, mais lors de l'execution, le programme plante apres la selection du fichier.

Le message suivant s'affiche: "Erreur d'execution 453: Point d'entree FindexecutableA d'une dll introuvable dans shell32.dll"

Si quelqu'un a la reponse pour me sortir de cette affaire, je l'en remercie d'avance.

PM
Stoomm
Messages postés
26
Date d'inscription
vendredi 24 août 2001
Statut
Membre
Dernière intervention
11 novembre 2009
-
Bonjour,

Je viens de retester ce bout de code et il fonctionne tres bien chez moi...

Je suis sous Win 2000, mais il avait du aussi etre testé sous NT4.

Peut etre y a t-il une difference si vous etes sous XP ou 98, j'avoue ne pas savoir... Bon courage pour la suite, le bout du tunnel ne doit pas etre loin.

Stoomm.
euraznstyle
Messages postés
1
Date d'inscription
vendredi 21 mai 2004
Statut
Membre
Dernière intervention
9 juillet 2004
-
ton code ma super aidé
merci =)

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.