Lancer fichiers depuis une ListBox d'un userForm

brutor2 Messages postés 8 Date d'inscription jeudi 9 octobre 2008 Statut Membre Dernière intervention 1 février 2009 - 30 janv. 2009 à 22:37
brutor2 Messages postés 8 Date d'inscription jeudi 9 octobre 2008 Statut Membre Dernière intervention 1 février 2009 - 1 févr. 2009 à 19:06
Bonsoir à tous,

Je suis débutant en VBA, et je souhaiterais réaliser un UserForm sous Excel contenant une ListBox depuis laquelle je pourrais lancer certains fichiers (Xls, Doc ou autre...).
J'ai réussi par l'intermédiaire de recherche sur le forum à visualiser les fichiers dans cette ListBox.
Mais je n'ai rien trouvé comme solution pour lancer ces fichiers en cliquant dessus.

1. Auriez-vous une solution ou une piste à me proposer ?

2. Peut-on ne faire apparaître que le nom du fichier sans son extension ?

Merci d'avance pour votre aide.

Brutor2

PS : je vous joint le code utilisé pour afficher les fichiers dans ma ListBox

Private Sub UserForm_Activate()
  Dim i As Integer, Chemin As String, Fichier As String
  Chemin = "C:\Documents and Settings\Brutor2\Mes documents\*.xls"  (ce pourrais être un doc, un pdf, ...)
  Fichier = Dir(Chemin)
   Do While (Len(Fichier) > 0)
    Me.ListBox1.AddItem Fichier
    Fichier = Dir()
     Loop
End Sub

6 réponses

cs_ghuysmans99 Messages postés 3983 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
30 janv. 2009 à 22:57
Voir l'API ShellExecute
0
cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 4
31 janv. 2009 à 05:39
bonjour


<hr />


1. Pour lancer une application en ouvrant un fichier :

a) tu peux utiliser shell, comme dans l'exemple suivant :

Dim id as double
id = Shell("winword ""C:\Documents and Settings\Brutor2\Mes documents\Document1.doc""")
If id = 0 Then Msgbox "L'ouverture du fichier a échoué"

b) Si tous les fichiers sont gérés par des applications Office

Si les applications qui ouvrent tes applications font partie d'Office (powerpoint, word, excel...) tu peux profiter d'Automation, comme dans l'exemple suivant :

Dim word As Object
Set word = CreateObject("Word.Application")
word.Documents.Open "C:\Documents and Settings\Brutor2\Mes documents\Document1.doc"
...
word.ActiveDocument.Close
Set word = Nothing

c) Tu peux également utiliser un canal DDE, comme dans l'exemple suivant :

Dim canal as Long
canal = DDEInitiate("winword",  ""C:\Documents and Settings\Brutor2\Mes documents\Document1.doc""")
If canal = 0 Then Msgbox "L'ouverture du fichier a échoué"

Sans oublier l'utilisation des fonctions de l'api de Windows, comme te l'a suggèré ghuysmans99.

En marge, je te cite pèle-mèle quelques instructions qui te seront peut-être utiles :

AppActivate : active une fenêtre d'application
SendKeys : envoie une séquence de touches à la fenêtre active
DDEExecute, DDERequest, DDETerminate, qui permettent de contrôler l'application en utilisant un canal DDE.

<hr />
2) pour récupérer le nom d'un fichier sans son extension :

a) méthode longue mais recommandée car consommant peu de ressources :

Dim chemin As String, elements, fichier As String
chemin = "C:\Documents and Settings\Brutor2\Mes documents\Classeur1.xls"
elements = Split(chemin, "")
fichier = elements(UBound(elements))   ' nom du fichier avec son extension
If InStr(1, fichier, ".") <> 0 Then
    elements = Split(fichier, ".")
    ReDim Preserve elements(UBound(elements) - 1)
    fichier = Join(elements, ".")
End If
MsgBox "Nom du fichier sans extension : " & fichier

b) méthode plus courte, déconseillée :

Dim fs, chemin As String, fichier
chemin = "C:\Documents and Settings\Brutor2\Mes documents\Classeur1.xls"
Set fs = CreateObject("Scripting.FileSystemObject")
fichier = fs.GetBaseName(chemin)
Msgbox "Nom du fichier sans extension : " & fichier

Amicalement
0
brutor2 Messages postés 8 Date d'inscription jeudi 9 octobre 2008 Statut Membre Dernière intervention 1 février 2009
31 janv. 2009 à 13:41
Bonjour ghuysmans99, Bonjour Orehena, Bonjour le forum,

Merci de votre attention.

Pas très calé j'ai donc essayé d'appliquer vos conseils.

Concernant les différents choix voici les résultats :

<ol><li>Pour lancer une application en ouvrant un fichier</li></ol>a) J'ai mis ce code dans le click de la ListBox, le fichier se lance mais ce quel que soit le fichier séléctionné.c'est le fichier inscrit dans le code
Je voudrais que chaque click sur le fichier lance le bon fichier.
Faut-il repeter ce code pour chaque fichiers.

J'ai essayé de mettre

Private Sub ListBox1_Click()
Dim id As Double
id = Shell("winword ""C:\Documents and Settings\Brutor2\Mes documents\*.doc""")
If id = 0 Then MsgBox "L'ouverture du fichier a échoué"
End Sub

Mais là c'est le premier fichier de la liste qui se lance uniquement

b) cette méthode marche mais uniquement lorsque je la place dans un un bouton-commande, elle me lance bien le fichier demandé.
Mais si elle placée dans la ListBox il n'y a aucun effet ni message d'erreur ???

2. pour récupérer le nom d'un fichier sans son extension :

J' ai essayé le code
Dim chemin As String, elements, fichier As String
chemin = "C:\Documents and Settings\Brutor2\Mes documents\Classeur1.xls"
elements = Split(chemin, "")
fichier = elements(UBound(elements))   ' nom du fichier avec son extension
If InStr(1, fichier, ".") <> 0 Then
    elements = Split(fichier, ".")
    ReDim Preserve elements(UBound(elements) - 1)
    fichier = Join(elements, ".")
End If
MsgBox "Nom du fichier sans extension : " & fichier

placé dans le Userform_Activate, mais j'ai eu un message d'erreur sur le Redim

Me suis-tromper quelque part pour le placement de ces codes ?

Merci encore de prendre du temps pour moi.

Cordialement
Brutor2
0
brutor2 Messages postés 8 Date d'inscription jeudi 9 octobre 2008 Statut Membre Dernière intervention 1 février 2009
31 janv. 2009 à 14:25
Petit rectificatif

en placant le code

Dim chemin As String, elements, fichier As String
chemin = "C:\Documents and Settings\Brutor2\Mes documents\Doc1.Doc"
elements = Split(chemin, "")
fichier = elements(UBound(elements))   ' nom du fichier avec son extension
If InStr(1, fichier, ".") <> 0 Then
    elements = Split(fichier, ".")
    ReDim Preserve elements(UBound(elements) - 1)
    fichier = Join(elements, ".")
End If
MsgBox "Nom du fichier sans extension : " & fichier

dans la ListBox_Change(), lorsque que je clique sur n'importe lequel des fichiers, j'ai bien le message nom de fichier sans extension : doc1, mais dans la ListBox, il apparait toujours avec l'extension.

Je nage...
0

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

Posez votre question
cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 4
1 févr. 2009 à 13:07
Bonjour brutor2


1. Pour lancer une application qui ouvre un fichier


Les trois exemples que je t'ai donné ouvrent toujours le même fichier, c'est vrai, à vrai dire je pensais que tu n'aurais pas de souci pour l'adapter. Il te suffit de remplacer C:\Documents and Settings\Brutor2\Mes documents\Document1.doc
par chem & ListBox1.Value, où chem représente ton répertoire C:\Documents and Settings\Brutor2\Mes documents\Document1.doc.
Cela lancera le bon fichier, désigné par ListBox1.Value.


2. pour charger le nom de ton fichier, sans son extension, dans le listbox


 - Dans ton code UserForm.Activate, remplace ton instruction Me.ListBox1.AddItem Fichier par Me.ListBox1.AddItem supprimeExtension(Fichier)

 - insère la fonction suivante, qui encapsule le code de suppression d'extension :

Function supprimeExtension(chemin As String) As String
Dim chemin As String, elements, fichier As String
chemin = "C:\Documents and Settings\Brutor2\Mes documents\Doc1.Doc"
elements = Split(chemin, "")
fichier = elements(UBound(elements))   ' nom du fichier avec son extension
If InStr(1, fichier, ".") <> 0 Then
    elements = Split(fichier, ".")
    ReDim Preserve elements(UBound(elements) - 1)
    fichier = Join(elements, ".")
End If
supprimeExtension = fichier
End Function

Mais attention : si tu cliques sur un nom de fichier sans son extension, tu ne pourras pas l'ouvrir tel quel ; il faudra lui remettre son extension. Y as-tu réfléchi ?

Amicalement
0
brutor2 Messages postés 8 Date d'inscription jeudi 9 octobre 2008 Statut Membre Dernière intervention 1 février 2009
1 févr. 2009 à 19:06
Bonsoir Orohena,

1. Concernant chem & ListBox1.Value a quel moment je l'insère ?

Et comment je déclare la variable chem = C:\Documents and Settings\Brutor2\Mes documents\Document1.doc.dans les trois code que tu m'as indiqués.

Peux-tu me donner le code adapté, car j'ai vraiment du mal à m'en sortir tout seul

2. Concernant l'extension, ce que je voulais c'est effectivement que le fichier se lance sans voir apparaître son extension. Si cela n'est pas possible alors ce la n'est pas bon pour ce que je voulais faire.

Merci encore pour ton aide et ta patience.

Brutor2
0