Détecter l'arrivée d'un nouveau fichier :VBA

Fermé
Dany Shore - 9 oct. 2003 à 23:11
 danyshore - 10 nov. 2003 à 15:33
Bonjour à tous,

Je suis étudiant en génie chimique et je travaille présentement à mon projet de fin d'études en pâtes et papiers. Je dois mesurer des centaines et des centaines d'échantillons de papier sur un spectrophotomètre...l'appareil est relié à un PC et me permet d'exporter les résultats dans un classeur excel. Je peux choisir d'enregistrer les résultats de 3façons : Nom de l'échantillon.xls ; Date.xls ; Heure.xls ou n'importe quelle combinaison des trois...par exemple dateheure.xls ressemblerait à ceci : 20031009162317.xls ce qui veut dire que j'ai pris ma mesure à 16h23min et 17secondes le 9octobre 2003

À partir de ces mesures j'ai de nombreux calculs à effectuer.Afin de sauver du temps j'aimerais automatiser le processus avec l'aide d'une macro dans excel...j'ai fait une template dans une feuille excel incluant tous les calculs dont j'ai besoin pour mon projet. Je suis en mesure de réaliser une macro qui fait du copier/coller...elle prend les valeurs dont j'ai besoin dans le fichier excel des mesures et les colle dans ma template et les imprime automatiquement...malheureusement à chaque fois je dois réduire la fenêtre de l'interface du spectrophotomètre...ouvrir le fichier excel contenant les valeurs mesurés...lancer la macro pour avoir mes calculs et leurs impressions.

J'aimerais savoir s'il serait possible de lancer une macro à partir de ma template qui détecterait si il y a un nouveau fichier excel de mesures arrivé dans le folder. Par exemple je prends une mesure sur un échantillon à 16h15min30s...le fichier est exporté automatiquement dans le dossier MESURE et est enregistré automatiquement d'une des façons décrites précédemment...la macro détecte ce nouveau fichier...copie les valeurs sélectionnés et les colle dans la template et les imprime...je mesure un nouvel échantillon à 16h16min35s...ce nouveau fichier est exporté dans le dossier MESURE...la macro détecte l'arrivée de ce nouveau fichier...copie les valeurs sélectionnés et les colle dans la template...les imprime...et ainsi de suite.

Serait-il possible de programmer quelquechose dans la macro qui détecterait l'arrivée d'un nouveau fichier dans un même dossier...voilà mon principal problème...J'imagine qu'il doit y avoir une solution...soit en appelant chacun des fichiers de mesure 1.xls 2.xls 3.xls ou avec l'heure et la date...la macro détecte le fichier le plus récent...copie les valeurs...les colle dans la template...les imprime...et voilà plus besoin d'ouvrir à chaque fois les fichiers de mesure et de lancer à chaque fois la macro!

Si quelqu'un pourrait me proposer une solution...j'apprécierais beaucoup!

Merci,
Dany
A voir également:

3 réponses

Surement possible...mais pas si facile!
0
Pas si compliquer je pense:
Faut pas que tu utilise excel pour la meme chose:
Ce que tu peux faire:
- Une macro qui se lance toutes les x minutes, ou seconde, ou ce que tu veux. Qui detecte les nouveau fichier dans le repertoire, et s'il y a une nouveau fichier, alors ca l ouvre, ca le traite, impression etc, ce que tu veux, puis ca le referme.
CA me semble pas insurmontable, et si c'est toujours d'actualite, je veux bien m'y pencher.

Mangda
0
Voici ce que j'ai fait Mangda...si tu as des suggestions...te gêne surtout pas!

J'ai fait une Loop...elle est sans fin mais bon pour les besoins de la cause c'est suffisant et je l'arrête en fermant excel! Elle recherche un nouveau fichier...elle n'en trouve pas alors la macro s'arrete pour trois seconde...elle en trouve un...elle l'ouvre...blablabla...le ferme et le détruit...puis on recommence!

code = Format(Date, "yymmdd")

Do
With Application.Filesearch
.Newsearch
.Filetype = msoFileTypeAllFiles
.Filename = code & ".xls"
.LookIn = "C:\Mesure"
.Execute

If .foundfiles.Count = 0 Then
newhour = Hour(Now( ))
newminute = Minute(Now( ) )
newsecond = Second (Now ( ) ) + 3
WaitTime = Timeserial ( newhour, newminute, newsecond)
Application.Wait Wait time

Else If .foundfiles.Count >0 Then
Workbooks.Open (.foundfiles(1))
Bla Bla Bla
ActiveWorkbook.Close False
Kill .foundfiles(1)

End if
End With

Loop
0