Menu

VB Excel ouvrir fichier nom incomplet [Résolu/Fermé]

- - Dernière réponse :  Papoum - 14 déc. 2013 à 12:58
Bonjour,

Je désire ouvrir un fichier dont je connais le répertoire mais pas le nom complet.

Exemple : ouvrir le fichier D:\Groupe\Test280520081102.xls

En sachant que je n'ai dans mon répertoire qu'un seul fichier dont le nom commence par "Test"

Merci de votre aide
Afficher la suite 

17 réponses

Meilleure réponse
1
Merci
Euhhh presque pour le premier, mais en fait le Dir ne fonctionne pas apparemment.

Sub TestDir()

Dim R As String
R = ThisWorkbook.FullName
R = Left(R, 8) & "*"
MsgBox R 'le nom tronquer du classeur et chemin. OK renvoie D:\Group
MsgBox Dir(R) 'le nom complet du classeur. KO ne renvoie rien
End Sub

Par contre....

Fich = "D:\Groupe\" & dir("D:\Groupe\Test1*") me renvoie le bon fichier.

:-) :-) :-) :-) :-)


Encore une petite question en rapport ;-) comme j'essaye d'être propre au lieu de mettre D:\Groupe\ je préfère mettre .\ et ensuite pour ouvrir le workbook je crois qu'il ne faut que le nom du .xls donc comment éliminer les caracteres donnant le chemin du fichier pour n'en garder que le nom sachant que ce nombre de caracteres est fixe?

Un grand merci lermite

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 54226 internautes nous ont dit merci ce mois-ci

Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
27 janvier 2014
964
0
Merci
Bonjour,
Si tu n'a qu'un fichier qui commence par Test pourquoi mettre tout ces numéros après ?

A+
Il s'agit d'un fichier généré automatiquement dont on ne doit pas modifier le nom. Je dois donc garder le format, mais à chaque lancement de mon programme le fichier a été remplacé par un autre horodaté différemment.
Je sais donc qu'on a un fichier Test??????.xls à ouvrir mais c'est tout.
Messages postés
818
Date d'inscription
vendredi 29 février 2008
Statut
Membre
Dernière intervention
20 avril 2012
131
0
Merci
bonjour tu devrais t'en sortir avec la fonction DIR() qui va te renvoyer le contenu d'un repertoire
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
27 janvier 2014
964
0
Merci
essaye avec..
dim Fich as string
Fich = Dir("D:\Groupe\Test") & "*"

ouvrir Fich
Ca marche j'ai testé.
A+
En faisant

Fich = Dir("D:\Groupe\") & "*"
MsgBox Fich

Je suis capable de voir les fichiers dans mon répertoire
Par contre

Fich = Dir("D:\Groupe\Test") & "*"
MsgBox Fich

Renvoie toujours *
DIR() n'est il pas fait pour lister le contenu d'un répertoire et donc on lui donne en paramètre un répertoire et non un répertoire + début du fichier??

Sinon comme solution peut on faire une boucle sur le Dir("D:\Groupe\") & "*" et tester le début de la chaine renvoyée s'il est égal a la bonne valeur?
Exemple :
dans le répertoire j'ai Test128052008 et Test227052008, je sais que je cherche un fichier Test1********, je peux sans doute comparer le début de Fich à la chaine "Test1" non?
Et pendant qu'on est dans le travail sur des fichiers j'ai une autre question (oui je suis un débutant lol)

Lorsque je ferme un fichier et que je veux (ou non) sauvegarder je fais un Fichier.close True (ou False)

Si je supprime une feuille j'utilise un Delete mais le système me demande si je veux supprimer toutes les données de la feuille. Comment forcer cette suppression? (pas moyen de mettre True ou False apparemment)

De même quand j'ouvre un fichier .xls ou il y a des mises à jour (relation avec un autre fichier), il me demande si je veux mettre à jour. Mais je ne veux pas lol comment lui dire avant qu'il demande?

Merci
lermite222
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
27 janvier 2014
964 > Xixi -
Tu dit qu'il n'y a qu'un seul fichier qui commence par Test. Si c'est bien le cas, dir te renvoi le seul fichier qui commence par Test mais complet.
Pour tes autres questions je reviens tout à l'heure.
EDIT:
J'ai lu ton second message, tu pourrait pas expliquer CLAIREMENT au départ stp, d'abord y en a qu'un, ensuite y en a plusieur c'est quoi ce broll.... je vais pas chaque fois revoir le truc..

EDIT2:
Pour empècher Excell de demander confirmation...
Application.DisplayAlert = false
et pour remettre normal
Application.DisplayAlert = True

EDIT 3:
A=1
Fich = Dir("D:\Groupe\Test") & A & "*"
ou bien
Fich = Dir("D:\Groupe\Test1") & "*"
Mais faut qu'il n'y en ai qu'un.
et attention !! avec Dir la case à de l'importance.. Test n'est pas égale à test.

Bravo, je me creusais la tête, en fait c'est tout simple.
Encore merci
0
Merci
Alors je viens de tout tester ^^

Fich = Dir("D:\Groupe\Test1") & "*"
MsgBox Fich

Ca renvoie * et pourtant j'ai bien un fichier Test128051653 dans mon dossier (et aussi un Test228051653 mais celui la ne doit pas etre pris en compte vu le chemin en dur) c'est bizarre non? :'(

Avant toutes mes instructions j'ai tenté un Application.DisplayAlert = false et ca plante :(
Erreur d'exécution '438'
Propriété ou méthode non gérée par cet objet

Snif :'(
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
27 janvier 2014
964
0
Merci
j'ai oublié le "S"
Application.DisplayAlerts = False
pour le Dir je Re.Re contrôle.
EDIT:
bon, comme dit... je Re.Re contrôle
j'ai même créer un classeur avec le nom du tient, et contrairement à ce que j'avais dit il n'y a pas de différence entre maju et minuscule et CA FONCTIONNE NICKEL
Mais ile ne faut qu'un seul fichier avec ce début de nom
vérifie qu'il n'y a pas d'erreur dans le répertoir, la lettre du DD etc..
vas dans l'explorateur de fichier et control tout.
même si plusieur fichier qui commence par Test1 DIR renvoi le premier trouver....
Encore autre chose, fait un copier/coller du code que j'ai mis pour être sûr que tu a pas d'erreur.
Messages postés
18
Date d'inscription
vendredi 16 mai 2008
Statut
Membre
Dernière intervention
1 décembre 2008
0
Merci
bonjour,
essaie de faire ça :
Option Explicit
 
' option à activer dans VBA menu Outils | Références : Cocher Microsoft Scripting Runtime (A NE PAS OUBLIER)
 
Const DossierFichiers As String = "C:\" 'le chemin de ton répertoire
Sub Ouvrir_fichier()
    ListeFichiersDans DossierFichiers
End Sub
 
Private Sub ListeFichiersDans(ByVal NomDossier As String)
Dim FSO As Scripting.FileSystemObject
Dim DossierSource As Scripting.Folder
Dim Fichier As Scripting.File
Dim x As Long

 
    Set FSO = New Scripting.FileSystemObject
    Set DossierSource = FSO.GetFolder(NomDossier)
           
    x = 0
    For Each Fichier In DossierSource.Files
            x = x + 1
            Workbooks.Open Filename:=Fichier
            
    Next Fichier
         
    MsgBox Fichier
     
    Set Fichier = Nothing
    Set DossierSource = Nothing
    Set FSO = Nothing
End Sub
lermite222
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
27 janvier 2014
964 -
Behhh oui, mais t'as vu le nombre de lignes de codes pour en remplacer une, fait plutôt un test
avec le DIR pour avoir une confirmation.
A+
EDIT: et de plus ta macro ne répond pas à la demande...:-D
0
Merci
Euhhhh oui non euhhh y'a pas moins compliqué? Ou alors vous pouvez m'expliquer? dsl jsuis une buse :-(

Concernant le DIR ca renvoi tjs * :-( comprend pas pourquoi ca marche chez toi lermite :s une option a activer???
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
27 janvier 2014
964
0
Merci
Non, rien à ajouter, Dir renvoi un fichier ou rien du tout si trouve pas ("") mais sûrement pas "*"
donc je persiste et signe, tu à une erreur soit dans le répertoir, soit dans les noms de fichiers.. à toi de la trouver, je suis pas devant ton PC

EDIT:
Fait un copier/coller le cette sub et tape F5
Sub TestDir()

Dim R As String
    R = ThisWorkbook.FullName
    R = Left(R, 8) & "*"
    MsgBox R 'le nom tronquer du classeur et chemin.
    MsgBox Dir(R) 'le nom complet du classeur
End Sub


Mais je pense a une chose... Essaye aussi..si ce n'est pas dans le même répertoir
Fich = "D:\Groupe\" & dir(fich)
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
27 janvier 2014
964
0
Merci
pour ouvrir le classeur il est préférable pour pas dire obligatoire de fournir le chemin + nom + extention, c'est à dire complet.
Pourquoi,
Ce n'est pas parce que tu travail dans un répertoir que c'est celui là qui est actif, donc si tu ne donne que le nom le classeur que tu tente d'ouvrir ce serra avec le chemin du répertoir courrant.
Pour rendre un répertoir actif il faut faire un Chdrive et un chDir. (voir aide) qui d'ailleur n'explique pas bien, il faut obligatoirement fair d'abord un ChDrive avec la lettre du DD et ensuite un ChDir sur le répertoir.
A+
EDIT:
Pour le test 2, remplace la ligne
R = Left(R, 8) & "*"
par
R = Left(R, 10) & "*"
En fait c'est parcequ'il manque le \ que ca fonctionnais pas.
Messages postés
375
Date d'inscription
mercredi 21 mai 2008
Statut
Membre
Dernière intervention
17 octobre 2008
111
0
Merci

Fich = Dir("D:\Groupe\Test1") & "*"
MsgBox Fich

Ca renvoie * et pourtant j'ai bien un fichier Test128051653 dans mon dossier (et aussi un Test228051653 mais celui la ne doit pas etre pris en compte vu le chemin en dur) c'est bizarre non? :'(


La commande n'est pas plutôt Fich = Dir("D:\Groupe\Test1" & "*") ?
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
27 janvier 2014
964
0
Merci
bonjour onesdf,
voir poste 14 et 15
A+
onesdf
Messages postés
375
Date d'inscription
mercredi 21 mai 2008
Statut
Membre
Dernière intervention
17 octobre 2008
111 -
J'avais pas lu jusqu'au bout, milles excuses :)
lermite222
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
27 janvier 2014
964 > onesdf
Messages postés
375
Date d'inscription
mercredi 21 mai 2008
Statut
Membre
Dernière intervention
17 octobre 2008
-
Aucun problème, y a que ceux qui font rien qui font jamais d'erreur :D
A+
0
Merci
Mui non jsais pas ^^ ca m'emballe pas :D
J'aimerai pouvoir ouvrir mon fichier en donnant un chemin relatif :$

En fait c'est la seule contrainte au lancement du prog c'est d'avoir les documents annexes dans le même dossier que le principal (ca permet chaque mois de mettre un historique de côté)

Alors certes avec les méthodes ou je met le nom en dur D:\Groupe\Test1* ca passe mais ca serait mieux d'avoir .\Test1* sachant que mon fichier principal est forcément dans le même dossier Groupe *-)

Fich = ".\" & Dir(".\Test1*") 'ca ne marche pas ca renvoie .\

En fait dans le dossier on a forcément principal.xls d'où est lancé le programme et Test130051610.xls que l'on doit ouvrir
le truc c'est qu'on peut très bien être dans D:\Groupe1\ que dans D:\Groupe2\ la seule contrainte étant d'avoir principal.xls dans ce dossier ainsi que les fichiers annexes.

Un peu la misère en fait :-(
onesdf
Messages postés
375
Date d'inscription
mercredi 21 mai 2008
Statut
Membre
Dernière intervention
17 octobre 2008
111 -
Fich = Dir(ActiveWorkbook.Path & "\TEST1*) ?
lermite222
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
27 janvier 2014
964 > onesdf
Messages postés
375
Date d'inscription
mercredi 21 mai 2008
Statut
Membre
Dernière intervention
17 octobre 2008
-
L'idée est bonne mais pas tout à fait juste
Dim Appli As String
    Appli = ThisWorkbook.Path & "\"
    Fich = Appli & Dir(Appli & "test1*")

ou en une fois...
    Fich = ThisWorkbook.Path & "\" & Dir(ThisWorkbook.Path & "\" & "test1*")
0
Merci
Ahhh ca marche nickel merci bien :-)
0
Merci
Hello, je me permet de poursuivre cette discussion ;p

Tout d'abord merci pour le code, bien utile :)

Voila, imaginons que nous ayons plusieurs Fichiers dans un répertoire genre test1 , test2, test4012 ...
Si on veut tous les supprimer faut-il passer par une boucle ?
J'ai tenté ceci, ca fonctionne, mais j'ai peur que se soit un peu barbare ^^'

Dim Fich As String
Fich = "C:\" & Dir("C:\test*")
Do While Fich <> "C:\"
Kill Fich
Fich = "C:\" & Dir("C:\test*")
Loop

Donnez moi vos avis ;P
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
27 janvier 2014
964
0
Merci
Bonjour,
Kill "C:\test*"
Suffira..
A+
0
Merci
En effet, c'est vraiment plus simple.
Merci
A+