XL 2013 Ouvrir dossier puis fichier VBA (Incompatibilité de type)

pmfontaine

XLDnaute Occasionnel
Bonjour,
Cette macro me renvoie une erreur "Incompatibilité de type" quand j'ouvre un fichier Excel et j'ai beau chercher, je ne trouve rien sur le Net pour résoudre mon problème.
Code:
Sub OuvrirDossierFichier()
Dim Chemin
Chemin = Workbooks(ActiveWorkbook.Name).Path
Shell "C:\windows\explorer.exe " & Chemin, Application.GetOpenFilename()
End Sub
Pouvez-vous m'aider ?
Merci
Patrick
 

Pièces jointes

  • ouvrirDossierPuisFichier.xlsm
    14.3 KB · Affichages: 29
Dernière édition:

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour Pmfontaine, bonjour le forum,

Comme je ne sais toujours pas utiliser les Shell (ni même les scabots d'ailleurs) et que je n'en comprend pas leur signification, j'ai pensé que tu voulais sélectionner un fichier. Désolé si je suis carrément à coté de la plaque mais je te propose le code ci-dessous :

VB:
Sub OuvrirDossierFichier()
Dim CA As String 'déclare la variable CA (Chemin d'Accès)
Dim BD As FileDialog 'déclare la variable BD (Boîte de Dialogue)

CA = ActiveWorkbook.Path 'définit le chemin d'accès CA
Set BD = Application.FileDialog(msoFileDialogFilePicker) 'définit la boîte de dialogue BD
BD.AllowMultiSelect = False 'ne permet la sélection que d'un seul élément (à adapter)
BD.InitialFileName = CA 'se place par défaut dans le dossier du chemin d'accès CA
BD.Show 'affiche la boîte de dialogue
'juste pour avoir un visuel du résultat obtenu, tu adapteras à tes besoins
If BD.SelectedItems.Count > 0 Then MsgBox BD.SelectedItems(1) 'affiche le fichier sélectionné
End Sub
 

Lone-wolf

XLDnaute Barbatruc
Bonjour pmfontaine, Robert :)

@pmfontaine : Application.GetOpenFilename() est de trop, Shell ouvre déjà l'explorateur. Essaie comme ceci

VB:
Sub OuvrirDossierFichier()
Dim Chemin$, Fichier$

Chemin = ThisWorkbook.Path & "\"
Fichier = "Planning.xlsm"

Shell Environ("WINDIR") & "\explorer.exe " & Chemin & Fichier, vbNormalFocus
End Sub


@Robert
je ne sais toujours pas utiliser les Shell (ni même les scabots d'ailleurs)
MDR :D:D:D . Dans ce cas, un cours chez les pompiers s'impose. ;):D
 
Dernière édition:

pmfontaine

XLDnaute Occasionnel
Bonjour Robert, Bonjour Lone-Wolf
Merci beaucoup pour votre intervention.

Lone-Wolf : Quand je teste le code que tu me propose,
Code:
Sub OuvrirDossierFichier2()
Dim Chemin
Chemin = Workbooks(ActiveWorkbook.Name).Path
ShellExecute 0, vbNullString, Chemin, vbNullString, vbNullString, 0
End Sub
j'ai un message pour "ShellExecute" Sub ou fonction non défini" ?

Robert, Ton code marche bien et voila comment je l'ai adapter à mes besoins
Code:
Sub OuvrirDossierFichier()
Dim CA As String 'déclare la variable CA (Chemin d'Accès)
Dim BD As FileDialog 'déclare la variable BD (Boîte de Dialogue)
Dim Nom_FichierOuvert As String

CA = ActiveWorkbook.Path 'définit le chemin d'accès CA
Set BD = Application.FileDialog(msoFileDialogFilePicker) 'définit la boîte de dialogue BD
BD.AllowMultiSelect = False 'ne permet la sélection que d'un seul élément (à adapter)
BD.InitialFileName = CA 'se place par défaut dans le dossier du chemin d'accès CA
BD.Show 'affiche la boîte de dialogue

If BD.SelectedItems.Count > 0 Then Workbooks.Open Filename:=BD.SelectedItems(1) 'Ouvre le fichier sélectionné

   'Sauvegarde du nom du fichier ouvert
    Nom_FichierOuvert = ActiveWorkbook.Name

MsgBox "Action sur fichier"

'Fermeture fichier
Application.DisplayAlerts = False
Workbooks(Nom_FicherOuvert).Close
End Sub
Donc problème résolu
Bonne journée à tous
Patrick
 

pmfontaine

XLDnaute Occasionnel
Bonjour Robert, Bonjour Lone-Wolf
Merci beaucoup pour votre intervention.

Lone-Wolf : Quand je teste le code que tu me propose,
Code:
Sub OuvrirDossierFichier2()
Dim Chemin
Chemin = Workbooks(ActiveWorkbook.Name).Path
ShellExecute 0, vbNullString, Chemin, vbNullString, vbNullString, 0
End Sub
j'ai un message pour "ShellExecute" Sub ou fonction non défini" ?

Pour celui là :
Code:
Sub OuvrirDossierFichier()
Dim Chemin$, Fichier$
Chemin = ThisWorkbook.Path & "\"
Fichier = "Planning.xlsm"
Shell Environ("WINDIR") & "\explorer.exe " & Chemin & Fichier, vbNormalFocus
End Sub
Il n'ouvre pas la boite de dialogue ouvrir.

Robert, Ton code marche bien et voila comment je l'ai adapter à mes besoins
Code:
Sub OuvrirDossierFichier()
Dim CA As String 'déclare la variable CA (Chemin d'Accès)
Dim BD As FileDialog 'déclare la variable BD (Boîte de Dialogue)
Dim Nom_FichierOuvert As String

CA = ActiveWorkbook.Path 'définit le chemin d'accès CA
Set BD = Application.FileDialog(msoFileDialogFilePicker) 'définit la boîte de dialogue BD
BD.AllowMultiSelect = False 'ne permet la sélection que d'un seul élément (à adapter)
BD.InitialFileName = CA 'se place par défaut dans le dossier du chemin d'accès CA
BD.Show 'affiche la boîte de dialogue

If BD.SelectedItems.Count > 0 Then Workbooks.Open Filename:=BD.SelectedItems(1) 'Ouvre le fichier sélectionné

   'Sauvegarde du nom du fichier ouvert
    Nom_FichierOuvert = ActiveWorkbook.Name

MsgBox "Action sur fichier"

'Fermeture fichier
Application.DisplayAlerts = False
Workbooks(Nom_FicherOuvert).Close
End Sub
Donc problème résolu
Bonne journée à tous
Patrick
 

MJ13

XLDnaute Barbatruc
Bonjour à tous

Personnellement, je l'aurais écrit ainsi. Les msgbox, qui pourront être supprimées, c'est pour voir comment sont interprètées les variables:

VB:
Sub OuvrirDossierFichier()
Dim Chemin
Chemin = Workbooks(ActiveWorkbook.Name).Path
MsgBox Chemin
fichier = Application.GetOpenFilename()
MsgBox fichier
Shell "C:\windows\explorer.exe " & fichier
End Sub
 

Lone-wolf

XLDnaute Barbatruc
Bonjour Michel :)

@MJ13: je ne comprends pas vraiment > Chemin = Workbooks(ActiveWorkbook.Name).Path

ActiveWorkbook.Name, c'est le classeur actif non? :rolleyes: . Dans ce cas, pourquoi aller le chercher puisqu'il est déjà ouvert?? :rolleyes:
Et si il veux ouvrir un autre fichier, il suffit juste d'indiquer le chemin du dossier.
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil, le forum

Pour infos
Le code de Lone-Wolf (avec ShellExecute) ne fonctionne pas ici dans cette discussion car il manque (ce que je viens d'ajouter en début de code)
(voir ci-dessous)
VB:
Public 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
Dim strPath As String
Sub test_1()
strPath = ThisWorkbook.Path & "\test.xlsx"
ShellExecute Application.hwnd, "open", strPath, vbNullString, vbNullString, 1
End Sub
Sub test_2()
strPath = ThisWorkbook.Path & "\test.xlsx"
CreateObject("WScript.Shell").Run strPath
End Sub
Sub test3()
strPath = ThisWorkbook.Path & "\test.xlsx"
ActiveWorkbook.FollowHyperlink strPath
End Sub

Sans doute, cet bout de code essentiel a disparu lors de l'édition de 10h35 du message#3 :D

PS: J'ai ajouter trois exemples pour ouvrir un classeur par VBA
Pour tester mettre un classeur nommée test.xlsx dans le dossier où se trouve la classeur contenant la macro.
 

Staple1600

XLDnaute Barbatruc
Bonsoir Dranreb

Repris par tous?

Non, pas par moi ;)
(cf le message#11)

EDITION: Bonsoir Lone-Wolf
Pourtant tu écrivais :rolleyes:
Re

@pmfontaine : bein, chez moi ça fontionne. o_O

Et chez moi, la macro test_1, telle que je l'ai écrite fonctionne. ;)

Sinon, pour l'autre fil, ma réponse est : non
(pour le moment)
En effet, je préfère attendre que le demandeur joigne son propre fichier exemple.
Histoire de pas bosser pour ensuite me rendre compte que le fichier exemple ne correspond pas du tout à ce qui est expliqué dans le message ;)
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 147
Messages
2 085 767
Membres
102 968
dernier inscrit
Tmarti