Ouvrir un fichier Excel qui commence par... [VBA] - VB/VBA/VBS - Programmation
Marsh Posté le 10-10-2008 à 17:21:20
ReplyMarsh Posté le 12-10-2008 à 11:41:23
kiki29 a écrit : Salut, regarde l'aide en ligne sur GetOpenFilename |
Merci, je vais regarder...
Marsh Posté le 13-10-2008 à 15:33:16
Bonjour
Et tu peux pas calculer le nom du fichier en fonction de la date du jour ?
NomFichier = "TOTO" & Format(Date(),"mm" ) & Format(Date(),"yyyy" ) & ".xls"
Donc si on est le 13/10/2008 il va mettre dans ta variable NomFichier : TOTO102008.xls
Ensuite pour l'ouvrir :
Workbooks.Open Filename:=NomFichier
Sans oublier soit de construire en amont le chemin vers le fichier, ou de placer excel directement dans le dossier ou se trouve le fichier. (regarde du coté de ChDir)
Je vois pas le rapport avec GetOpenFilename puisqu'il veut, si j'ai bien compris, automatiser la chose...? Ouvrir une boite de dialogue... Enfin j'ai peut etre pas tout compris...
Cordialement
Marsh Posté le 26-10-2008 à 07:34:46
SuppotDeSaTante a écrit : Bonjour |
Salut !
Merci pour ta suggestion mais les fichiers portant le nom d'un mois ne sont pas ouverts le fameux mois... mais systématiquement le mois suivant...
Dans mon exemple, c'est pour déclarer et payer une TVA... Or, la TVA d'un mois donné se déclare et se paye le mois suivant... et donc, les fichiers à centraliser ne sont arrêtés qu'au début de M+1...
Aujourd'hui, j'ai résolu mon problème et ça marche parfaitement... je passe le code demain si j'y pense...
Marsh Posté le 17-07-2009 à 11:48:20
scaryfan a écrit : |
Salut,
j'ai remarqué que l'on ne peut pas utiliser le caractère "*".
qu'as-tu utilisé alors?
moi je voudrais écrire un truc du style :
fichier="machin" & "truc" & "*.xls"
workbooks.open
(en gros tous les fichiers xls commençant par "machintruc" )
mais excel lit "*" comme le caractère "*" (et non pas comme une chaine de caractère inconnu)
il cherche "machintruc*.xls" au lieu de chercher les fichiers qui commencent par machintruc
que faire??
Marsh Posté le 17-07-2009 à 16:53:23
Bonjour
Tu veux ouvrir plusieurs fichiers ?
Explique la finalité de ce que tu souhaites faire, car tes exemples de "machintruc" c'est pas forcément tres parlant...
Marsh Posté le 20-07-2009 à 10:23:17
SuppotDeSaTante a écrit : Bonjour |
Bonjour,
je dois pouvoir mettre à jour les données de mon doc Excel à partir de plusieurs autres doc excel.
je dois donc ouvrir les documents Excel voulus (la fonction que j'utilise est Workbooks.Open) pour la mise à jour et cela marche sans problème.
mon problème c'est que : pour que ça marche je dois renommer tous mes fichiers pour qu'ils aient tous un nom du style:
"parametres.listeAppli(appli)-doc-dateIndic.xls"
avec parametres.listeAppli(appli)= appli1, appli2...ou appli25
et dateIndic=le mois et l'année
le problème c'est que ces documents sont gérés par Doc Manager, et lorsqu'on les enregistre ils ont le nom voulu suivi de la version :
"parametres.listeAppli(appli)-doc-dateIndic-w2.xls"
(on a pas que des w2, c'est un exemple)
comment faire pour ne pas prendre en compte ce "-w2"???
j'ai essayé avec :
fichier = "parametres.listeAppli(appli)-doc-dateIndic" & "*.xls"
mais excel recherche alors les doc portant le nom "parametres.listeAppli(appli)-doc-dateIndic*.xls"!!
c'est énervant, pourtant ça n'a pas l'air dur
Marsh Posté le 20-07-2009 à 14:02:40
Tes fichiers sont ils tous dans le meme dossier ?
[EDIT]
On va dire que oui.
Essaie cette macro :
Code :
|
Cordialement
[/EDIT]
Marsh Posté le 20-07-2009 à 15:20:29
SuppotDeSaTante a écrit : Tes fichiers sont ils tous dans le meme dossier ?
|
Oui les fichiers sont bien dans le même dossier.
je ne comprends pas dans ta macro :
FichierSch (il faut le définir comme string?)
si je le définit come string, quand je lance ma mise à jour, excel me dit "Erreur de compliation, Objet requis" en sélectionnant FichierSch
sinon mes applications ne s'appellent pas appli1, appli2,...appli25. elles ont toutes un nom différent de taille différente que je récupère avec : parametres.listeAppli(appli)
Marsh Posté le 20-07-2009 à 16:07:00
Tu le definis en tant qu'objet FileSearch avec l'instruction Set
Ce qui te permet derriere d'utiliser les propriété LookIn ou FileName, et avec une boucle tu recuperes tous les fichiers du dossier et en fonction du nom ou de ce qu'il contient tu l'ouvres ou pas...
Et je vois pas pourquoi tu le definis comme string, le code que je t'ai donné me semble clair...
Pour ta seconde question je ne comprends pas trop, que te renvoie ta chaine ?
Moi je dis que si le fichier commence par "parametres.listeAppli" il l'ouvre, ca ne va pas ? (Ligne 14 pour le teste 'commence par' et ligne 15 pour l'oouverture du dit fichier)
Peut etre devrais tu essayer la macro avant de vouloir la modifier
Marsh Posté le 20-07-2009 à 16:37:39
SuppotDeSaTante a écrit : Tu le definis en tant qu'objet FileSearch avec l'instruction Set |
Merci beaucoup,
En fait,
le problème, c'est que je ne peux pas la tester n'importe comment.
c'est un fichier excel déjà fait que je dois modifier.
je dois donc respecter plein de chose.
par exemple je n'ai pas une sub mais une fonction public,
c'est pour ça que j'ai essayé d'adapter ton code à mon fichier, et j'avoue que j'ai du mal.
Saurais-tu le faire avec une function?
(apparemment pour une fonction, ya un problème avec Set FichierSch = Application.FileSearch
il me dit erreur de compilation objet requis)
merci d'avance
(sinon pour la question sur le nom des applications je croyais que ta macro calculait le nombre de caractères du début comme s'il y en avait toujours le même nombre, mais je me suis trompé!)
Marsh Posté le 20-07-2009 à 16:57:54
Bah la macro ne faisant qu'ouvrir des fichiers a la chaine dans Excel, aucun souci pour la tester seule avant incorporation dans ton code.
Ensuite pour ce qui est des fonctions, aucun souci chez moi.
- Verifie que dans les references tu as bien "Microsoft Office X Object Library" où "X" est ta version d'office.
Pour les references, dans Visual Basic Editor (La ou tu tapes ton code) tu vas dans le menu Outils, References et tu coches la/les ref appropriées.
- Est-ce une fonction que tu utilises ensuites dans une cellule ? Du genre dans la cellule tu tapes =MaFonction(Arg1;Arg2;Etc.) ?
- Si ton code est pas trop long, tu peux le poster ici, je zieuterai
Marsh Posté le 20-07-2009 à 17:30:07
SuppotDeSaTante a écrit : Bah la macro ne faisant qu'ouvrir des fichiers a la chaine dans Excel, aucun souci pour la tester seule avant incorporation dans ton code. |
Salut et merci pour tes conseils,
j'ai bien la référence Microsoft Office 9.0 Object Library.
Je n'utiliserai pas cette fonction dans une cellule. J'ai un bouton dans ma feuille excel, et quand j'appuie dessus, il doit ouvrir les documents en question pour mettre à jour une feuille de récapitulation (avec les données des documents à ouvrir).
le problème c'est que :
pour pouvoir mettre à jour la feuille de récapitulation, il faut ouvrir les documents.
(l'ouverture est automatique en appuyant sur le bouton, ainsi que la mise à jour du récapitulatif)
Or pour ouvrir les documents, je suis obligé de les renomer tous en
fichier = parametres.listeAppli(appli) & "plan_de_prod" & dateIndic & ".xls"
c'est à dire ke je dois renommer les fichiers que je récupère (du type "appliplan_de_prod072009-w123.xls" ) en "appliplan_de_prod072009.xls" pour pouvoir les ouvrir avec ma macro
Voici ma fonction (elle marche, mais il faut renommer les doc avant mise à jour)
Citation : |
Marsh Posté le 20-07-2009 à 17:47:37
fichier = parametres.listeAppli(appli) & "-pla-plan_prod-" & dateIndic & ".xls"
Je comprends pas cette ligne... Et surtout ce qu'il y a en gras... Ou alors tu m'as pas donné tout le code...
Donc toi rééllement, tu veux ouvrir quoi ?
Tous les fichiers commencant par "appliplan_de_prod" ou autres choses ?
Je suppose que "appliplan_de_prod" c'est ta variable Appli ?
Donnes des exemples concrets car la, je me noie... Surtout que ta macro, ne fait que comme la mienne, c'est a dire ouvrir un/des fichiers...
Et je ne comprends par pourquoi ma macro ne va pas...
Code :
|
La il va ouvrir tous les fichier contenant "appliplan_de_prod072009" donc tu peux modifier "appliplan_de_prod072009" par "appliplan_de_prod" si tu veux tous les fichiers dont le nom contient "appliplan_de_prod" etc.
Et si tu veux mettre une fonction avec un parametre Appli tu fais :
Appli & "plan_de_prod072009" <(--- la il ouvre tous les fichiers dont le nom contient ta variable + "plan_de_prod072009"
ou encore Appli & "plan_de_prod" <(--- la il ouvre tous les fichiers dont le nom contient ta variable + "plan_de_prod" donc ca suppose "plan_de_prod052009" et "plan_de_prod062009" et "plan_de_prod072009" etc.
Marsh Posté le 21-07-2009 à 10:26:49
SuppotDeSaTante a écrit : fichier = parametres.listeAppli(appli) & "-pla-plan_prod-" & dateIndic & ".xls"
|
bonjour,
parametres.listeAppli(appli) est ma variable application
je veux ouvrir tous les fichiers qui commencent par le nom de l'appli suivi de "appli_plan_de_prod" et la date (mois et année)
Sinon,
j'ai essayé ton code sans le modifier,
et j'ai toujours la même erreur :
"erreur de compilation :
variable non définie"
sur Set FichierSch
(j'ai repris ton code entièrement sauf la 1ère ligne :
j'ai changé
Sub infonewb()
en
Public Function ouvreFichierAppli(appli As Integer) As String (que je dois garder))
je suis obligé de garder le code de base, je peux simplement ajouter du code, mais pas trop le modifier
je dois donc impérativement avoir ce qui suit dans ma fonction (je ne veux pas de sub, ça ne marche pas)
Voici le code de base :
(il faut à tout prix que je garde ce qui est en rouge)
Citation : |
Marsh Posté le 21-07-2009 à 11:01:20
Imaginons un dossiers avec les fichiers suivants :
Toto-appli_plan_de_prod-112008-w1.xls
Toto-appli_plan_de_prod-122008-w1.xls
Toto-appli_plan_de_prod-012009-w1.xls
Toto-appli_plan_de_prod-022009-w1.xls
Toto-appli_plan_de_prod-022009-w2.xls
Toto-appli_plan_de_prod-022009-w3.xls
Toto-appli_plan_de_prod-022009-w4.xls
Tata-appli_plan_de_prod-122008-w1.xls
Tata-appli_plan_de_prod-012009-w1.xls
Donc si ton appli se nomme "Toto", tu passes donc la chaine "Toto" en parametres pour ta variable Appli, et tu veux ouvrir les 7 premiers fichiers ?
Derniere chose, pourquoi tu declares ta variable Appli comme un entier ? Si j'ai pas le code qui permet d'identifier l'appli avec parametres.listeAppli(appli)
Fin'bref, faudrait que tu me donnes un VRAI exemple de ce a quoi ressemble les noms de tes fichiers, ensuite, qu'est-ce que te renvoie parametres.listeAppli(appli) avec un entier, qu'est-ce que te renvoie parametres.dateExeIndic, et enfin qu'est-ce que te renvoie parametres.cheminFichiers
Marsh Posté le 21-07-2009 à 11:38:20
SuppotDeSaTante a écrit : fichier = parametres.listeAppli(appli) & "-pla-plan_prod-" & dateIndic & ".xls"
|
Salut!
j'ai enfin réussi à adapter ta macro à mon doc excel, et ça marche super bien!! !!!
(d'ailleurs, si tu veux le code en question, n'hésite pas)
j'ai encore un dernier petit problème
???question???
Ta fonction ouvre les fichiers contenant "appliplan_de_prod072009",
ou commençant par "appliplan_de_prod072009"?
si c contenant,
est-ce que je peux écrire une double condition?
par exemple : les fichiers contenant "appliplan_de_prod" et "072009"???
(parce que certains de mes fichiers peuvent aussi s'appeller "appliplan_de_prod-interne-072009" )
je te remercie d'avance,
j'ai bien avancé grâce à toi!
Marsh Posté le 21-07-2009 à 11:52:07
Salut!
Pour ce qui est de l'appli, en fait c'est comme un identifiant : 1 correspond à appli1, etc...
du coup ça renvoit appli1
parametres.listeAppli(appli) est une fonction (que je n'ai pas écrit moi-même) qui renvoie le nom de l'appli selon aplli (qui est un entier).
parametres.dateExeIndic me renvoie en ce moment 200907 (correspond au mois en cours)
parametres.cheminFichiers correspond au chemin du dossier contenant les doc excel. (c'est un paramètre que je peux modifier directement dans le doc excel, sans passer par vba)
je dois ouvrir un fichier par appli (correspondant à la bonne date)
C'est là qu'est mon problème : je peux choisir de lancer la mise à jour pour une seule appli, ou pour plusieurs,
-Si je choisie une seule application,
quand ya pas de fichier, il renvoie 2 fois le message "pas de fichier excel trouvé"
-Et si je demande x applications,
quand ya pas de fichiers, il renvoie 2*x fois le message "pas de fichier excel trouvé" (ce qui est un peu chiant)
L'autre problème, (je pense que cela vient du "Workbooks.Open Filename:=.FoundFiles(x)" )
est que s'il ne trouve pas le(s) bon(s) dossier(s), il ne le dit pas (comme s'il ne voyait pas GestionErreur)
en fait dès qu'il trouve des fichiers, il considère que c'est OK, sauf que ya rien qui s'ouvre et rien qui se met à jour
Marsh Posté le 21-07-2009 à 11:52:52
Euh...
Pas compris l'histoire de la double condition.
Tu as juste a modifier et a dire "contenant appliplan_de_prod" et ca te prendra aussi forcement "appliplan_de_prod-interne-072009" comme "appliplan_de_prod-072009"
If InStr(1,.FoundFiles(x),"appliplan_de_prod" )<>0 Then
Pour ce qui est de l'adaptation de ma macro, oui je suis curieux de savoir pourquoi ca ne marchait pas au début.
infonewb a écrit : |
Oki doki je me demandais d'ou sortaient ces fonctions que vraissemblablement tu n'avais pas ecrites.
Marsh Posté le 21-07-2009 à 13:57:12
SuppotDeSaTante a écrit : Euh... |
SuppotDeSaTante a écrit : Oki doki je me demandais d'ou sortaient ces fonctions que vraissemblablement tu n'avais pas ecrites. |
Salut,
pour la double condition, c'est parce que je voudrais quand même garder le filtre sur la date.
c'est à dire que le nom devrait contenir le nom de l'appli et la date, pas forcément en un mot.
Sinon j'ai un autre problème:
je dois ouvrir un fichier par appli (correspondant à la bonne date)
C'est là qu'est mon problème : je peux choisir de lancer la mise à jour pour une seule appli, ou pour plusieurs,
-Si je choisie une seule application,
quand ya pas de fichier, il renvoie 2 fois le message "pas de fichier excel trouvé"
-Et si je demande x applications,
quand ya pas de fichiers, il renvoie 2*x fois le message "pas de fichier excel trouvé" (ce qui est un peu chiant)
L'autre problème, (je pense que cela vient du "Workbooks.Open Filename:=.FoundFiles(x)" )
est que s'il ne trouve pas le(s) bon(s) dossier(s), il ne le dit pas (comme s'il ne voyait pas GestionErreur)
en fait dès qu'il trouve des fichiers, il considère que c'est OK, sauf que ya rien qui s'ouvre et rien qui se met à jour
mais pas de message d'erreur d'éxécution en tout cas.
Marsh Posté le 21-07-2009 à 14:20:11
SuppotDeSaTante a écrit : Euh... |
SuppotDeSaTante a écrit : Oki doki je me demandais d'ou sortaient ces fonctions que vraissemblablement tu n'avais pas ecrites. |
je ne comprends pas, le fichier fait bien la mise à jour, mais au lieu de retourner "OK" pour les apllis qui ont bien été trouvée et ouverte, il retourne "L'indice n'appartient pas à la sélection."
Voilà ma fonction complète :
Citation : |
Marsh Posté le 21-07-2009 à 14:21:23
Pour la date :
If InStr(1,.FoundFiles(x),"appliplan_de_prod" )<>0 And InStr(1,.FoundFiles(x),dateIndic ) Then
Pour le message d'erreur, je pense que c'est normal, tu dois lancé la procedure 2 fois pour 2 applis, 5 fois pour 5 applis etc.
Enleve le Else sinon...
Pour l'histoire des dossiers, c'est bizare etant donné que le .FileName est censé filtré sur les .xls, et qu'ensuite le .Execute regarde s'il en trouve.
Essaie de mettre à la fin de la procedure : Set FichierSch = Nothing
Histoire de reinitialiser FichierSch
Marsh Posté le 21-07-2009 à 15:11:59
SuppotDeSaTante a écrit : Pour la date : |
j'ai testé la double condition, et ça marche bien!
par contre, je ne réussie pas à définir FichierSch :
Citation : |
quoiqu'il arrive, il me dit "erreur de compilation : variable non définie
du coup j'ai fini par écrire direct, pour que ça marche :
Citation : |
Comment je peux faire du coup pour réinitialiser?
Peut-être qu'il suffirait que j'écrive "ouvreFichierAppli = "OK"" à un autre endroit???
(dans mon fichier d'origine, qui affichait bien "OK" pour les doc trouvés, je l'avais juste après le "Workbooks.open fichier"
cette fonction était simple (il fallait avoir le nom exacte du fichier), mais elle marchait bien :
Citation : |
pourtant, ya pas grand chose de changé
Marsh Posté le 21-07-2009 à 15:18:08
Et si tu lui met connement un Dim juste avant
Dim FichierSch
Set FichierSch = Application.FileSearch
With FichierSch
Ou change lui le nom, ce nom de variable est peut etre deja existant dans tes autres modules.
Genre
Dim Fichier2Sch
Set Fichier2Sch = Application.FileSearch
With Fichier2Sch
Marsh Posté le 21-07-2009 à 16:30:17
Finalement mon doc Excel marche parfaitement pour ce dont je t'ai parlé (filtrage+ouverture+mise à jour).
Je n'avais pas de "OK" parce qu'il y a une fonction pour fermer automatiquement mes doc,
et évidemment, yavait pas le bon nom de doc à fermer. (et apparemment j'ai besoin que la fermeture marche aussi pour avoir enfin mon "OK" )
du coup j'ai un autre problème, je ne réussie pas à adapter ta fonction de filtrage-ouverture pour retrouver les bons noms et les fermer.
voici mon ancienne fonction de fermeture (qui ne marche que pour les doc ayant un nom simple (sans "w128" ou "-interne" au milieu ou à la fin du nom)
Citation : |
Et voici ma nouvelle fonction que j'ai adapté de la tienne, et qui ne marche pas!!!
(pourtant la fonction devrait trouver les memes fichiers, et donc les fermer aussi facilement qu'elle les ouvre. je pense que c'est du à ma ligne Workbooks(.FoundFiles(x)).Close)
Citation : |
Marsh Posté le 21-07-2009 à 16:36:46
Non pas que ca me derange, mais tu apprendrais a te debrouiller, il faut chercher un peu dans l'aide, tout est marqué ou presque.
Dans l'aide il y a ca :
Code :
|
Je l'adapte comme ca :
Code :
|
Je me suis pas foulé oui, mais c'est pas bien compliqué hein
Donc ta macro de fermeture donnerait ca :
Code :
|
Tout en sachant que tu n'as pas 'GestionErreur' ici
Marsh Posté le 21-07-2009 à 17:25:43
Merci beaucoup, ça marche NICKEL
(j'aurais bien aimé avoir l'aide vba, mais je ne l'ai pas et je ne l'aurais certainement pas avant d'en avoir fini avec ce fichier!!!)
En tout cas tu m'as beaucoup aidé,
MERCI
et à bientot
Marsh Posté le 10-10-2008 à 17:09:39
Salut à tous !
Je souhaite ouvrir un fichier dont le nom varie d'un mois sur l'autre...
Et je voudrais connaître la macro qui va me permettre d'ouvrir ce fichier chaque mois sans avoir à changer le code...
Le nom du fichier commence systématiquement par "TOTO" mais se termine selon le mois par "012008.xls", "022008.xls"... etc.
Quelqu'un peut m'aider ???
---------------
iMac 4Ghz (fin 2015) RAM 16Go SSD 256Go SSD 2To