Se connecter avec
S'enregistrer | Connectez-vous

[VBA] récupération fichier par boite de dialogue windows

Dernière réponse : dans Programmation

Alors, le souci est que je demande à l'utilisateur du programme d'entrer un nom de fichier, pour ensuite l'utilisé etc...
Mais comme il faut tout prévoir, au cas où l'utilisateur entre un nom de fichier inexacte, je lui donne une seconde chance en affichant la boite de dialogue intégrée à windows pour qu'il cherche manuellement son fichier.
Ma question réside justement dans le fait qu'il cherche son fichier, et donc - peut-etre - va-t-il le trouver. Et dans ce dernier cas, comment fait-on pour récupérer dans une variable le nom de ce fichier.

Voilà ce que j'ai écrit: -l'étiquette traitement est l'endroit où je traite mes informations- Je sais :o  pas de goto :o  mais là, pas le choix...
  1. fichier = InputBox("Quel est le nom de votre fichier?")
  2. If Dir("c:\" & fichier & ".dbf") = "" Then // test l'existance du fichier
  3.  
  4. If fichier = "" Then
  5. //il peut avoir volontairement rien entré
  6. Else
  7.  
  8. MsgBox "Fichier non trouvé"
  9. trouve_fich = Application.Dialogs(xlDialogFindFile).Show
  10.  
  11. If trouv_fich = False Then
  12. GoTo traitement
  13. Else
  14.  
  15. fichier= // et c'est ici que je bloque
  16. Workbooks.Open "c:\" & fichier & ".dbf"
  17. ActiveWorkbook.SaveAs "c:\" & fichier, FileFormat:=xlWorkbookNormal
  18. ActiveWorkbook.Close
  19. GoTo traitement
  20.  
  21. End If
  22. End If
  23. Else
  24. ...
  25. End If
Lassé par la pub ? Créez un compte
Expert Programmation

Citation :
Voilà ce que j'ai écrit: -l'étiquette traitement est l'endroit où je traite mes informations- Je sais :o  pas de goto :o  mais là, pas le choix...
euh si tu à le choix. ou bien tu recode ça correctement, ou bien tu utilise une fonction...

quand au code il est confu, pourquoi tester si ''fichier'' est vide après avoir tésté qu'il existait ?

pourquoi les fichiers doivent t'il être à la racine pour avoir l'utilisation la plus simple ?

car je test l'existance d'un fichier (contenu dans la variable "fichier"). Mais si l'utilisateur voulait ne rien inscrire, qu'il a donc laissé vide l'inputbox, forcément le fichier n'existe pas. Et je repecte le fait qu'il ne voulait pas charger de fichier en testant si "fichier" est vide.

Citation :
pourquoi les fichiers doivent t'il être à la racine pour avoir l'utilisation la plus simple ?
:heink:  je ne veux pas faire le totalitariste, mais... en plus de ne pas être sur d'avoir tout à fait compris ce que tu as voulu dire, je ne vois pas à quoi cela va me servir d'analyser cette question quasi-philosophique :??: 

EDIT: ne le prend pas mal, malgré l'apparence, il n'y a aucune critique envers ce que tu vient de dire, juste de l'incompréhension...

En fait je me prenais la tete pour rien, il suffisait d'un
  1. trouve_fich=application.getopenfilename

Mais bon, c'est pas parfait car trouve_fich retourne tout le chemin du fichier sélectionné (ce qui est quand meme très pratique) mais je n'arrive pas à extraire le nom du document.
par exemple si j'ai c:\mesdocuments\essai.xls , je voudrai me retrouver avec juste essai.xls
Sans pour autant faire un
  1. trouve_fich = right(trouve_fich, Len(trouve_fich) - 16)
car ce sera pas toujours dans mesdocuments.

Je me suis dit qu'il faudrait arriver à supprimer les caractères un par un (pas de problème) et au moment d'arriver sur le dernier "\" le faire une dernière fois et sortir de la boucle.

Mais comment faire pour savoir si c'est le dernier (étant donné qu'il peut y avoir plusieurs sous-dossier et donc 5 voir 6 "\") ...?
Expert Programmation

Une bonne raison de fuir VB, c'est que pour récupérer le nom d'un fichier, il faut faire ce genre de chose :
  1. Dim fso As FileSystemObject
  2. Dim filename As String
  3.  
  4. Set fso = New FileSystemObject
  5. filename = fso.GetFileName("c:\mesdocuments\essai.xls")
  6. Set fso = Nothing

waou c'est magique ton truc. merci boooocoup.

Zeb, juste une petite question, t'es pro dans combien de langage?
On te voit partout et t'as réponse à tout...
Avoue! en fait t'es un ordi super évolué mis au point par la mafia russe pour répondre à toutes les questions... Même celles des internautes!
Expert Programmation

Nan, je suis juste un vieux de la vieille.... ;) 

J'exerce (exerçais) principalement en Delphi/VB sous Windows, C/C++ sous UNIX, Cobol sous MVS, en support de DB2/Informix/Oracle/SQLSrv Ca fait un vaste périmètre !

Et ça donne l'occasion de tomber sur des tas de trucs et d'astuces que j'ai le plaisir de rendre ici.

On ne me voit pas partout : Je ne poste qu'en programmation et dans le monde de Linux :o  Par exemple, en ce qui concerne l'édition en ligne (html, php, aps) je ramène souvent ma fraise, mais rarement avec une soluce.

Que tes remerciements nominatifs aillent aussi à tous les autres contributeurs. Ils suffisent à supporter tous les autres malpolis :jap: 

Ben dit donc... excuse moi pour le cv, c'est impressionnant.

C'est vrai que sur ce site, comparé à d'autres, les réponse sont peut-etre moins nombreuses, mais elles sont toujours de qualité (ce qui rattrape largement).
Et vu le nombre de personnes compétentes qui y passe (à ton image), ainsi que le temps quelles-y passe, de plus dans domaines extrêmement variés,cela rend ce site d'une très grande qualité.
C'est une vrai réussite. Merci.

:jap:  *snif* la larme à l'oeil *snif* :jap: 
Expert Programmation

Heureusement que mon avatar est un personnage déjà tout rouge... ;) 
Il y a de très nombreuses personnes très compétantes sur ce site... toi y compris. La preuve ici par exemple ;) 
Expert Programmation

ouh, c'est vilain les mp !
On a la question sur ppc et la réponse en mp !
Dans entre-aide; il y a entre

Amusez-vous bien les filles, pourvu que :
Citation :
elle postera la réponse.
Lassé par la pub ? Créez un compte