Recuperer un classeur sans avoir le nom exact

Résolu/Fermé
Lilice - 21 avril 2021 à 12:55
yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 - 26 avril 2021 à 14:07
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.


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

dachiasse Messages postés 1709 Date d'inscription samedi 12 septembre 2020 Statut Membre Dernière intervention 13 mai 2021 148
21 avril 2021 à 13:17
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.
0
VictorVM1 Messages postés 15 Date d'inscription mercredi 21 avril 2021 Statut Membre Dernière intervention 5 mai 2021
21 avril 2021 à 15:07
Merci de ta réponse,

Mon objectif est de récupérer ce classeur pour prendre ses donnés (sous forme de tableau) et les insérer dans un autre classeur
Effectivement ton idée à l'air pas mal mais je n'arrive pas a trouver le moyen de mettre ça en place
0
dachiasse Messages postés 1709 Date d'inscription samedi 12 septembre 2020 Statut Membre Dernière intervention 13 mai 2021 148 > VictorVM1 Messages postés 15 Date d'inscription mercredi 21 avril 2021 Statut Membre Dernière intervention 5 mai 2021
21 avril 2021 à 16:47
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 !
0
VictorVM1 Messages postés 15 Date d'inscription mercredi 21 avril 2021 Statut Membre Dernière intervention 5 mai 2021 > dachiasse Messages postés 1709 Date d'inscription samedi 12 septembre 2020 Statut Membre Dernière intervention 13 mai 2021
22 avril 2021 à 09:33
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
0
VictorVM1 Messages postés 15 Date d'inscription mercredi 21 avril 2021 Statut Membre Dernière intervention 5 mai 2021 > VictorVM1 Messages postés 15 Date d'inscription mercredi 21 avril 2021 Statut Membre Dernière intervention 5 mai 2021
22 avril 2021 à 09:49
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
0
Utilisateur anonyme > VictorVM1 Messages postés 15 Date d'inscription mercredi 21 avril 2021 Statut Membre Dernière intervention 5 mai 2021
22 avril 2021 à 14:30
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
0
yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477
21 avril 2021 à 13:22
bonjour,
si j'étais toi, j'utiliserais la fonction dir pour déterminer le nom du ficher.
0
yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477
21 avril 2021 à 13:30
exemple:
Dim nomfichier As String, nomchemin as string
nomchemin= "V:\Serveur\"
nomfichier = nomchemin + dir(nomchemin + _
         "Classeur" & Format(Date, "yyyymmdd") & "??????_Export_.XLS")
0
VictorVM1 Messages postés 15 Date d'inscription mercredi 21 avril 2021 Statut Membre Dernière intervention 5 mai 2021 > yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024
21 avril 2021 à 15:17
Salut, merci de ton aide. Malheureusement le MsgBox me renvoie V:\Serveur\ (que le chemin). Je ne connais pas vraiment la fonction dir mais ne faudrait il pas séparer le chemin et la recherche du nom qui serait une sorte d'attribut?
0
yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477 > VictorVM1 Messages postés 15 Date d'inscription mercredi 21 avril 2021 Statut Membre Dernière intervention 5 mai 2021
21 avril 2021 à 16:03
peux-tu partager ton code?
0
VictorVM1 Messages postés 15 Date d'inscription mercredi 21 avril 2021 Statut Membre Dernière intervention 5 mai 2021 > yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024
Modifié le 22 avril 2021 à 08:31
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?
0
yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477 > VictorVM1 Messages postés 15 Date d'inscription mercredi 21 avril 2021 Statut Membre Dernière intervention 5 mai 2021
22 avril 2021 à 08:21
tu n'as pas utilisé le code suggéré.
0
VictorVM1 Messages postés 15 Date d'inscription mercredi 21 avril 2021 Statut Membre Dernière intervention 5 mai 2021
21 avril 2021 à 15:31
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
0
Utilisateur anonyme > VictorVM1 Messages postés 15 Date d'inscription mercredi 21 avril 2021 Statut Membre Dernière intervention 5 mai 2021
Modifié le 21 avril 2021 à 18:19
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")
0