Caractère "Joker"

max_31

XLDnaute Junior
Bonjour le forum,

J'ai une question qui parait simple, mais je ne sais pas si la réponse le sera...
En effet, je mets regulierement a jour un fichier. Ainsi, pour garder une trace des versions précédentes, je le nomme ainsi :
Chemin\Projet AAAA-MM-JJ
Les anciennes versions sont sauvegardés dans un répertoire indépendant (Chemin\Archives\...).

Je souhaiterais réaliser dans un fichier séparé des sorties, états, ou TCD de ce fichier, via une macro.
Mais le nom du fichier évoluant quasiment quotidiennement, je souhaiterais insérer dans ma macro un caractère "joker", qui permettrait de retrouver le fichier concerné. Ainsi, par exemple, je ferais la recherche sur le therme "Projet" les derniers caratères étant omis pour la recherche du fichier...

Auriez vous une idée, ou une question sur ma problematique ?

Merci d'avance.
 

Gorfael

XLDnaute Barbatruc
Re : Caractère "Joker"

max_31 à dit:
Bonjour le forum,

J'ai une question qui parait simple, mais je ne sais pas si la réponse le sera...
En effet, je mets regulierement a jour un fichier. Ainsi, pour garder une trace des versions précédentes, je le nomme ainsi :
Chemin\Projet AAAA-MM-JJ
Les anciennes versions sont sauvegardés dans un répertoire indépendant (Chemin\Archives\...).

Je souhaiterais réaliser dans un fichier séparé des sorties, états, ou TCD de ce fichier, via une macro.
Mais le nom du fichier évoluant quasiment quotidiennement, je souhaiterais insérer dans ma macro un caractère "joker", qui permettrait de retrouver le fichier concerné. Ainsi, par exemple, je ferais la recherche sur le therme "Projet" les derniers caratères étant omis pour la recherche du fichier...

Auriez vous une idée, ou une question sur ma problematique ?

Merci d'avance.
Salut
Brut de fonderie : c'est possible. Tu fais un test avec
si Nom Like "Projet*" then
te donneras les Nom qui commence par Projet
A+
 

Droussel

XLDnaute Occasionnel
Re : Caractère "Joker"

Bonjour

si j'ai bien compris c'est la création d'un nom different que tu veux et la recherche tu la ferais manuellement ???

essaie ce code qui ajoute la date du jour au nom de fichier
s'il risque d'y avoir plusieurs fichiers par jours il faut que tu ajoutes l'heure
il faut que tu es un fichier PROJET.xls ouvert dans lequel est inséré ce code

Windows("PROJET.xls").Activate
datej = Day(ActiveCell)
If datej < 10 Then
datej = "0" & datej
End If
datem = Month(ActiveCell)
If datem < 10 Then
datem = "0" & datem
End If
datea = Year(ActiveCell)
nom1 = "PROJET" & datea & datem & datej & ".xls"
Windows("PROJET.xls").Activate
ActiveWorkbook.Save
ActiveWorkbook.SaveAs nom1
ActiveWorkbook.Close
Application.DisplayAlerts = True

Bon courage
Denis
 

max_31

XLDnaute Junior
Re : Caractère "Joker"

Merci Droussel pour ta proposition, mais je me suis mal exprimé.
Mon fichier qui a pour nom "Projet AAAA-MM-JJ.xls" existe.
Mais le nom varie régulierement, car je fais une mise a jour reguliere du fichier.
Quand un fichier est mis a jour, je sauvegarde l'ancien dans le repertoire Chemin\sauvegare\ et je mets le nouveau fichier avec le nom "Projet AAAA-MM-JJ.xls" dans le repetoire Chemin\.
Ce que je cherche a faire c'est à ouvrir le fichier Chemin\"Projet AAAA-MM-JJ.xls" par l'intermédiaire d'une macro, qui sera incluse dans un fichier specifique. Mon soucis, c'est de recuperer le nom de fichier sachant qu'il evolue regulierement.
 

Droussel

XLDnaute Occasionnel
Re : Caractère "Joker"

Ce code devrait te permettre de faire ce que tu veux


Dim OuvrirFichiers As Variant
Dim NomFichier As Variant

'chemin pour ordinateur Trésorerie
ChDir ("C:\chemin\")

OuvrirFichiers = Application.GetOpenFilename _
(filefilter:="C:\chemin\PROJET???? (*.xls),*.xls", Title:="fichiers PROJET")
 

Droussel

XLDnaute Occasionnel
Re : Caractère "Joker"

Ce code devrait te permettre de faire ce que tu veux


Dim OuvrirFichiers As Variant
Dim NomFichier As Variant

'chemin
ChDir ("C:\chemin\")

OuvrirFichiers = Application.GetOpenFilename _
(filefilter:="C:\chemin\PROJET???? (*.xls),*.xls", Title:="fichiers PROJET")
 

Bricofire

XLDnaute Impliqué
Re : Caractère "Joker"

Bonjour à tous, :)

:mad: je crois que getopenfilename se moque des jokers ?

une autre piste, c'est de passer par Dir qui les gère bien pour récupérer la liste des fichiers OK et de faire une lisbox pour selectionner l'heureux élu... Je suis à la bourre et ne peux développer, je donne juste la piste..

Code:
Sub Bricojok()
Dim aa As String
Dim TT(20) As Variant
Dim i As Integer
i = 1
aa = CurDir
TT(i) = Dir(aa & "\ale*.xls")
Do While TT(i) <> ""
i = i + 1
TT(i) = Dir
Loop
For J = 1 To 20
Range("A1").Offset(J, 0) = TT(J)
Next J
End Sub
Là ja cherche dans le réertoire courant les fichiers xls qui commencent par "Ale", je mat ensuite leur liste dans la colonne A du classuer actif. Ce serait plus propre de faire un tableau dynamique avec préserve peut-être ?

Bonne soirée,
Brico
 

Gorfael

XLDnaute Barbatruc
Re : Caractère "Joker"

Salut à tous
Code:
Sub Test_1()
Dim Chem As String
Dim Fich As String
Dim fs, f, fc, F1

Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFolder(CurDir)
Set fc = f.Files
For Each F1 In fc
    If UCase(F1.Name) Like "CAR*" Then
        Chem = CurDir
        Fich = F1.Name
        Exit For
    End If
Next
Set F1 = Nothing
Set fc = Nothing
Set f = Nothing
Set fs = Nothing
Workbooks.Open (Chem & "\" & Fich)
End Sub
C'est un exemple adapté
J'ouvres le premier fichier ayant le nom qui commence par car dans le dossier en cours (CurDir)
J'avoue ne pas tout comprendre, mais si une bonne âme m'expliquait comment ça marche, et pourquoi je suis preneur
Ce que je comprends, c'est qu'on crée une collection avec tous les fichiers du dossier en cours, et qu'on teste chaque fichier.
Mais comme je ne comprends pas l'intégralité des instructions, je ne sais pas les simplifier
A+
 
Dernière édition:

Bricofire

XLDnaute Impliqué
Re : Caractère "Joker"

Re tout le monde,:)

S'il n'y a qu'un seul fichier correspondant à ouvrir, c'est plus simple, mais si il y en a plusieurs, on n'ouvrira que le premier trouvé par défaut..
On utilise toujours le fonction Dir, comme dans la soluce à options mutiples.
Dans le classeur joint, il suffit de l'ouvrir et de répondre aux questions...

Code:
Sub BricoOpen()
Dim Chem As String
Dim Part As String
Chem = InputBox("Veuillez entrer le chemin du fichier voulu, genre C:\Mes Fichiers")
Part = InputBox("Veuillez antre la partie voulue du nom du fichier désiré")
Workbooks.Open Filename:=Chem & "\" & Dir(Chem & "\" & Part & "*.xls")
End Sub

bonne journée,

ps Edition = erreur de fichier..
 

Pièces jointes

  • BricoOpenJok.zip
    8.2 KB · Affichages: 75
Dernière édition:

Droussel

XLDnaute Occasionnel
Re : Caractère "Joker"

salut max31

je reviens dans la discussion
effectivement j'avais un code dans lequel "getopenfilename" fonctionnait bien
en fait c'était un leurre
le répertoire ne contenait que des fichiers du type recherché

J'ai donc modifié mon code qui à priori fonctionne

Sub ouverturefichier()
Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogFilePicker)
Dim ouvrirfichiers As Variant
With fd
.InitialFileName = "C\chemin\projet*.xls"
If .Show = -1 Then
For Each ouvrirfichiers In .SelectedItems
MsgBox "fichier selectionné : " & ouvrirfichiers
Workbooks.Open Filename:=ouvrirfichiers
Next ouvrirfichiers
Else
End If
End With
Set fd = Nothing
End Sub


cela ne devrait-il pas te convenir ?

Pour moi le code de gorfael plante aussi et je ne saisi pas tout quand au stockage de la liste des fichiers mais peut etre ai-je toujours mal compris la question

A+
Denis
 

Bricofire

XLDnaute Impliqué
Re : Caractère "Joker" avec macro récursive

Re tout le monde, :)
Bon avec toutes las pistes, il faut espérer que Max31 trouvera son bonheur ;)
Pour faire plus propre, j'ai rajouté un traitement d'erreur en cas de fichier absent et commenté (vert) le code pour la compréhension...

Code:
Sub BricoOpen()
Dim Chem As String
Dim Part As String
Dim Chem2 As String
Dim Rep As Byte
Chem = InputBox("Veuillez entrer le chemin du fichier voulu, genre C:\Mes Fichiers")
[COLOR=green]'Récupère le nom du chemin que vous spécifiez (un copier coller possible si complexe)
[/COLOR]Part = InputBox("Veuillez entrer la partie voulue du nom du fichier désiré")
[COLOR=green]'Récupère la partie du nom de fichier qui vous sert de mot clef
[/COLOR]Chem2 = Dir(Chem & "\" & Part & "*.xls")
[COLOR=green]'on scinde l'instruction qui pouvait tenir en une ligne pour faire une test d'existence
[/COLOR]If Chem2 <> "" Then
[COLOR=green]'si un fichier a été trouvé, on l'ouvre
[/COLOR]    Workbooks.Open Filename:=Chem & "\" & Dir(Chem & "\" & Part & "*.xls")
Else: Rep = MsgBox("Fichier non trouvé, Faites Annuler pour sortir, OK pour une nouvelle tentative", vbOKCancel)
[COLOR=green]'Sinon on indique que pas de résultat et on demande la conduite à tenir.
' on met un cancel car en faisant un Call à elle-même, on rentre dans une logique de procédure récursive
' qui peut facilement mener à une boucle sans fin si ou ne fait pas de sortie.
[/COLOR]    If Rep = vbCancel Then
        Exit Sub
       [COLOR=green] 'Si la personne annule on sort, attention à la logique du code dans ce cas car :Exit Sub = Quitte immédiatement
        'la procédure Sub dans laquelle elle est utilisée. L'exécution se poursuit par l'instruction suivant celle
        'qui a appelé la procédure Sub.... Donc dans une procédure récursive comme ici, on peut vite retourner à un résultat non prévu.
[/COLOR]    Else: Call BricoOpen
    End If
End If
End Sub

Bonne journée,
 

Pièces jointes

  • BricoOpenFichierJok3.zip
    10.1 KB · Affichages: 65

max_31

XLDnaute Junior
Re : Caractère "Joker" avec macro récursive

Re Bonjour a tous...

Alors la, je vous remercie tous pour votre implication dans ce fil.

Droussel, cette fois, j'ai reussi a expliquer ce que je souhaitais, et ce que tu as fait me permets de sélectionner le fichier recherché, et ca, ca marche bien. Ca me permettra, eventuellement de ne pas stocker mes fichiers sauvegardes dans un autre répertoire... A moi de voir.

BricoFire, c un peu plus complet, vu que l'on peut rentrer le chemin complet du répertoire. Pour ma problematique ce n'etait pas necessaire, ms je vais tout garder quand meme, car ca va pouvoir me servir un peu plus tarD.

Donc je vous confirme que j'ai trouve mon bonheur, donc merci encore a vous.

Bonne aprem'...
 

Discussions similaires

Statistiques des forums

Discussions
312 480
Messages
2 088 757
Membres
103 950
dernier inscrit
Thomas Solioz