Squall____
Messages postés65Date d'inscriptionmercredi 7 janvier 2004StatutMembreDernière intervention11 septembre 2012 8 nov. 2010 à 10:29
Content que ça puisse aider !
Bonne programmation Samloba.
samloba
Messages postés3Date d'inscriptionmardi 25 septembre 2007StatutMembreDernière intervention 8 novembre 2010 7 nov. 2010 à 13:42
j'ai trouvé
Filter = "Fichiers Access|*.mdb"
merci
samloba
Messages postés3Date d'inscriptionmardi 25 septembre 2007StatutMembreDernière intervention 8 novembre 2010 7 nov. 2010 à 13:20
merci Squall____
ce code vient de me sauver la mise
access 2007+vb6 (pour compiler ma dll activeX)
seul probleme le filtre n'est pas appliqué, je vois tous les fichiers
et le choix devient difficile
Squall____
Messages postés65Date d'inscriptionmercredi 7 janvier 2004StatutMembreDernière intervention11 septembre 2012 23 mars 2010 à 10:11
Ok.
Je pense que ton erreur d'activeX doit venir du fait que la DLL comdlg32.dll n'est pas présente dans ton C:\WINDOWS\System32.
Si elle n'est pas installée c'est que ton Office 2007 n'as pas été installé complètement. Je te conseille donc d'aller dans ajout/suppression de programmes, de cliquer sur modifier l'installation de ton office et de choisir une installation complète d'office (tout exécuter à partir du disque dur). Après ça, essaye se bout de code :
Public FichierSélectionné As String
Public Function OuvrirAvecCD(Extension As String, DOSSIER As String, TITRE As String)
FichierSélectionné = ""
Set CD = CreateObject("MSComDlg.CommonDialog")
On Error Resume Next
Debut:
With CD
.MaxFileSize = 260
.InitDir = DOSSIER
.CancelError = True
.DialogTitle = TITRE
.Filter = "Fichiers " & Extension & "(*." & Extension & ")|*." & Extension & "|"
.FilterIndex = 1
Err.Clear
.ShowOpen
If Err.Number <> 0 Then
If MsgBox("Vous n'avez pas sélectionné de fichier." & Chr(10) & "Voulez-vous annuler la sélection ?", vbYesNo, TITRE) = vbYes Then
Exit Function
Else
GoTo Debut
End If
End If
End With
FichierSélectionné = CD.Filename
Set CD = Nothing
End Function
Public Sub test()
OuvrirAvecCD "xls", "\\TON_SERVEUR\TON_PARTAGE", "Merci de sélectionner un fichier xls"
MsgBox FichierSélectionné
Ericbzc
Messages postés17Date d'inscriptionlundi 24 novembre 2008StatutMembreDernière intervention13 décembre 2010 23 mars 2010 à 10:03
Xp pour windows
2007 pour excel
ps : j'ai déplacé des morceaux de codes au cours de mes tests, et il semblerait que chdir + getopenfile fasse bien le changement de chemin maintenant, y compris sur un chemin autre que C D E...
Squall____
Messages postés65Date d'inscriptionmercredi 7 janvier 2004StatutMembreDernière intervention11 septembre 2012 23 mars 2010 à 08:41
quelle version d'excel tu utilises et sous quel windows tu es ? c'est juste par curiosité...
Ericbzc
Messages postés17Date d'inscriptionlundi 24 novembre 2008StatutMembreDernière intervention13 décembre 2010 23 mars 2010 à 08:31
lol. :o)
Merci beaucoup en tout cas. je te donne un peu plus de détail sur ce que je veux faire.
Je suis dans un fichier xls qui génère un reporting sur des ventes. La 1ère étape consiste à aller chercher les données du mois en cours qui se situent sur \\Serveur\data\source.xls
Je voudrais donc que, en cliquant sur un bouton "mettre à jour les données", une boite de dialogue s'ouvre demandant de sélectionner le fichier source.
et j'aimerai que par défaut le répertoire qui s'affiche dans la boite de dialogue soit \\serveur\data.
D'après mes essais, getopenfilename ouvre par défaut "mes documents". je n'ai pas trouvé le moyen d'ouvrir \\serveur\data
et commondialog génère un message d'erreur "composant activeX..."
Squall____
Messages postés65Date d'inscriptionmercredi 7 janvier 2004StatutMembreDernière intervention11 septembre 2012 23 mars 2010 à 07:37
je te ferais un retour lorsque je serais arrivé au boulot. t'inquiètes pas, on va t'aider, j'ai largement progressé depuis 2005 ! :)
Ericbzc
Messages postés17Date d'inscriptionlundi 24 novembre 2008StatutMembreDernière intervention13 décembre 2010 23 mars 2010 à 06:50
Bonjour à tous,
Le topic date un peu... mais qui sait, pê pourrez vous m'aider.
Mon but : faire sélectionner un fichier par l'utilisateur (à partir d'une macro excel) et mémoriser son emplacement et son nom.
D'après mes recherches, 2 solutions : getopenfilename et common dialog.
* Getopenfilename ne permet pas de spécifier un répertoire donné par défaut (genre initdir)... la solution proposée sur certains forums Chdir ne fonctionne que si le fichier est sur un lecteur de la machine (C, D, Z..) ! Or moi je souhaite utiliser un chemin réseau \\serveur\ data
*Commondialog (et plus précisément la ligne set CD = *** du code ci-dessus) génère le fameux message d'erreur "un composant activeX ne peut pas créer d'objet"
je pense à un pb de bibliothèque (outils > références) ??
Des idées ?
Merci d'avance.
Cdt, EB
kalika666
Messages postés2Date d'inscriptionvendredi 15 juin 2007StatutMembreDernière intervention23 décembre 2008 23 déc. 2008 à 14:45
Au contraire, merci de ta rapidité !
Je suis sur Word, avec VBA word, ce qui doit sans doute poser problème car j'ai bien appelé la fonction comme tu le précises...
Si d'aventure d'autres personnes passaient par là avec le même type de problème, j'ai résolu le mien grâce à :
Ce qui n'est pas vraiment ce que ta macro fait mais bon...
cs_cotmar
Messages postés71Date d'inscriptionvendredi 13 septembre 2002StatutMembreDernière intervention 9 mars 2009 23 déc. 2008 à 14:44
Bonjour,
Ça marche très bien ce code, par contre n'oubliez pas de mettre le "option explicit" pour obliger à déclarer les variables, sinon, vous finirez par avoir des soucis un jour à l'autre.
Option Explicit
'Utilisation de la fonction :
'mettre une commande de type : Call OuvrirAvecCD("xls", "c:", "TOTO fait du ski")
'Puis ont peux récupérer le chemin du fichier sélectionné par l'utilisateur
'dans la variable "FichierSélectionné"
'c'est tout !
Public FichierSélectionné As String
Public Function OuvrirAvecCD(Extension As String, DOSSIER As String, TITRE As String)
Dim CD
FichierSélectionné = ""
Set CD = CreateObject("MSComDlg.CommonDialog")
On Error Resume Next
Debut:
With CD
.MaxFileSize = 260
.InitDir = DOSSIER
.CancelError = True
.DialogTitle = TITRE
.Filter = "Fichiers " & Extension & "(*." & Extension & ")|*." & Extension & "|"
.FilterIndex = 1
Err.Clear
.ShowOpen
If Err.Number <> 0 Then
If MsgBox("Vous n'avez pas sélectionné de fichier." & Chr(10) & "Voulez-vous annuler la sélection ?", vbYesNo, TITRE) = vbYes Then
Exit Function
Else
GoTo Debut
End If
End If
End With
FichierSélectionné = CD.Filename
Set CD = Nothing
End Function
Private Sub CommandButton1_Click()
OuvrirAvecCD "*.xls", "c:", "Choisissez un fichier"
End Sub
Petite remarque en passant, vérifiez que les référence soient bien cochées dans VBA, sinon effectivement ça ne marchera pas.
Vous devez avoir dans le menu : "Option -> Référence la référence suivante qui va être cochée : "Microsoft Form object library" (normalement il met un numéro de version chez moi c'est "Microsoft Form 2.0 object library" mais c'est peut-être différent chez vous).
Bonne fêtes, joyeux Noël, bonne année à tous.
Marco.
Squall____
Messages postés65Date d'inscriptionmercredi 7 janvier 2004StatutMembreDernière intervention11 septembre 2012 23 déc. 2008 à 14:09
Tout d'abord, désolé de t'avoir fait attendre.
C'est vraiment bizarre ce que tu me dis... Je vient de réessayer et j'ai bien le nom complet du fichier dans ma variable "FichierSélectionné"...
J'ai utilisé cette petite sub pour tester :
Private Sub test()
Call OuvrirAvecCD("xls", "c:", "TOTO fait du ski")
MsgBox FichierSélectionné
End Sub
Si ça ne focntionne toujours pas chez toi, peux tu me donner plus d'informations sur ta configuration ? Quel Windows ? Quel editeur VB (VB6, VBA Excel) ?
kalika666
Messages postés2Date d'inscriptionvendredi 15 juin 2007StatutMembreDernière intervention23 décembre 2008 22 déc. 2008 à 13:43
Bonjour,
Tout d'abord merci pour ce code !
Je suis un peu surpris par contre, car après avoir appelé la fonction, si j'affiche la variable FichierSélectionné dans une msgbox, il ne me renvoie que le nom du fichier et non le chemin complet... Il y a-t'il quelque chose à changer pour obtenir par exemple "c:\program files\monfichier.xls" ?
L'objectif étant d'intégrer cette variable dans quelque chose du genre "Open FichierSélection for input as #1"
Merci d'avance !
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 10 oct. 2008 à 19:35
Regarde le comment du: 27/07/2005 15:29:23
mabejaoui
Messages postés15Date d'inscriptionmardi 16 septembre 2008StatutMembreDernière intervention10 octobre 2008 10 oct. 2008 à 16:48
Bonjour,
j'ai un probleme avec l'utilisation de la commande CreateObject("MSComDlg.CommonDialog").
Le msg d'erreur suivant s'affiche :
Un composant ActiveX ne peut pas creer un objet.
Merci d'avance.
Alvaten
Messages postés6Date d'inscriptionjeudi 16 février 2006StatutMembreDernière intervention 2 juin 2006 25 sept. 2007 à 10:31
Merci,
C'est pas tout à fait ce que je cherchais mais j'ai pu l'adapter très facilement.
Squall____
Messages postés65Date d'inscriptionmercredi 7 janvier 2004StatutMembreDernière intervention11 septembre 2012 16 juil. 2007 à 16:32
Bien sur que tu peux publier ton logiciel. Pas de problèmes. On est là pour s'entraider non ???
J'était en train de faire un logiciel pour un call center qui devais être capable d'injecter des fichiers u truc pas très complexe qui devais leur servir et j'avais un problème avec le common dialog au niveau des filtres ton programme m'a drôlement servi merci ! Et je me demandais si je ne pourais pas publié ce logiciel qui t'appartient en parti ^^ je te metterait les copyrights bien sur ^^
Squall____
Messages postés65Date d'inscriptionmercredi 7 janvier 2004StatutMembreDernière intervention11 septembre 2012 8 juin 2007 à 13:23
Merci pour ton commentaire !
ça fait plaisir de voir que ma source est utile.
neamar
Messages postés26Date d'inscriptionvendredi 9 septembre 2005StatutMembreDernière intervention12 avril 2009 7 juin 2007 à 21:15
Exactement ce qu'il me fallait ! Merci !
homer202
Messages postés2Date d'inscriptiondimanche 6 novembre 2005StatutMembreDernière intervention28 février 2007 28 févr. 2007 à 12:20
Exact les derniers fichiers ouvert sont stockés la :
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\OpensaveMRU\doc
Dans OpensaveMRU on trouve les différentes extensions ici pour moi c'est des fichiers .doc
Merci c'était ce dont j'avais besoin.
Squall____
Messages postés65Date d'inscriptionmercredi 7 janvier 2004StatutMembreDernière intervention11 septembre 2012 28 févr. 2007 à 11:40
J'ai pas tout compris mais je pense que tu devrais jeter un oeil dans la base de registres.
C'est là que les historiques d'ouvertures de fichiers sont stockés en général...
homer202
Messages postés2Date d'inscriptiondimanche 6 novembre 2005StatutMembreDernière intervention28 février 2007 28 févr. 2007 à 10:44
Bonjour,
Je cherche un moyen de récupérer "l'historique" des fichiers ouvert par la common dialog. J'entend par historique la list box qui correspond au nom du fichier.
j'espere avoir été clair.
D'avance merci.
cs_cotmar
Messages postés71Date d'inscriptionvendredi 13 septembre 2002StatutMembreDernière intervention 9 mars 2009 3 avril 2006 à 18:09
Bonjour,
J'ai juste une petite critique (constructive). Si tu veux enlever le GOTO, tu peux faire comme suit...
Cordialement.
Marco.
Public Function FctOuvrirAvecCD(Extension As String, DOSSIER As String, TITRE As String) As String
' FichierSélectionné = ""
Dim CD As Object
Dim BoolFin As Boolean
On Error Resume Next
BoolFin = False
Set CD = CreateObject("MSComDlg.CommonDialog")
'Debut:
While BoolFin = False
With CD
.MaxFileSize = 260
.InitDir = DOSSIER
.CancelError = True
.DialogTitle = TITRE
.Filter = "Fichiers " & Extension & "(*." & Extension & ")|*." & Extension & "|"
.FilterIndex = 1
Err.Clear
.ShowOpen
If Err.Number <> 0 Then
If MsgBox("Vous n'avez pas sélectionné de fichier." & Chr(10) & "Voulez-vous annuler la sélection ?", vbYesNo, TITRE) = vbYes Then
BoolFin = True
' Exit Function
Else
BoolFin = False
' GoTo Debut
End If
Else
BoolFin = True
End If
End With
Wend
FctOuvrirAvecCD = CD.FileName
Set CD = Nothing
End Function
Squall____
Messages postés65Date d'inscriptionmercredi 7 janvier 2004StatutMembreDernière intervention11 septembre 2012 1 août 2005 à 15:16
Merci Hicham_A_t23 je vais faire la modification de ma source pour enlever la déclaration. Comme ça, tout le monde pourras en profiter !
hicham_a_t23
Messages postés9Date d'inscriptionmercredi 13 juillet 2005StatutMembreDernière intervention 1 août 2005 1 août 2005 à 14:48
Bonjour Squal_, merci pour ton code, moi j'ai enlevé la declaration " dim cd as commondialog" et ca a marché.
c bien ce que tu as fais. ca permet d'aider bcp de personne.
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 27 juil. 2005 à 15:29
Squall____
Messages postés65Date d'inscriptionmercredi 7 janvier 2004StatutMembreDernière intervention11 septembre 2012 27 juil. 2005 à 15:09
OK !
Donc, avis à tous, si mon module ne fonctionne pas chez vous, tournez vous vers une autre source qui utilise l'API GetOpenFileName.
Je promet de faire une autre source un peu plus tard du même type qui utilisera l'API GetOpenFileName quand je la maitriserais.
Merci pour ton aide BruNews, je vais me documenter sur l'API.
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 27 juil. 2005 à 14:45
Enlever la déclaration de CD ne change rien, pas cela qui installera un ocx.
Refais avec GetOpenFileName() et fonctionnera partout.
Squall____
Messages postés65Date d'inscriptionmercredi 7 janvier 2004StatutMembreDernière intervention11 septembre 2012 27 juil. 2005 à 14:40
Ok. Tu dois avoir raison. Mais j'ai relevé des erreurs dans ton utilisation de ma fonction.
Utilise plutot ça :
public FichierSélectionné As String
Public Function OuvrirAvecCD(Extension As String, DOSSIER As String, TITRE As String)
FichierSélectionné = ""
'Dim CD
Set CD = CreateObject("MSComDlg.CommonDialog")
On Error Resume Next
Debut:
With CD
.MaxFileSize = 260
.InitDir = DOSSIER
.CancelError = True
.DialogTitle = TITRE
.Filter = "Fichiers Excels(*." & Extension & ")|*." & Extension & "|"
.FilterIndex = 1
Err.Clear
.ShowOpen
If Err.Number <> 0 Then
If MsgBox("Vous n'avez pas sélectionné de fichier." & Chr(10) & "Voulez-vous annuler la sélection ?", vbYesNo, TITRE) = vbYes Then
Exit Function
Else
GoTo Debut
End If
End If
End With
FichierSélectionné = CD.Filename
Set CD = Nothing
End Function
Sub test()
'Dim s As String
's = OuvrirAvecCD("*.txt", "D:", "TITRE")
Call OuvrirAvecCD("txt", "D:", "TITRE")
'MsgBox s
MsgBox FichierSélectionné
End Sub
Si il te fait toujours la même erreur, alors là, je ne sais pas quoi faire...
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 27 juil. 2005 à 14:20
Test dans Excel 2003:
Public Function OuvrirAvecCD(Extension As String, DOSSIER As String, TITRE As String)
FichierSélectionné = ""
Dim CD
Set CD = CreateObject("MSComDlg.CommonDialog")
On Error Resume Next
Debut:
With CD
.MaxFileSize = 260
.InitDir = DOSSIER
.CancelError = True
.DialogTitle = TITRE
.Filter = "Fichiers Excels(*." & Extension & ")|*." & Extension & "|"
.FilterIndex = 1
Err.Clear
.ShowOpen
If Err.Number <> 0 Then
If MsgBox("Vous n'avez pas sélectionné de fichier." & Chr(10) & "Voulez-vous annuler la sélection ?", vbYesNo, TITRE) = vbYes Then
Exit Function
Else
GoTo Debut
End If
End If
End With
FichierSélectionné = CD.Filename
Set CD = Nothing
End Function
Sub test()
Dim s As String
s = OuvrirAvecCD("*.txt", "D:", "TITRE")
MsgBox s
End Sub
Résultat comme prévu:
"Le composant ActiveX ne peut pas créer l'objet" en message d'erreur.
et me select la ligne: Set CD = CreateObject("MSComDlg.CommonDialog")
C'est clair, je t'avais dit que ceci n'est pas sur les machines.
Squall____
Messages postés65Date d'inscriptionmercredi 7 janvier 2004StatutMembreDernière intervention11 septembre 2012 27 juil. 2005 à 13:58
C'est pas important ça, Quand tu fait le "Set CD = CreateObject("MSComDlg.CommonDialog")" ton objet est créé. Donc, le "With CD" venant après comprend ce qu'est l'objet CD.
No souci je te dis.
Tu as essayé ?
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 27 juil. 2005 à 13:40
Si je mets en comment, comment faire avec ce qui est dans "With CD" ???
Squall____
Messages postés65Date d'inscriptionmercredi 7 janvier 2004StatutMembreDernière intervention11 septembre 2012 27 juil. 2005 à 12:49
Je pense savoir quel est le problème...
Pour corriger, je pense qu'il te suffit de supprimer la ligne "Dim CD As CommonDialog" (ou de la mettre en commentaire comme tu veux).
Alors ? C'est mieux comme ça ?
Si ça marche mieux, je ferais un update de mon module.
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 27 juil. 2005 à 09:58
Alors testons, dans Excel j'obtiens:
Erreur de compilation:
Type défini par l'utilisateur non défini
et il me sélectionne "Dim CD As CommonDialog".
Que mettre comme référence ?
Squall____
Messages postés65Date d'inscriptionmercredi 7 janvier 2004StatutMembreDernière intervention11 septembre 2012 27 juil. 2005 à 09:45
Je suis pas persuadé de ce que tu dis car j'utilise ce module au boulot avec Excel 97 et à part ça, ma config logiciel n'as rien d'exeptionnel, bien au contraire. Je n'ais pas VB installé, je suis sur NT4 avec la suite Office 97 dessus. C'est tout !
J'ai d'ailleur conçu cette source depuis ce PC...
C'est pour ça que je trouve ta remarque bizarre...
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 27 juil. 2005 à 00:11
ça fonctionne parce que tu as VB installé ou au moins l'ocx qui fournit mais les autres gens ne l'ont pas et donc ne peut pas fonctionner depuis VBA.
Regarde MSDN, faut faire une structure, la remplir correctement et ensuite la passer à l'API.
Squall____
Messages postés65Date d'inscriptionmercredi 7 janvier 2004StatutMembreDernière intervention11 septembre 2012 27 juil. 2005 à 00:08
L'API GetOpenFileName ? Je ne connaissais pas ! C'est pour ça que je l'ai pas utilisé! Pourrais tu m'en dire plus sur cet API ?
Par contre, je t'assure que mon code fonctionne très très bien dans VBA. Je l'utilise actuellement avec Excel 97 sans problèmes.
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 27 juil. 2005 à 00:00
Faudrait avoir "MSComDlg.CommonDialog" d'inscrit en base de registres pour s'en servir dans VBA.
Si c'est la souplesse que tu cherches, pourquoi ne pas utiliser l'API GetOpenFileName(), au moins on est certain que c'est sur la machine cible.
Squall____
Messages postés65Date d'inscriptionmercredi 7 janvier 2004StatutMembreDernière intervention11 septembre 2012 26 juil. 2005 à 15:04
Liquide, je sais que je l'active en le déclarant mais c'est plus pratique de l'activer en ligne de commande que de façon graphique pour des gens comme moi qui font beaucoup de VBA ou de VBS (je sais pas si tu as déjà essayer de mettre un commondialog dans excel 97 mais tu veras, ça vaut le coup d'oeil !).
Par contre, ce que tu dis sur le charger / décharger qui prend du temps, oui tu as raison. Le PC lui s'en rend compte mais nous, pauvres petits humains, je ne pense pas que ça nous gêne vraiment (^_^) !
Urgo, désolé si la source existait déjà, je l'ai cherché sur le site et je l'ai pas trouvé alors je pensais que ce code n'avais pas été montré. En même temps, c'est pas trop grave ! Une chance de plus pour ceuw qui cherchent cette fonction de la trouver :) !
cs_Urgo
Messages postés780Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention16 avril 20091 26 juil. 2005 à 13:49
EBArtSoft avait déjà montré cette astuce si mes souvenirs sont bons :)
cs_liquide
Messages postés1016Date d'inscriptionsamedi 22 mars 2003StatutMembreDernière intervention24 juin 2008 26 juil. 2005 à 13:05
Dim CD As CommonDialog <---> si ca ce n'est pas l'activer, je ne comprend plus rien a Vb. Plus souple je ne sais pas , car en placant un commdialog dans la form, et en integrant un procédure qui en fait appel :
with commondialog
....
....
end with
la souplesse reste la meme, l'avantage de ton code c'est que le composant est activé au moment ou tu en as besoin. d'un autre coté, il ne faudrait pas que tu en ai besoin souvent, car charger decharger prend aussi du temps.
8 nov. 2010 à 10:29
Bonne programmation Samloba.
7 nov. 2010 à 13:42
Filter = "Fichiers Access|*.mdb"
merci
7 nov. 2010 à 13:20
ce code vient de me sauver la mise
access 2007+vb6 (pour compiler ma dll activeX)
seul probleme le filtre n'est pas appliqué, je vois tous les fichiers
et le choix devient difficile
23 mars 2010 à 10:11
Je pense que ton erreur d'activeX doit venir du fait que la DLL comdlg32.dll n'est pas présente dans ton C:\WINDOWS\System32.
Si elle n'est pas installée c'est que ton Office 2007 n'as pas été installé complètement. Je te conseille donc d'aller dans ajout/suppression de programmes, de cliquer sur modifier l'installation de ton office et de choisir une installation complète d'office (tout exécuter à partir du disque dur). Après ça, essaye se bout de code :
Public FichierSélectionné As String
Public Function OuvrirAvecCD(Extension As String, DOSSIER As String, TITRE As String)
FichierSélectionné = ""
Set CD = CreateObject("MSComDlg.CommonDialog")
On Error Resume Next
Debut:
With CD
.MaxFileSize = 260
.InitDir = DOSSIER
.CancelError = True
.DialogTitle = TITRE
.Filter = "Fichiers " & Extension & "(*." & Extension & ")|*." & Extension & "|"
.FilterIndex = 1
Err.Clear
.ShowOpen
If Err.Number <> 0 Then
If MsgBox("Vous n'avez pas sélectionné de fichier." & Chr(10) & "Voulez-vous annuler la sélection ?", vbYesNo, TITRE) = vbYes Then
Exit Function
Else
GoTo Debut
End If
End If
End With
FichierSélectionné = CD.Filename
Set CD = Nothing
End Function
Public Sub test()
OuvrirAvecCD "xls", "\\TON_SERVEUR\TON_PARTAGE", "Merci de sélectionner un fichier xls"
MsgBox FichierSélectionné
End Sub
Si ça ne marche toujours pas, télécharge la DLL ici : http://www.dll-files.com/dllindex/dll-files.shtml?comdlg32
Et ensuite copie là dans ton C:\WINDOWS\System32 et réessaye.
Fait moi savoir si ça focntionne ou non.
Bonne chance.
23 mars 2010 à 10:03
2007 pour excel
ps : j'ai déplacé des morceaux de codes au cours de mes tests, et il semblerait que chdir + getopenfile fasse bien le changement de chemin maintenant, y compris sur un chemin autre que C D E...
23 mars 2010 à 08:41
23 mars 2010 à 08:31
Merci beaucoup en tout cas. je te donne un peu plus de détail sur ce que je veux faire.
Je suis dans un fichier xls qui génère un reporting sur des ventes. La 1ère étape consiste à aller chercher les données du mois en cours qui se situent sur \\Serveur\data\source.xls
Je voudrais donc que, en cliquant sur un bouton "mettre à jour les données", une boite de dialogue s'ouvre demandant de sélectionner le fichier source.
et j'aimerai que par défaut le répertoire qui s'affiche dans la boite de dialogue soit \\serveur\data.
D'après mes essais, getopenfilename ouvre par défaut "mes documents". je n'ai pas trouvé le moyen d'ouvrir \\serveur\data
et commondialog génère un message d'erreur "composant activeX..."
23 mars 2010 à 07:37
23 mars 2010 à 06:50
Le topic date un peu... mais qui sait, pê pourrez vous m'aider.
Mon but : faire sélectionner un fichier par l'utilisateur (à partir d'une macro excel) et mémoriser son emplacement et son nom.
D'après mes recherches, 2 solutions : getopenfilename et common dialog.
* Getopenfilename ne permet pas de spécifier un répertoire donné par défaut (genre initdir)... la solution proposée sur certains forums Chdir ne fonctionne que si le fichier est sur un lecteur de la machine (C, D, Z..) ! Or moi je souhaite utiliser un chemin réseau \\serveur\ data
*Commondialog (et plus précisément la ligne set CD = *** du code ci-dessus) génère le fameux message d'erreur "un composant activeX ne peut pas créer d'objet"
je pense à un pb de bibliothèque (outils > références) ??
Des idées ?
Merci d'avance.
Cdt, EB
23 déc. 2008 à 14:45
Je suis sur Word, avec VBA word, ce qui doit sans doute poser problème car j'ai bien appelé la fonction comme tu le précises...
Si d'aventure d'autres personnes passaient par là avec le même type de problème, j'ai résolu le mien grâce à :
emplacementfichier = Excel.Application.GetOpenFilename("Fichier Excel (*.xls), *.xls")
Ce qui n'est pas vraiment ce que ta macro fait mais bon...
23 déc. 2008 à 14:44
Ça marche très bien ce code, par contre n'oubliez pas de mettre le "option explicit" pour obliger à déclarer les variables, sinon, vous finirez par avoir des soucis un jour à l'autre.
Option Explicit
'Utilisation de la fonction :
'mettre une commande de type : Call OuvrirAvecCD("xls", "c:", "TOTO fait du ski")
'Puis ont peux récupérer le chemin du fichier sélectionné par l'utilisateur
'dans la variable "FichierSélectionné"
'c'est tout !
Public FichierSélectionné As String
Public Function OuvrirAvecCD(Extension As String, DOSSIER As String, TITRE As String)
Dim CD
FichierSélectionné = ""
Set CD = CreateObject("MSComDlg.CommonDialog")
On Error Resume Next
Debut:
With CD
.MaxFileSize = 260
.InitDir = DOSSIER
.CancelError = True
.DialogTitle = TITRE
.Filter = "Fichiers " & Extension & "(*." & Extension & ")|*." & Extension & "|"
.FilterIndex = 1
Err.Clear
.ShowOpen
If Err.Number <> 0 Then
If MsgBox("Vous n'avez pas sélectionné de fichier." & Chr(10) & "Voulez-vous annuler la sélection ?", vbYesNo, TITRE) = vbYes Then
Exit Function
Else
GoTo Debut
End If
End If
End With
FichierSélectionné = CD.Filename
Set CD = Nothing
End Function
----------------------------------------------------------------------------
Ensuite j'ai créé un bouton sur ma feuille Excel pour tester et j'y ai affecté la procédure correspondant à l'évènement "click" suivante :
----------------------------------------------------------------------------
Option Explicit
Private Sub CommandButton1_Click()
OuvrirAvecCD "*.xls", "c:", "Choisissez un fichier"
End Sub
Petite remarque en passant, vérifiez que les référence soient bien cochées dans VBA, sinon effectivement ça ne marchera pas.
Vous devez avoir dans le menu : "Option -> Référence la référence suivante qui va être cochée : "Microsoft Form object library" (normalement il met un numéro de version chez moi c'est "Microsoft Form 2.0 object library" mais c'est peut-être différent chez vous).
Bonne fêtes, joyeux Noël, bonne année à tous.
Marco.
23 déc. 2008 à 14:09
C'est vraiment bizarre ce que tu me dis... Je vient de réessayer et j'ai bien le nom complet du fichier dans ma variable "FichierSélectionné"...
J'ai utilisé cette petite sub pour tester :
Private Sub test()
Call OuvrirAvecCD("xls", "c:", "TOTO fait du ski")
MsgBox FichierSélectionné
End Sub
Si ça ne focntionne toujours pas chez toi, peux tu me donner plus d'informations sur ta configuration ? Quel Windows ? Quel editeur VB (VB6, VBA Excel) ?
22 déc. 2008 à 13:43
Tout d'abord merci pour ce code !
Je suis un peu surpris par contre, car après avoir appelé la fonction, si j'affiche la variable FichierSélectionné dans une msgbox, il ne me renvoie que le nom du fichier et non le chemin complet... Il y a-t'il quelque chose à changer pour obtenir par exemple "c:\program files\monfichier.xls" ?
L'objectif étant d'intégrer cette variable dans quelque chose du genre "Open FichierSélection for input as #1"
Merci d'avance !
10 oct. 2008 à 19:35
10 oct. 2008 à 16:48
j'ai un probleme avec l'utilisation de la commande CreateObject("MSComDlg.CommonDialog").
Le msg d'erreur suivant s'affiche :
Un composant ActiveX ne peut pas creer un objet.
Merci d'avance.
25 sept. 2007 à 10:31
C'est pas tout à fait ce que je cherchais mais j'ai pu l'adapter très facilement.
16 juil. 2007 à 16:32
Et merci pour ton commentaire.
16 juil. 2007 à 15:49
8 juin 2007 à 13:23
ça fait plaisir de voir que ma source est utile.
7 juin 2007 à 21:15
28 févr. 2007 à 12:20
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\OpensaveMRU\doc
Dans OpensaveMRU on trouve les différentes extensions ici pour moi c'est des fichiers .doc
Merci c'était ce dont j'avais besoin.
28 févr. 2007 à 11:40
C'est là que les historiques d'ouvertures de fichiers sont stockés en général...
28 févr. 2007 à 10:44
Je cherche un moyen de récupérer "l'historique" des fichiers ouvert par la common dialog. J'entend par historique la list box qui correspond au nom du fichier.
j'espere avoir été clair.
D'avance merci.
3 avril 2006 à 18:09
J'ai juste une petite critique (constructive). Si tu veux enlever le GOTO, tu peux faire comme suit...
Cordialement.
Marco.
Public Function FctOuvrirAvecCD(Extension As String, DOSSIER As String, TITRE As String) As String
' FichierSélectionné = ""
Dim CD As Object
Dim BoolFin As Boolean
On Error Resume Next
BoolFin = False
Set CD = CreateObject("MSComDlg.CommonDialog")
'Debut:
While BoolFin = False
With CD
.MaxFileSize = 260
.InitDir = DOSSIER
.CancelError = True
.DialogTitle = TITRE
.Filter = "Fichiers " & Extension & "(*." & Extension & ")|*." & Extension & "|"
.FilterIndex = 1
Err.Clear
.ShowOpen
If Err.Number <> 0 Then
If MsgBox("Vous n'avez pas sélectionné de fichier." & Chr(10) & "Voulez-vous annuler la sélection ?", vbYesNo, TITRE) = vbYes Then
BoolFin = True
' Exit Function
Else
BoolFin = False
' GoTo Debut
End If
Else
BoolFin = True
End If
End With
Wend
FctOuvrirAvecCD = CD.FileName
Set CD = Nothing
End Function
1 août 2005 à 15:16
1 août 2005 à 14:48
c bien ce que tu as fais. ca permet d'aider bcp de personne.
27 juil. 2005 à 15:29
http://www.vbfrance.com/code.aspx?id=7221
27 juil. 2005 à 15:09
Donc, avis à tous, si mon module ne fonctionne pas chez vous, tournez vous vers une autre source qui utilise l'API GetOpenFileName.
Je promet de faire une autre source un peu plus tard du même type qui utilisera l'API GetOpenFileName quand je la maitriserais.
Merci pour ton aide BruNews, je vais me documenter sur l'API.
27 juil. 2005 à 14:45
Refais avec GetOpenFileName() et fonctionnera partout.
27 juil. 2005 à 14:40
Utilise plutot ça :
public FichierSélectionné As String
Public Function OuvrirAvecCD(Extension As String, DOSSIER As String, TITRE As String)
FichierSélectionné = ""
'Dim CD
Set CD = CreateObject("MSComDlg.CommonDialog")
On Error Resume Next
Debut:
With CD
.MaxFileSize = 260
.InitDir = DOSSIER
.CancelError = True
.DialogTitle = TITRE
.Filter = "Fichiers Excels(*." & Extension & ")|*." & Extension & "|"
.FilterIndex = 1
Err.Clear
.ShowOpen
If Err.Number <> 0 Then
If MsgBox("Vous n'avez pas sélectionné de fichier." & Chr(10) & "Voulez-vous annuler la sélection ?", vbYesNo, TITRE) = vbYes Then
Exit Function
Else
GoTo Debut
End If
End If
End With
FichierSélectionné = CD.Filename
Set CD = Nothing
End Function
Sub test()
'Dim s As String
's = OuvrirAvecCD("*.txt", "D:", "TITRE")
Call OuvrirAvecCD("txt", "D:", "TITRE")
'MsgBox s
MsgBox FichierSélectionné
End Sub
Si il te fait toujours la même erreur, alors là, je ne sais pas quoi faire...
27 juil. 2005 à 14:20
Public Function OuvrirAvecCD(Extension As String, DOSSIER As String, TITRE As String)
FichierSélectionné = ""
Dim CD
Set CD = CreateObject("MSComDlg.CommonDialog")
On Error Resume Next
Debut:
With CD
.MaxFileSize = 260
.InitDir = DOSSIER
.CancelError = True
.DialogTitle = TITRE
.Filter = "Fichiers Excels(*." & Extension & ")|*." & Extension & "|"
.FilterIndex = 1
Err.Clear
.ShowOpen
If Err.Number <> 0 Then
If MsgBox("Vous n'avez pas sélectionné de fichier." & Chr(10) & "Voulez-vous annuler la sélection ?", vbYesNo, TITRE) = vbYes Then
Exit Function
Else
GoTo Debut
End If
End If
End With
FichierSélectionné = CD.Filename
Set CD = Nothing
End Function
Sub test()
Dim s As String
s = OuvrirAvecCD("*.txt", "D:", "TITRE")
MsgBox s
End Sub
Résultat comme prévu:
"Le composant ActiveX ne peut pas créer l'objet" en message d'erreur.
et me select la ligne: Set CD = CreateObject("MSComDlg.CommonDialog")
C'est clair, je t'avais dit que ceci n'est pas sur les machines.
27 juil. 2005 à 13:58
No souci je te dis.
Tu as essayé ?
27 juil. 2005 à 13:40
27 juil. 2005 à 12:49
Pour corriger, je pense qu'il te suffit de supprimer la ligne "Dim CD As CommonDialog" (ou de la mettre en commentaire comme tu veux).
Alors ? C'est mieux comme ça ?
Si ça marche mieux, je ferais un update de mon module.
27 juil. 2005 à 09:58
Erreur de compilation:
Type défini par l'utilisateur non défini
et il me sélectionne "Dim CD As CommonDialog".
Que mettre comme référence ?
27 juil. 2005 à 09:45
J'ai d'ailleur conçu cette source depuis ce PC...
C'est pour ça que je trouve ta remarque bizarre...
27 juil. 2005 à 00:11
Regarde MSDN, faut faire une structure, la remplir correctement et ensuite la passer à l'API.
27 juil. 2005 à 00:08
Par contre, je t'assure que mon code fonctionne très très bien dans VBA. Je l'utilise actuellement avec Excel 97 sans problèmes.
27 juil. 2005 à 00:00
Si c'est la souplesse que tu cherches, pourquoi ne pas utiliser l'API GetOpenFileName(), au moins on est certain que c'est sur la machine cible.
26 juil. 2005 à 15:04
Par contre, ce que tu dis sur le charger / décharger qui prend du temps, oui tu as raison. Le PC lui s'en rend compte mais nous, pauvres petits humains, je ne pense pas que ça nous gêne vraiment (^_^) !
Urgo, désolé si la source existait déjà, je l'ai cherché sur le site et je l'ai pas trouvé alors je pensais que ce code n'avais pas été montré. En même temps, c'est pas trop grave ! Une chance de plus pour ceuw qui cherchent cette fonction de la trouver :) !
26 juil. 2005 à 13:49
26 juil. 2005 à 13:05
with commondialog
....
....
end with
la souplesse reste la meme, l'avantage de ton code c'est que le composant est activé au moment ou tu en as besoin. d'un autre coté, il ne faudrait pas que tu en ai besoin souvent, car charger decharger prend aussi du temps.