macro pas si simple...

  • Initiateur de la discussion selecteur
  • Date de début
S

selecteur

Guest
Bonjour,

Voilà j'ai une macro à faire. A partir de trois tableaux 'source' je dois faire une synthèse des trois. En fait il s'agit simplement de 'copier-coller' plusieurs lignes. Rien de très difficile.

Mais car il y a toujours un 'mais' mes fichiers sources (qui sont toujours au même endroit) changent tous les jours de noms (er_20050414_073038_fr.xls devient er_20050415_073025_fr.xls) donc je pense que la macro ne fonctionnera pas la seconde fois (logique !).

Vous aurez remarqué qu'il y a un changement au niveau de la date (à l'envers : 20050414) et au niveau de l'heure (7h30 et 38 secondes). La date s'incrémente au jour le jour. L'heure est modifiée quotidiennement mais pas forcément à la même heure.

Bref quelque chose de simple au départ mais rapidement tordu à l'arrivée.

Y a-t-il une astuce pour ce type de problème ?

En vous remerciant.



Selecteur.
 

galopin01

XLDnaute Occasionnel
Bonjour,
L'idée c'est de mémoriser un Dir des fichiers déja traités disons dans memo.xls. Et le lendemain de trraiter le fichier qui n'est pas encore dans memo.xls.
On doit aussi pouvoir faire un Dir avec des caractères joker ?????? pour l'heure. C'est peut-être plus facile?
Pour la réalisation je ne sais pas si je trouverai le temps...
A+
 

PascalXLD

XLDnaute Barbatruc
Modérateur
Bonjour

Autre solution

ton fichier commence toujours par

er_
puis année
puismois
puis jour

donc avec un test sur les 11 premières lettres

MaVar='er_' & format(date,'yyyy')& format(date,'mm')& format(date),'dd')

Après tu testes si les 11 premières lettres = Mavar

Bon courage et bon app
 
S

selecteur

Guest
galopin01,

Je te remercie pour ton début de réflexion.

Pascal76,

Pas mal du tout ton astuce. Concernant l'heure est-ce que l'on peut appliquer le même principe que la date ? Je te confirme que le fichier commence toujours de la même façon, qu'il a toujours la même structure.

Concernant MaVar='er_' & format(date,'yyyy')& format(date,'mm')& format(date),'dd')

Une question : comment dans la macro peut faire pour ne pas prendre deux fois le même fichier (=la même date) ?


Je ne sais pas si c'est utile mais je ne vous ai pas dit que dans le dossier source il y a tous les autres fichiers c'est à dire le fichier de j-1, le fichier de j-2 ect...

Je sens que ça va être vraiment difficile cette histoire.

Bon allez @ +

Encore merci.



Selecteur.
 

PascalXLD

XLDnaute Barbatruc
Modérateur
Re

Quels sont les fichiers sources dont tu as besoin pour faire tourner ta macro ?

Les 3 fichiers de la date du jour ??

Je ne comprends pas le coup de l'heure car j'ai cru comprendre au début que ton fichier était mis à jour quotidiennement

Est-ce le cas ? Ou y-a-t-il plusieurs mises à jour par jour ??
 
S

selecteur

Guest
Pascal76,

Tous les jours des fichiers sont reçus dans 3 dossiers.

Un fichier arrive dans un dossier sous la forme : er_20050413_073035_fr.xls (pour le 13/04/2005), er_20050414_073038_fr.xls (pour le 14/04/2005), et ainsi de suite.

Le second arrive de la même manière dans un autre dossier sous une forme semblabe sauf que ce n'est pas 'er' mais 'vc'.

Même principe pour le troisième avec 'rm' dans un troisième dossier.



La macro (que je lancerais quotidiennement) consisterais à récupérer le contenu des fichiers reçus quotidiennement (ceux du 14/04/2005 puis le lendemain ceux du 15/04/2005, puis le surlendemain ceux du 16/04/2005, et ainsi de suite) pour les mettre dans un autre fichier. En fait c'est juste un regroupement de lignes.


En ce qui concerne l'heure :

elle fait partie du nom du fichier (er_20050414_073038 (7h30 et 38 secondes)_fr.xls


Le problème que je soulève est que les noms des fichiers changent (et la date et l'heure) tous les jours.

Il y a une 'fournée' par jour (=les 3 fichiers).

Voilà j'èspère avoir été plus clair sinon n'hésites pas.


Selecteur.
 

PascalXLD

XLDnaute Barbatruc
Modérateur
re

Voici un code qui te permet d'ouvrir un fichier qui commence par 'er_'

Tu peux ainsi l'adapter pour tous tes noms et ainsi ouvrir tes fichiers en changeant juste le début de mavar et le repertoire que j'ai mis à c:tmp

Sub ouverturefichier()

Dim mavar As String
Dim fs, f, f1, fc

mavar = 'er_' & Format(Date, 'yyyymmdd')

monpath = 'C:\\Tmp'

Set fs = CreateObject('Scripting.FileSystemObject')
Set f = fs.GetFolder(monpath)
Set fc = f.Files
For Each f1 In fc
If Left(f1.Name, 11) = mavar Then
Workbooks.Open Filename:=f1
Exit For
End If
Next

End Sub
 

galopin01

XLDnaute Occasionnel
Bonsoir à tous,
Je viens de mettre la dernière main à un sélecteur :) qui fonctionne assez bien.
Il suffit de créer un classeur vide memo.xls
et un classeur 'prg.xls' dans lequel tu colles la macro suivante.
A l'éxécution la macro recense tous les fichiers et quand elle trouve un fichier non inscrit dans memo.xls, elle te demande si tu veux le travailler. La toute première fois, il suffit de répondre non tout le temps pour initialiser ton memo.xls ensuite il détectera tous les nouveaux fichiers et à toi de faire le branchement après la question...
Sub LitRep()
Dim MyPath$, MyArg$, i%, Trouve$
MyPath = 'C:\\Documents and Settings\\XXXXXXXXX\\Mes documents\\Monrépertoire de stockage\\'
Workbooks.Open Filename:=MyPath & 'memo.xls'
MyArg = '??_200?????' & '_??????_fr.xls'
Trouve = Dir(MyPath & MyArg)
i = 1
Do While Trouve <> ''
If Cells(i, 1) = Trouve Then
i = i + 1
Else
Cells(i, 1) = Trouve
i = i + 1
If MsgBox('Voulez-vous exploiter le Fichier ' & Trouve, 4) = 1 Then
MsgBox 'Longue suite de traitement'
Exit Do
End If
End If
Trouve = Dir
Loop
Workbooks('memo.xls').Close True
End Sub
Ok ?
 

galopin01

XLDnaute Occasionnel
Nota :
Le forum digère mal les antislash (barre oblique inverse)
Dans la ligne suivante MyPath ne pas oublier le slash de fin
En gros ça doit donner ça si on remplace par la barre par un +
MyPath = 'C:+Documents and Settings+XXXXXXXXX+Mes documents+Monrépertoire de stockage+'
A+
 

galopin01

XLDnaute Occasionnel
Nota bis:
Comme j'ai utilisé les jokers ?? sur les 2 premiers caractères (er,vc,rm)
il faudra vraisemblablement supprimer le Exit Do dès que ce sera en fonction comme ça la boucle se fera toute seule.
Dans ta longue suite de traitement tu auras juste à identifier les 2 premiers caractères pour savoir à quoi t'en tenir...
A+
 
S

selecteur

Guest
Bonsoir, (ou bonjour)

Oulala vous ne dormez pas : Merci Pascal76 et galopin01 pour votre aide et vos réponses.

Je viens de lire vos propositions et je vous avouerais qu'à cette heure je ne suis pas en état de bien comprendre les codes des macros.

Je les testerais et vous tiendrais au courant.

Encore Merci.


Selecteur.
 

galopin01

XLDnaute Occasionnel
Bonjour,
... L'idée c'est de mémoriser un Dir des fichiers déja traités disons dans memo.xls. Et le lendemain de traiter les fichiers qui ne sont pas encore dans memo.xls.

La macro ci jointe ne fait que celà :
Trouver les fichiers qui ne sont pas encore dans le Dir.
Nota1 : il faut créer le memo.xls dans le répertoire de travail.
Nota2 : MyArg = '??_200?????' & '_??????_fr.xls' travaillera jusqu'en 2009
Si tu n'envisages pas de prendre ta retraîte d'ici là :
MyArg = '??_20??????' & '_??????_fr.xls' travaillera jusqu'en 2019 !
A+
 
S

selecteur

Guest
galopin01,

Bonjour,

If MsgBox('Voulez-vous exploiter le Fichier ' & Trouve, 4) = True Then
MsgBox 'Longue suite de traitement'

Après cette partie de code la macro n'affiche pas 'Longue suite de traitement'.

Je ne comprends pas pourquoi ?

Sinon comme tu l'as dit elle ajoute bien dans le classeur prg.xls les fichiers qui n'y sont pas encore. Donc je vais voir coment faire pour lui dire que lorsque il y a tel fichier tu fais telle tache (macro déjà prête)

En tous les cas je te remercie encore. Je vais essayer d'avancer même si ce n'est pas évident.

A suivre...




Selecteur.
 

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 329
Membres
103 183
dernier inscrit
karelhu35