[Résolu par Roland_M] Boîte de dialogue ouvrir(Tous types de fichiers)

Lone-wolf

XLDnaute Barbatruc
Bonjour à tous,


Code:
Sub Ouvrir_Fichier()
Dim Fichier As Variant
ChDir "D:\"
Fichier = Application.GetOpenFilename _
(Title:="Ouvrir", _
FileFilter:="Tous les fichiers (*.*) (*.*),")
If Fichier = False Then
MsgBox "Pas de fichier sélectionné.", , "Microsoft"
Exit Sub
Else
Workbooks.Open Dir(Fichier)
End If
End Sub

Malgré le filtre (*.*), impossible d'ouvrir Word, NotePad etc. . Comment ouvrir tous les formats de fichier?



A+ :cool:
 
Dernière édition:

Lone-wolf

XLDnaute Barbatruc
Re : Boîte de dialogue ouvrir(Tous types de fichiers)

Bonsoir Roland,

je viens d'adapter ma première macro comme ceci:

Code:
Declare Function ShellExecute Lib "shell32.dll" Alias _
"ShellExecuteA" (ByVal hwnd As Long, ByVal lpszOp As _
String, ByVal lpszFile As String, ByVal lpszParams As String, _
ByVal lpszDir As String, ByVal FsShowCmd As Long) As Long
 
Sub Ouvrir_Fichier()
Dim Fichier As Variant, Result
ChDir "D:\"
Fichier = Application.GetOpenFilename _
(Title:="Ouvrir", _
FileFilter:="Tous les fichiers (*.*), *.*")
If Fichier = False Then
MsgBox "Pas de fichier sélectionné.", , "Microsoft"
Else
Result = ShellExecute(0, "Open", Fichier, "", "D:\", 1)
End If
End Sub

Et en ouvrant le post, je découvre que l'on a pratiquement le même style. Avec mon code, à part les fichiers Excel, tous les fichiers s'ouvrent. Je vais faire un test avec le tien et je te fais un feedback.


A+ :cool:
 
Dernière édition:

Roland_M

XLDnaute Barbatruc
Re : Boîte de dialogue ouvrir(Tous types de fichiers)

re

effectivement pas tous voir avec correctif ...

Code:
'                                                              .
'A ADAPTER SELON BESOIN !? LA ROUTINE C'EST > Sub ShellOuvreFich
'                                                              .

Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
 (ByVal hwnd As Long, ByVal lpOperation As String, _
  ByVal lpFile As String, ByVal lpParameters As String, _
  ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Public Sub ShellOuvreFich() '< F5 là-dessus !
Dim Fich$, Retour As Variant
Fich = FSelectUnFICH
MsgBox Fich '<<< pour essai
If Fich > "" Then Retour = ShellExecute(0, "open", Fich, "", "", 1)
MsgBox Retour '<<< pour essai
End Sub

Function FSelectUnFICH() As String
With Application.FileDialog(msoFileDialogFilePicker)
 .InitialFileName = ThisWorkbook.Path 'chemin de départ
 .AllowMultiSelect = False 'pour une seule sélection
 .Filters.Add "Fichiers", "*.*", 1 'tous les fichiers
'.Filters.Add "Images", "*.gif; *.jpg; *.jpeg", 1 '< sinon choix extension
 .Title = "Sélectionnez un Fichier"
 .Show
  If .SelectedItems.Count > 0 Then FSelectUnFICH = .SelectedItems(1) Else FSelectUnFICH = ""
 'ou encore
 'If .Show = -1 Then FSelectUnFICH = .SelectedItems(1) Else FSelectUnFICH = ""
End With
End Function
 
Dernière édition:

Lone-wolf

XLDnaute Barbatruc
Re : Boîte de dialogue ouvrir(Tous types de fichiers)

RE,

Là c'est vraiment bizarre, j'ai fait un test SOUS WORD de ta new-macro (1) et là, pas de problème. Par contre GetOpenFilename n'est pas reconnu.

Edit: La macro(2) ne s'exécute pas et même avec Application.FileDialog(msoFileDialogFilePicker) j'ai un plantage lors d'une ouverture d'un fichier Excel.



A+ :cool:
 
Dernière édition:

Roland_M

XLDnaute Barbatruc
Re : Boîte de dialogue ouvrir(Tous types de fichiers)

re

chez moi tout fonctionne SAUF les fichiers excel !? plantage total d'Excel !? ctrl+alt+sup et fermer la session !?

bizarre !? je ne m'étais jamais servi de cette fonction !

je continue mes recherches pour essayer de solutionner ...
 

Roland_M

XLDnaute Barbatruc
Re : Boîte de dialogue ouvrir(Tous types de fichiers)

re

j'ai trouvé ! voici:

Code:
'                                                              .
'A ADAPTER SELON BESOIN !? LA ROUTINE C'EST > Sub ShellOuvreFich
'                                                              .

Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
 (ByVal hwnd As Long, ByVal lpOperation As String, _
  ByVal lpFile As String, ByVal lpParameters As String, _
  ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Public Sub ShellOuvreFich()
Dim Fichier As Variant, fTypes$, Result, I%
fTypes = "Fichiers (*.*) (*.*),"
Fichier = Application.GetOpenFilename(Title:="Ouvrir", FileFilter:=fTypes)
If Fichier = False Then
   MsgBox "Pas de fichier sélectionné.", , "Microsoft"
Else
   I = InStrRev(Fichier, ".")
   If I Then
      If LCase(Mid(Fichier, I, 3)) = ".xl" Then
         ThisWorkbook.FollowHyperlink Fichier
      Else
         Result = ShellExecute(0, "Open", Fichier, "", "", 1)
      End If
   End If
End If
End Sub

EDIT j'ai remis en plus simple(sur base de ton modèle.) pour un utilisateur lambda ...
 
Dernière édition:

Lone-wolf

XLDnaute Barbatruc
Re : Boîte de dialogue ouvrir(Tous types de fichiers)

Re Roland,

Cette fois c'est la bonne. Je m'incline. Milles Bravo et Merci pour ton acharnement à trouver la solution.

Edit: j'ai adapté quelques lignes à mon code et il est fonctionnel.


Code:
Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA"  _
(ByVal hwnd As Long, ByVal lpszOp As String, _
ByVal lpszFile As String, ByVal lpszParams As String, _
ByVal lpszDir As String, ByVal FsShowCmd As Long) As Long
 
Sub Ouvrir_Fichier()
Dim Fichier As Variant, fTypes$, Result, IsR

fTypes = "Tous les fichiers (*.*) (*.*),"
Fichier = Application.GetOpenFilename _
(Title:="Ouvrir", FileFilter:=fTypes)

If Fichier = False Then _
MsgBox "Pas de fichier sélectionné.", , "Microsoft"
On Error Resume Next
IsR = InStrRev(Fichier, ".")
   If IsR Then
      If LCase(Mid(Fichier, IsR, 3)) = ".xl" Then
         Workbooks.Open Dir(Fichier)
      Else
Result = ShellExecute(0, "Open", Fichier, "", "D:\", 1)
End If
End If
End Sub

EDIT: Avec la syntaxe ThisWorkbook.FollowHyperlink, la BddG de sécurité Microsoft s'affiche.



A bientôt


Amicalement Lone-Wolf
 
Dernière édition:

escouger

XLDnaute Occasionnel
Re : Boîte de dialogue ouvrir(Tous types de fichiers)

Bonjour,
Je suis en but à une difficulté pour laquelle je n'arrive pas à trouver de solution et qui s'apparente au sujet traité dans ce message.

Je voudrais, en utilisant "Application.GetOpenFilename" sélectionner 1 ou plusieurs fichiers de suffixe ".xls" et commençant par un code année. Par exemple tous les fichiers de type excel dont le nom commence par 2014 au sein d'un répertoire.
En recopiant plusieurs des exemples fournis, j'ai systématiquement une erreur.
Je suis sous Windows 8 avec le pack office "Microsoft famille et Etudiant 2010"
Voici ce que j'ai écrit:

sfilter = "Fichier 2014 (*.XLS)" & Chr(0) & "*2014*.*.xls" & Chr(0)
messources = Application.GetOpenFilename(FileFilter:=sfilter, Title:="Selection des fichiers", MultiSelect:=True)

Merci d'avance de votre aide.
Gérard
 

Discussions similaires

Réponses
15
Affichages
864
Réponses
2
Affichages
346

Statistiques des forums

Discussions
312 301
Messages
2 087 029
Membres
103 436
dernier inscrit
PascalH