Ouverture d'un fichier xlsx avec nom incomplet
Bonjour à tous,
J'ai réussis à faire quasiment la totalité du code, hors il me manque juste un petit bout, c'est pour ça que j'ai besoin d'aide.
Pour commencer J'ai crée un module permettant ouvrir des fichier de tous types. Pour les fichier fixes je n'ai aucun souci, le nom et le chemin d'accès sont les mêmes.
En revanche pour certains fichiers, j'ai le début du chemin d'accès (fixe), j'ai créer ensuite un userform pour renseigner la suite du chemin d'accès (variable). Le code fonctionne correctement et permet de m'ouvrir le dossier final. J'aimerais aller plus loin et pouvoir ouvrir le fichier excel correspondant dans le dossier final.
Mon chemin est le suivant : "I:\BLABLA_1\BLABLA_2\Année\SXX-XXXXX\
Dans le dossier SXX-XXXXX, j'aimerais ouvrir un fichier excel dont le nom commence par "SXX-XXXXX" mais dans lequel il peut y avoir une suite.
Ex : SXX-XXXXX-results.xlsx ou SXX-XXXXX_results.xlsx ou SXX-XXXXX-TR.xlsx
Il se peut également qu'il y ai plusieurs fichiers excel dans ce dossier.
Les fichiers que je souhaite ouvrir sont tous au formats xlsx.
Je vous joint une capture d'écran des codes que j'ai déjà écris :
En espérant que quelqu'un puisse m'aider,
Merci par avance,
F.
Bonjour,
Quelle est le but de la manoeuvre ? Car je ne sais pas si vous savez mais on peut sélectionner un fichier grâce à une boite de dialogue.
Parce que dans votre cas, on est à mi-chemin entre une automatisation de l'ouverture de fichiers selon critères et l'ouverture manuelle...
Cdlt,
bonjour,
Je sais que je peux ouvrir avec une boîte de dialogue comme si je cliquais sur fichier ouvrir ou même que je peux directement aller chercher le fichier à son endroit en faisant un raccourcit sur mon bureau mais le but était à la fois d’être plus rapide et à la fois de ne pas avoir à faire toute l’arborescence pour trouver mon fichier...
Si c’est possible d’automatiser encore plus mon code je suis à votre écoute :). Sachant que j’ai une part variable dans l’adresse du chemin à modifier avant ouverture !
En attendant votre réponse,
F.
Et bien, je me dis juste que SXXXXX vient de quelque part j'imagine ? Le but serait de ne rien avoir à saisir.
Par exemple, du fait d'un critère, le nom du fichier S123 se retrouve en A1. Si on veut l'ouvrir, on affecte à la variable nomclasseur la valeur de A1. Il faudrait si possible que ce fichier existe bel et bien...
En fait, je ne sais pas quel est le contexte.
Re,
Je vais essayer de détailler un peu plus le contexte. Nous travaillons sur de nombreux projets que nous classons par année puis par numérotation unique, par exemple pour un projet sur l'année 2020 pour le projet 00165 cela donnera : S20-00165
Cette nomination sera à la fois la nomination du dossier et à la fois la nomination du fichier excel que je souhaiterais ouvrir mais qui peut être écris sous plusieurs déclinaisons comme S20-00165-Results, S20-00165_Results, ou S20-00165-TR. La manière d'écrire n'est pas la même en fonction des personnes.
Du coup ce raccourcit me permettrait d’accéder rapidement aux différents dossiers pour consultations sans avoir à chercher dans toutes l'arborescence...
J'espère que c'est plus clair avec ces explications,
F.
Bonjour,
D'accord, je comprends un peu mieux mais ce que je me demande, c'est quel sera le déclencheur ? Pourquoi prendre le S20-00165 et pas le 164 ? Y a-t-il une logique ou c'est purement arbitraire ? Et ces nominations figurent donc sur votre fichier ? Vous pourriez donc, en double-cliquant sur une cellule ayant la valeur S20-00165 directement ouvrir le fichier ?
Bonjour,
J'aimerais que le déclencheur soit un bouton dans le ruban d'excel qui ouvre un userform afin de renseigner quelle est l'année de l'étude et quel est son numéro. En effet, dans une journée je peux ouvrir plein de fichiers différents de façon purement arbitraire, et les numéros ne se suivent pas forcement il se peut que le 00165 existe mais qu'il y en ai plus jusqu'au 00269.
En revanche l'userform me sert à pré-remplir mes variables présentes dans le chemin d'accès car je sais que ce que je souhaite ouvrir existe forcement. La seule logique ici est dans les deux derniers sous-dossier qui seront toujours écris de la même manière.
Désolé d'insister mais ces variables à saisir sur l'userform vous les connaissez par coeur ? Ou elles se trouvent déjà sur le fichier ? Ma question est : pourquoi créer un userform quand un double-clic sur une cellule pourrait suffire, sachant qu'il ne pourrait y avoir de faute de saisie !?!
Voici un essai à adapter vu que j'ai assez peu d'informations :
Sub Valider_click()
Dim racine$, dossier$, fichier$, chemin$
'etablir et test sous dossier
racine = "I:\BLABLA1\BLABLA2\" & textbox_annee.Value & "\" '<<<<<<<<<<<<<<<
dossier = textbox_code.Value 'ou = "S" & right(textbox_annee, 2) & "-" & textbox_code.value '<<<<<<<<<<<<<<<<
dossier = Dir(racine & dossier, vbDirectory)
If dossier = "" Then
MsgBox "Dossier correspondant inexistant", vbCritical
Exit Sub
End If
'recherche fichier
racine = racine & dossier & "\"
fichier = dossier & "*.xlsx"
fichier = Dir(racine & fichier)
If fichier = "" Then
MsgBox "Fichier correspondant inexistant", vbCritical
Exit Sub
End If
'ouverture fichier
chemin = racine & fichier
Workbooks.Open chemin
End SubMais je pense que la solution userform n'est pas à privilégier, surtout si vous faites ça souvent au cours d'une même journée...
Re,
Je connais les numéros par coeur et j'utilise un userform car ces valeurs ne sont pas reportées sur le classeur excel lui même. Je travaille souvent sur autre chose et j'ai besoin d'ouvrir ces fichiers juste pour consultation mais je n'ai pas moi même enregistrées ces fichiers c'est pourquoi je n'ai pas le nom exact mais seulement la racine commune au nom. Est-ce plus clair pour vous ?
Merci,
F.
Oui, c'est plus clair. Mais je vous ai déjà mis une proposition de code plus haut.
En voici une seconde (méthode différente), avec boite de dialogue ciblée :
Sub Valider_click()
Dim racine$, dossier$, chemin$
dim fd as filedialog
'etablir et test sous dossier
racine = "I:\BLABLA1\BLABLA2\" & textbox_annee.Value & "\" '<<<<<<<<<<<<<<<
dossier = textbox_code.Value 'ou = "S" & right(textbox_annee, 2) & "-" & textbox_code.value '<<<<<<<<<<<<<<<<
dossier = Dir(racine & dossier, vbDirectory)
If dossier = "" Then
MsgBox "Dossier correspondant inexistant", vbCritical
Exit Sub
End If
racine = racine & dossier & "\"
set fd = application.filedialog(msofiledialogopen)
with fd
.title = "Sélectionner le fichier"
.Initialfilename = racine
.show
.execute
end with
End SubCdlt,
Bonjour Ironfloflo, 3GB,
Avec le code ci-dessous tu auras au maximum deux clics à faire.
Soit Ouvrir si l'un des noms des 2 premiers fichiers avec result est présent sinon faire Annuler.
Donc la recherche se fera sur le TR et donc Ouvrir sinon aucun des fichiers ne sont présents et ce sera Annuler pour quitter le programme.
Sub RechFichier()
Dim fd As FileDialog
Dim NomFichier As String, fich(1)
'A adapter selon dossier et sous-dossier
chemin = Ton chemin de dossier
fich(0) = "SXX-XXXXX?result*": fich(1) = "SXX-XXXXX?TR*"
For i = 0 To 1
Set fd = Application.FileDialog(msoFileDialogFilePicker)
With fd
.Filters.Add "Fichiers Excel", "*.xlsx"
.Title = "Recherche de fichier"
.InitialFileName = chemin & fich(i) & ".xlsx"
End With
If fd.Show = -1 Then NomFichier = fd.SelectedItems(i)
If NomFichier <> "" Then Exit For
Next i
If NomFichier <> "" Then Workbooks.Open (NomFichier)
Set fd = Nothing
End SubMerci beaucoup pour votre aide !
Je me suis permis de faire une mix entre vos 2 propositions qui correspondent parfaitement à mes attentes. J'ai même améliorer mon code en passant à seulement une textbox puis en extrayant seulement le texte nécessaire.
Je passe le sujet en résolu.
Bonne journée,
F.