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

  • Auteur de la discussion Nova13
  • Date de début

Nova13

Habitué
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...
Code:
fichier = InputBox("Quel est le nom de votre fichier?")
If Dir("c:\" & fichier & ".dbf") = "" Then  // test l'existance du fichier

    If fichier = "" Then
    //il peut avoir volontairement rien entré
    Else

    MsgBox "Fichier non trouvé" 
    trouve_fich = Application.Dialogs(xlDialogFindFile).Show

        If trouv_fich = False Then
        GoTo traitement
        Else

        fichier=  // et c'est ici que je bloque
        Workbooks.Open "c:\" & fichier & ".dbf"
        ActiveWorkbook.SaveAs "c:\" & fichier, FileFormat:=xlWorkbookNormal
        ActiveWorkbook.Close
        GoTo traitement

        End If
    End If
Else
...
End If
 

batchy

Grand Maître
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 ?
 

Nova13

Habitué
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.

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...
 

Nova13

Habitué
En fait je me prenais la tete pour rien, il suffisait d'un
Code:
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
Code:
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 "\") ...?
 

zeb

Modérateur
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 :
Code:
Dim fso As FileSystemObject
Dim filename As String

Set fso = New FileSystemObject
filename = fso.GetFileName("c:\mesdocuments\essai.xls")
Set fso = Nothing
 

Nova13

Habitué
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!
 

zeb

Modérateur
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 :merci:
 

Nova13

Habitué
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.

:merci: *snif* la larme à l'oeil *snif* :merci:
 

zeb

Modérateur
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 par exemple ;)
 

Nova13

Habitué
elle m'a envoyée un mp, on est en train de régler ca. je pense qu'elle postera la réponse.
 

zeb

Modérateur
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 :
elle postera la réponse.
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 129
Messages
6 717 853
Membres
1 586 373
Dernier membre
https://forum.tomshardwar
Partager cette page
Haut