Ouvrir un classeur au nom variable

  • Initiateur de la discussion chris
  • Date de début
C

chris

Guest
Salut à tous,

Voilà mon pb : au boulot on me demande d'automatiser la mise en page d'un tableau excel arrivant chaque jour par mail.

Seulement voilà, le nom du tableau change chaque jour, car il contient la date du jour :
"Prog_De_Marche_Du_11_mai_04.xls"

Dans ce tableau, impossible de rajouter quoi que ce soit, ni fomule ou macro.
Alors j'ai créé un autre fichier excel perso : une fois le tableau et mon fichier ouverts ensembles, je lance une macro de mon fichier avec l'instruction :

Workbooks(2).Activate

cela sélectionne donc le second classeur ouvert à ce moment, puis il fait un copier coller des valeurs pour en faire ce que je veux.

Mais n'étant pas le seul utilisateur, j'ai bien peur que certains ouvrent plusieurs fichiers excel, et dans ce cas le Workbooks(2) peut être n'importe lequel d'entre eux.

Le nom du tableau arrivant par mail commence toujours par "Prog_De_Marche_Du ...... .xls"

Y a t'il une instruction genre :
Sélectionner le fichier "Prog_De_Marche_Du*.xls"

Ecrit comme ça, ça marche pas...
 
P

Pascal76

Guest
Bonjour Chris et le forum

Pour le jour en cours voici une méthode pour récupérer le nom de ton fichier

MonJour = Format(Date, "dd")
MonMois = Format(Date, "mmmm")
MonAnnee = Format(Date, "yy")

Monfichier = "Prog_De_Marche_Du_" & MonJour & "_" & MonMois & "_" & MonAnnee & ".xls"

Bon courage

Pascal
 
A

Abel

Guest
Bonjour Chris, le forum

Tu peux essayer aussi :

FichierDuJour = Application.GetOpenFilename("Tous les fichiers Microsoft Excel(*.xls), *.xls", , "Recherche du fichier du jour")

et récupérer FichierDuJour pour Workbooks(FichierDuJour).Activate par exemple.

Abel
 
C

chris

Guest
Merci !

Deux excellentes idée, mais elles posent problème toutes les deux dans mon cas : (même si je m'empresse en même temps de les copier dans un coin du PC...)

Le fichier portant la date du jour change effectivement de nom chaque jour, ce nom commence bien par "Prog_De_Marche_.......xls" mais la seconde partie change régulièrement de forme !

En effet ce fichier nous est envoyé par Outlook chaque jour par une autre société que nous ne contrôlons pas.

Quelques fois nous recevons : "Prog_De_Marche_03052004.xls"
ou encore : "Prog_De_Marche_03_mai_04.xls"
etc...

De plus ce fichier reçut n'est pas enregistré sur le disque dur. Il est simplement ouvert dans outlook, imprimé puis refermé.

Je souhaiterai trouvé une instruction me permettant de sélectionner à partir d'un classeur perso le second classeur reçut par outlook. Ce second classeur est donc également ouvert, MAIS un 3ème classeur qui n'a rien à voir peut lui aussi être ouvert (je sais, mais j'ai des collègues qui ne touchent que très peu aux PC et ils ne lisent jamais les instructions...

Il faut une instruction genre :

Windows("PROG_DE_MARCHE * .xls").Activate

Mais avec une étoile ça marche pas sous excel...

snif
 
A

Abel

Guest
Bonjour Chris, le forum,

J'ai bien une idée mais je n'ai pas le temps dans l'immédiat de concrétiser en code.

Si au moment où tu cherches le fichier "Prog_De_Marche*.xls", celui-ci est ouvert : on pourrait alors demander à Excel de regarder dans Workbooks les noms des fichiers ouverts et de les mettre dans un tableau.

On peut alors tester les entrées de ce tableau en regardant si les 14 premiers caractères à gauche de chaque entrée correspondent à "Prog_De_Marche". Avec éventuellement une validation sur le nom du fichier au cas où il y aurait plusieurs "Prog_De_Marche" ouverts.


Si j'ai le temps à midi, je regarderai pour faire quelque lignes.

Pascal, si tu as quelque chose dans le genre de tout prêt, à toi de transformer.

Bon courage.

A+

Abel
 
C

chris

Guest
Bin oui !!!!! VOILA LA SOLUTION !!!!! *se tape sur le front*

Merci !


J'avais pas pensé à ça. Bon ça doit pas être dur de récupérer les noms de fichiers ouverts actuellement. Je vais tester ça de suite et je vous tient au courant.
 
A

Abel

Guest
Chris, le forum

Même pas besoin d'un tableau.
Quelques lignes, si tu ne les as pas déjà faites.

Bonne continuation

Abel
 

Pièces jointes

  • Chris1.zip
    9.1 KB · Affichages: 38
  • Chris1.zip
    9.1 KB · Affichages: 40
  • Chris1.zip
    9.1 KB · Affichages: 33
C

chris

Guest
Merci ! C'est bien ça que je cherchais. En fait je ne connaissais pas l'instruction "If Left" qui simplifie bien la chose !

Sinon de mon côté j'ai testé ta idée et ça donne ça :
-----------------------
Sub SELECTclasseur()

' Inscrit les noms de tous les classeurs ouverts :
A = 0
For Each Wk In Workbooks
Range("B1").Offset(A, 0).Select
If Wk.Name <> ThisWorkbook.Name Then
Selection = Wk.Name
A = A + 1
End If
Next Wk

' Cherche le classeur ouvert dont le nom commence par "PROG_DE_MARCHE...."
For Each NOM In [A1:C5]
If NOM Like "PROG_DE_MARCHE*" Then
Windows(NOM.Text).Activate
End If
Next
End Sub

------------------------------

ça fonctionne aussi mais il faut effectivement passer par un tableau...
Merci encore, de la part de tout mon service !
 
G

GUS

Guest
Bonjour le forum,

comment faire pour adapter cette solution à un fichier non ouvert? Ie je veux ouvrir un fichier dont je connais le début du nom et le directory.
Merci de vos conseils lumineux.
Guillaume
 

Discussions similaires

Statistiques des forums

Discussions
312 493
Messages
2 088 958
Membres
103 990
dernier inscrit
lamiadebz