brutor2
Messages postés8Date d'inscriptionjeudi 9 octobre 2008StatutMembreDernière intervention 1 février 2009
-
30 janv. 2009 à 22:37
brutor2
Messages postés8Date d'inscriptionjeudi 9 octobre 2008StatutMembreDerniè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
cs_Orohena
Messages postés577Date d'inscriptionvendredi 26 septembre 2008StatutMembreDernière intervention20 novembre 20104 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
brutor2
Messages postés8Date d'inscriptionjeudi 9 octobre 2008StatutMembreDerniè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 ?
brutor2
Messages postés8Date d'inscriptionjeudi 9 octobre 2008StatutMembreDerniè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...
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Orohena
Messages postés577Date d'inscriptionvendredi 26 septembre 2008StatutMembreDernière intervention20 novembre 20104 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 ?
brutor2
Messages postés8Date d'inscriptionjeudi 9 octobre 2008StatutMembreDerniè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.