Recuperer un classeur sans avoir le nom exact [Résolu]

Signaler
-
Messages postés
15515
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
7 mai 2021
-
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

Messages postés
1692
Date d'inscription
samedi 12 septembre 2020
Statut
Membre
Dernière intervention
6 mai 2021
135
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.
Messages postés
1692
Date d'inscription
samedi 12 septembre 2020
Statut
Membre
Dernière intervention
6 mai 2021
135 >
Messages postés
15
Date d'inscription
mercredi 21 avril 2021
Statut
Membre
Dernière intervention
5 mai 2021

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 !
Messages postés
15
Date d'inscription
mercredi 21 avril 2021
Statut
Membre
Dernière intervention
5 mai 2021
>
Messages postés
1692
Date d'inscription
samedi 12 septembre 2020
Statut
Membre
Dernière intervention
6 mai 2021

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
Messages postés
15
Date d'inscription
mercredi 21 avril 2021
Statut
Membre
Dernière intervention
5 mai 2021
>
Messages postés
15
Date d'inscription
mercredi 21 avril 2021
Statut
Membre
Dernière intervention
5 mai 2021

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
Messages postés
378
Date d'inscription
samedi 7 novembre 2020
Statut
Membre
Dernière intervention
6 mai 2021
75 >
Messages postés
15
Date d'inscription
mercredi 21 avril 2021
Statut
Membre
Dernière intervention
5 mai 2021

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
Messages postés
15515
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
7 mai 2021
849 >
Messages postés
15
Date d'inscription
mercredi 21 avril 2021
Statut
Membre
Dernière intervention
5 mai 2021

tu as embrouillé tes noms de dossiers.
peux-tu marquer la discussion comme résolue?
Messages postés
15515
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
7 mai 2021
849
bonjour,
si j'étais toi, j'utiliserais la fonction dir pour déterminer le nom du ficher.
Messages postés
15515
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
7 mai 2021
849
exemple:
Dim nomfichier As String, nomchemin as string
nomchemin= "V:\Serveur\"
nomfichier = nomchemin + dir(nomchemin + _
         "Classeur" & Format(Date, "yyyymmdd") & "??????_Export_.XLS")
Messages postés
15
Date d'inscription
mercredi 21 avril 2021
Statut
Membre
Dernière intervention
5 mai 2021
>
Messages postés
15515
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
7 mai 2021

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?
Messages postés
15515
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
7 mai 2021
849 >
Messages postés
15
Date d'inscription
mercredi 21 avril 2021
Statut
Membre
Dernière intervention
5 mai 2021

peux-tu partager ton code?
Messages postés
15
Date d'inscription
mercredi 21 avril 2021
Statut
Membre
Dernière intervention
5 mai 2021
>
Messages postés
15515
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
7 mai 2021

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?
Messages postés
15515
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
7 mai 2021
849 >
Messages postés
15
Date d'inscription
mercredi 21 avril 2021
Statut
Membre
Dernière intervention
5 mai 2021

tu n'as pas utilisé le code suggéré.
Messages postés
378
Date d'inscription
samedi 7 novembre 2020
Statut
Membre
Dernière intervention
6 mai 2021
75
Messages postés
15
Date d'inscription
mercredi 21 avril 2021
Statut
Membre
Dernière intervention
5 mai 2021

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
Messages postés
378
Date d'inscription
samedi 7 novembre 2020
Statut
Membre
Dernière intervention
6 mai 2021
75 >
Messages postés
15
Date d'inscription
mercredi 21 avril 2021
Statut
Membre
Dernière intervention
5 mai 2021

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")