Recuperer un classeur sans avoir le nom exact
Résolu
Lilice
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention -
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Pour faire simple j'ai besoin de récupérer un classeur qui est mis à jour chaque jour, je connais son chemin mais concernant son nom il y a 6 caractères qui changent chaque jour et je je ne peux donc pas connaitre.
Ce qui me donne, par exemple aujourd'hui, Classeur20210421_Export_.XLS
or je voudrais importer un truc du type Classeur20210421XXXXXX_Export_.XLS
Les X étant des caractères non discriminants
Merci a vous
Pour faire simple j'ai besoin de récupérer un classeur qui est mis à jour chaque jour, je connais son chemin mais concernant son nom il y a 6 caractères qui changent chaque jour et je je ne peux donc pas connaitre.
Dim nomfichier As String
nomfichier = "V:\Serveur\Classeur" & Format(Date, "yyyymmdd") & "_Export_.XLS"
Ce qui me donne, par exemple aujourd'hui, Classeur20210421_Export_.XLS
or je voudrais importer un truc du type Classeur20210421XXXXXX_Export_.XLS
Les X étant des caractères non discriminants
Merci a vous
Configuration: Windows / Firefox 68.0
3 réponses
-
Salut,
C'est évident pour toi, mais pas pour moi. Est-ce que caractères non discriminants signifie qu'un même caractère peut se répéter dans XXXXXX ? Par exemple : AZEZRT (Z 2 fois) ?
Je ne maîtrise pas bien VBA. Et comme je ne sais pas ce que tu veux précisément. Ouvrir le classeur ? L'enregistrer quelque part ? Autre chose, à préciser ?
Je te propose un algorithme :
Tu mets une variable dossier de type String qui contiendra le chemin absolu du répertoire qui contient le fichier. Tu ajoutes une variable fichierDebut du même type qui contient "Classeur" & Format(Date, "yyyymmdd")". Tu ajoutes une variable fichierFin = "_EXPORT_.XLS"
Tu parcours les fichiers dans le répertoire dossier :
Si le fichier commence par fichierDebut ET finit par fichierFin ALORS
Tu ouvres le fichier et une msgbox
Pour la msgbox, tu peux mettre : "Est-ce le bon fichier ?", tu vérifies visuellement. Si c'est le bon, tu arrêtes de parcourir le répertoire et tu traites le fichier.-
-
Je laisse les autres t'aider à retranscrire le code. C'est du pseudo-code donc non exécutable en VBA :
# déclarer les variables
dossier, debut_fichier, fin_fichier, fichier, bon_fichier de type CHAÎNE
source, feuille_source, plage_source, cellule_source de type OBJET
cible, feuille_cible de type OBJET
dossier = "V:\Serveur\"
debut_fichier = "Classeur" & Format(Date, "yyyymmdd")
fin_fichier = "_EXPORT_.XLS"
POUR chaque fichier de dossier FAIRE :
SI fichier commence par debut_fichier ET fichier termine par fin_fichier ALORS
bon_fichier = fichier
QUITTER POUR
FIN POUR
cible = classeurEnCours
feuille_cible = cible.feuilleQueTuVeux
source = ouvrir(fichier)
feuille_source = source.feuilleQuiCorrespond
plage_source = feuille_source.plageQuiCorrespond
POUR chaque cellule_source de plage_source FAIRE :
feuille_cible.cellule(cellule_source.colonne, cellule_source.ligne).écrire(cellule_source.valeur)
FIN POUR
source.fermer() # attention, penser à enregistrer ! -
Voici le code que j'ai pu produire. En fonction des itérations Fichier prend bien la valeur texte de chacun des fichiers mais le MsgBox nomfichier ne revoie rien
Sub recherche()
Dim Dossier As String, Fichier As String, i As Integer
Dim nomfichier As String
Dossier = "V:\Serveur\Classeurs\"
i = 0
Fichier = Dir(Dossier)
Do While Fichier <> ""
i = i + 1
Fichier = Dir
If Fichier Like "Classeur" & Format(Date, "yyyymmdd") & "*_Export_.XLS" Then nomfichier = Fichier
Loop
MsgBox nomfichier
End Sub
Voici le code que j'ai pu produire. En fonction des itérations Fichier prend bien la valeur texte de chacun des fichiers mais le MsgBox nomfichier ne revoie rien, je suppose que c'est le test Like qui foire..
J'ai aussi essayé en utilisant des debuts et fin de nom mais ça ne change rien -
Messieurs, voici ma solution. Ce qui me manquait était la méthode pour introduire une variable dans like. Comme ceci donc: "*" & ladate & "*"
Sub recherche()
Dim Dossier As String, Fichier As String, i As Integer
Dim nomfichier As String
Dim ladate As String
ladate = "Classeur_" & Format(Date, "yyyymmdd")
MsgBox ladate
Dossier = "V:\Serveur\Classeurs\"
i = 0
Fichier = Dir(Dossier)
Do While Fichier <> ""
i = i + 1
Fichier = Dir
If Fichier Like "*" & ladate & "*" Then nomfichier = Fichier
Loop
MsgBox nomfichier
End Sub -
C'est une méthode qui fonctionne en effet. Mais comme le suggère yg_be, un DIr avec le bon masque de recherche devrait renvoyer directement LE fichier qui contient la bonne date: Fichier = Dir(Dossier & "*" & ladate &"*")
Il manquait le "_" après classeur pour que le code posté en 13 fonctionne comme en 14.
Bonne continuation
-
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
bonjour,
si j'étais toi, j'utiliserais la fonction dir pour déterminer le nom du ficher.-
exemple:
Dim nomfichier As String, nomchemin as string nomchemin= "V:\Serveur\" nomfichier = nomchemin + dir(nomchemin + _ "Classeur" & Format(Date, "yyyymmdd") & "??????_Export_.XLS")Sub nomfichier()
Dim nomchemin As String
Dim nomfichier As String
nomchemin = "V:\Serveur\Classeur\"
nomfichier = nomchemin + Dir(nomchemin + _
"Classeur" & Format(Date, "yyyymmdd") & "??????_Export_.XLS")
MsgBox nomfichier
End Sub
Globalement ce que tu m'as recommandé mais je récupère en sortie "V:\Serveur\Classeur\" uniquement
D'ailleurs petite remarque mais pourquoi mettre un underscore?
-
-
Bonjour,
On peut utiliser LIKE : https://docs.microsoft.com/fr-fr/dotnet/visual-basic/language-reference/operators/like-operator-
Bonjour, pourquoi pas, mais j'ai l'impression que Like ne dit que si il y a un fichier ayant un nom similaire ou non
- En effet, le LIKE permet de filtre après avoir récupéré des noms de fichiers "génériques".
La proposition de yg_be devrait fonctionner mais avec "*" au lieu des "??????" (sauf à être sûr du nombre de caractères à remplacer par "?") soit :nomfichier = nomchemin + dir(nomchemin + _ "Classeur" & Format(Date, "yyyymmdd") & "*_Export_.XLS")
-