VB Excel ouvrir fichier nom incomplet
Résolu
Xixi
-
Papoum -
Papoum -
A voir également:
- Vba rechercher un fichier avec une partie du nom
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier rar - Guide
- Fichier .dat - Guide
17 réponses
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
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
essaye avec..
dim Fich as string
Fich = Dir("D:\Groupe\Test") & "*"
ouvrir Fich
Ca marche j'ai testé.
A+
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?
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
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
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.
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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 :'(
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 :'(
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.
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.
bonjour,
essaie de faire ça :
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
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???
Concernant le DIR ca renvoi tjs * :-( comprend pas pourquoi ca marche chez toi lermite :s une option a activer???
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
Mais je pense a une chose... Essaye aussi..si ce n'est pas dans le même répertoir
Fich = "D:\Groupe\" & dir(fich)
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)
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.
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.
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" & "*") ?
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 :-(
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 :-(
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
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