Recuperer un classeur sans avoir le nom exact

Résolu
Lilice -  
yg_be Messages postés 23541 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.


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
A voir également:

3 réponses

dachiasse Messages postés 1709 Date d'inscription   Statut Membre Dernière intervention   150
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   150 > VictorVM1 Messages postés 15 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   > dachiasse Messages postés 1709 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   > VictorVM1 Messages postés 15 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
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 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 583
 
bonjour,
si j'étais toi, j'utiliserais la fonction dir pour déterminer le nom du ficher.
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 583
 
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   Statut Membre Dernière intervention   > yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention  
 
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 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 583 > VictorVM1 Messages postés 15 Date d'inscription   Statut Membre Dernière intervention  
 
peux-tu partager ton code?
0
VictorVM1 Messages postés 15 Date d'inscription   Statut Membre Dernière intervention   > yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention  
 
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 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 583 > VictorVM1 Messages postés 15 Date d'inscription   Statut Membre Dernière intervention  
 
tu n'as pas utilisé le code suggéré.
0
Utilisateur anonyme
 
0
VictorVM1 Messages postés 15 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
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