Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1662 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [VBA] Ouvrir un fichier Excel qui commence par...

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[VBA] Ouvrir un fichier Excel qui commence par...

n°1798408
scaryfan
Apple Inside
Posté le 10-10-2008 à 17:09:39  profilanswer
 

:hello:  
 
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 ???
 
 :p


---------------
iMac 4Ghz (fin 2015) RAM 16Go SSD 256Go SSD 512Go
mood
Publicité
Posté le 10-10-2008 à 17:09:39  profilanswer
 

n°1798413
kiki29
Posté le 10-10-2008 à 17:21:20  profilanswer
 

Salut, regarde l'aide en ligne sur GetOpenFilename

n°1798774
scaryfan
Apple Inside
Posté le 12-10-2008 à 11:41:23  profilanswer
 

kiki29 a écrit :

Salut, regarde l'aide en ligne sur GetOpenFilename


 
;)
 
Merci, je vais regarder... ;)


---------------
iMac 4Ghz (fin 2015) RAM 16Go SSD 256Go SSD 512Go
n°1799451
dje69r
Arme de distraction massive
Posté le 13-10-2008 à 15:33:16  profilanswer
 

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

Message cité 1 fois
Message édité par dje69r le 13-10-2008 à 15:38:59

---------------
Plus tu pédales moins vite, moins tu avances plus vite — SuperLoustic ! La radio des Loustics !
n°1804636
scaryfan
Apple Inside
Posté le 26-10-2008 à 07:34:46  profilanswer
 

dje69r a écrit :

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


 
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... ;)


---------------
iMac 4Ghz (fin 2015) RAM 16Go SSD 256Go SSD 512Go
n°1849326
laurent292​9
Posté le 10-02-2009 à 10:14:23  profilanswer
 

Je suis interessé par ce code, merci :)

n°1906124
infonewb
Posté le 17-07-2009 à 11:48:20  profilanswer
 

scaryfan a écrit :


 
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... ;)


 
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??
 
 

n°1906224
dje69r
Arme de distraction massive
Posté le 17-07-2009 à 16:53:23  profilanswer
 

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...


---------------
Plus tu pédales moins vite, moins tu avances plus vite — SuperLoustic ! La radio des Loustics !
n°1906649
infonewb
Posté le 20-07-2009 à 10:23:17  profilanswer
 

dje69r a écrit :

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...


 
 
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

n°1906819
dje69r
Arme de distraction massive
Posté le 20-07-2009 à 14:02:40  profilanswer
 

Tes fichiers sont ils tous dans le meme dossier ?
 
[EDIT]
 
On va dire que oui.
 
Essaie cette macro :
 

Code :
  1. Sub infonewb()
  2. On Error Resume Next
  3. Set FichierSch = Application.FileSearch
  4.    
  5. With FichierSch
  6.     .LookIn = "C:\" 'Dossier dans lequel chercher tes fichiers
  7.     .Filename = "*.xls" 'Extension des fichiers a trouver
  8.     If .Execute > 0 Then 'S'il en trouve
  9.         For x = 1 To .FoundFiles.Count
  10.             'Si le fichier commence par "parametres.listeAppli" alors il l'ouvre, tu peux aussi utiliser InStr() pour _
  11.             eviter de compter les premiers caracteres.
  12.             If Left(Right(.FoundFiles(x), Len(.FoundFiles(x)) - Len(.LookIn)), 21) = "parametres.listeAppli" Then
  13.                 Workbooks.Open Filename:=.FoundFiles(x)
  14.             End If
  15.         Next x
  16.     Else
  17.         MsgBox ("pas de fichier excel trouvé" )
  18.     End If
  19. End With
  20. End Sub


 
Cordialement
[/EDIT]

Message cité 1 fois
Message édité par dje69r le 20-07-2009 à 14:22:46

---------------
Plus tu pédales moins vite, moins tu avances plus vite — SuperLoustic ! La radio des Loustics !
mood
Publicité
Posté le 20-07-2009 à 14:02:40  profilanswer
 

n°1906850
infonewb
Posté le 20-07-2009 à 15:20:29  profilanswer
 

dje69r a écrit :

Tes fichiers sont ils tous dans le meme dossier ?
 
[EDIT]
 
On va dire que oui.
 
Essaie cette macro :
 

Code :
  1. Sub infonewb()
  2. On Error Resume Next
  3. Set FichierSch = Application.FileSearch
  4.    
  5. With FichierSch
  6.     .LookIn = "C:\" 'Dossier dans lequel chercher tes fichiers
  7.     .Filename = "*.xls" 'Extension des fichiers a trouver
  8.     If .Execute > 0 Then 'S'il en trouve
  9.         For x = 1 To .FoundFiles.Count
  10.             'Si le fichier commence par "parametres.listeAppli" alors il l'ouvre, tu peux aussi utiliser InStr() pour _
  11.             eviter de compter les premiers caracteres.
  12.             If Left(Right(.FoundFiles(x), Len(.FoundFiles(x)) - Len(.LookIn)), 21) = "parametres.listeAppli" Then
  13.                 Workbooks.Open Filename:=.FoundFiles(x)
  14.             End If
  15.         Next x
  16.     Else
  17.         MsgBox ("pas de fichier excel trouvé" )
  18.     End If
  19. End With
  20. End Sub


 
Cordialement
[/EDIT]


 
 
 
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)

n°1906868
dje69r
Arme de distraction massive
Posté le 20-07-2009 à 16:07:00  profilanswer
 

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  :whistle:

Message cité 1 fois
Message édité par dje69r le 20-07-2009 à 16:12:44

---------------
Plus tu pédales moins vite, moins tu avances plus vite — SuperLoustic ! La radio des Loustics !
n°1906879
infonewb
Posté le 20-07-2009 à 16:37:39  profilanswer
 

dje69r a écrit :

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  :whistle:


 
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é!)
 
 
 
 
 
 

n°1906895
dje69r
Arme de distraction massive
Posté le 20-07-2009 à 16:57:54  profilanswer
 

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

Message cité 1 fois
Message édité par dje69r le 20-07-2009 à 17:02:03

---------------
Plus tu pédales moins vite, moins tu avances plus vite — SuperLoustic ! La radio des Loustics !
n°1906910
infonewb
Posté le 20-07-2009 à 17:30:07  profilanswer
 

dje69r 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.
 
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


 
 
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 :


Public Function ouvreFichierAppli(appli As Integer) As String
    Dim fichier As String
    Dim dateIndic As String
 
On Error GoTo GestionErreur
    dateIndic = CStr(Format(parametres.dateExeIndic, "yyyymm" ))
    fichier = parametres.listeAppli(appli) & "-pla-plan_prod-" & dateIndic & ".xls"
     
    Workbooks.Open parametres.cheminFichiers & fichier
     
 
    ouvreFichierAppli = "OK"
 
Exit Function
 
GestionErreur:
    If Err.Number <> 0 Then
        ouvreFichierAppli = Err.Description
        Err.Clear
    End If
End Function
 
 


 
 

n°1906920
dje69r
Arme de distraction massive
Posté le 20-07-2009 à 17:47:37  profilanswer
 

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 :
  1. Sub infonewb()
  2. On Error Resume Next
  3. Set FichierSch = Application.FileSearch
  4.  
  5. With FichierSch
  6.     .LookIn = "C:\" 'Dossier dans lequel chercher tes fichiers
  7.     .Filename = "*.xls" 'Extension des fichiers a trouver
  8.     If .Execute > 0 Then 'S'il en trouve
  9.         For x = 1 To .FoundFiles.Count
  10.             If InStr(1,.FoundFiles(x),"appliplan_de_prod072009" )<>0 Then
  11.                 Workbooks.Open Filename:=.FoundFiles(x)
  12.             End If
  13.         Next x
  14.     Else
  15.         MsgBox ("pas de fichier excel trouvé" )
  16.     End If
  17. End With
  18. End Sub


 
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.

Message cité 2 fois
Message édité par dje69r le 20-07-2009 à 17:58:38

---------------
Plus tu pédales moins vite, moins tu avances plus vite — SuperLoustic ! La radio des Loustics !
n°1907100
infonewb
Posté le 21-07-2009 à 10:26:49  profilanswer
 

dje69r a écrit :

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 :
  1. Sub infonewb()
  2. On Error Resume Next
  3. Set FichierSch = Application.FileSearch
  4.  
  5. With FichierSch
  6.     .LookIn = "C:\" 'Dossier dans lequel chercher tes fichiers
  7.     .Filename = "*.xls" 'Extension des fichiers a trouver
  8.     If .Execute > 0 Then 'S'il en trouve
  9.         For x = 1 To .FoundFiles.Count
  10.             If InStr(1,.FoundFiles(x),"appliplan_de_prod072009" )<>0 Then
  11.                 Workbooks.Open Filename:=.FoundFiles(x)
  12.             End If
  13.         Next x
  14.     Else
  15.         MsgBox ("pas de fichier excel trouvé" )
  16.     End If
  17. End With
  18. End Sub


 
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.


 
 
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 :


Public Function ouvreFichierAppli(appli As Integer) As String    
    Dim fichier As String
    Dim dateIndic As String
 
On Error GoTo GestionErreur    
    dateIndic = CStr(Format(parametres.dateExeIndic, "yyyymm" ))    
fichier = parametres.listeAppli(appli) & "-pla-plan_prod-" & dateIndic & ".xls"
     
    Workbooks.Open parametres.cheminFichiers & fichier    
 
    ouvreFichierAppli = "OK"
Exit Function
 
GestionErreur:
    If Err.Number <> 0 Then
        ouvreFichierAppli = Err.Description
        Err.Clear
    End If
End Function


n°1907117
dje69r
Arme de distraction massive
Posté le 21-07-2009 à 11:01:20  profilanswer
 

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


Message édité par dje69r le 21-07-2009 à 11:11:26

---------------
Plus tu pédales moins vite, moins tu avances plus vite — SuperLoustic ! La radio des Loustics !
n°1907145
infonewb
Posté le 21-07-2009 à 11:38:20  profilanswer
 

dje69r a écrit :

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 :
  1. Sub infonewb()
  2. On Error Resume Next
  3. Set FichierSch = Application.FileSearch
  4.  
  5. With FichierSch
  6.     .LookIn = "C:\" 'Dossier dans lequel chercher tes fichiers
  7.     .Filename = "*.xls" 'Extension des fichiers a trouver
  8.     If .Execute > 0 Then 'S'il en trouve
  9.         For x = 1 To .FoundFiles.Count
  10.             If InStr(1,.FoundFiles(x),"appliplan_de_prod072009" )<>0 Then
  11.                 Workbooks.Open Filename:=.FoundFiles(x)
  12.             End If
  13.         Next x
  14.     Else
  15.         MsgBox ("pas de fichier excel trouvé" )
  16.     End If
  17. End With
  18. End Sub


 
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.


 
 
Salut!
 
j'ai enfin réussi à adapter ta macro à mon doc excel, et ça marche super bien!! :wahoo: !!!
(d'ailleurs, si tu veux le code en question, n'hésite pas)
 
j'ai encore un dernier petit problème  :pt1cable:  
 
???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!  ;)  
 

n°1907150
infonewb
Posté le 21-07-2009 à 11:52:07  profilanswer
 

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
 

Message cité 1 fois
Message édité par infonewb le 21-07-2009 à 13:51:46
n°1907152
dje69r
Arme de distraction massive
Posté le 21-07-2009 à 11:52:52  profilanswer
 

Euh... :heink:  
 
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 :


 
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)
 

Oki doki je me demandais d'ou sortaient ces fonctions que vraissemblablement tu n'avais pas ecrites.

Message cité 2 fois
Message édité par dje69r le 21-07-2009 à 11:57:51

---------------
Plus tu pédales moins vite, moins tu avances plus vite — SuperLoustic ! La radio des Loustics !
n°1907202
infonewb
Posté le 21-07-2009 à 13:57:12  profilanswer
 

dje69r a écrit :

Euh... :heink:  
 
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.
 


 

dje69r 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.

n°1907223
infonewb
Posté le 21-07-2009 à 14:20:11  profilanswer
 

dje69r a écrit :

Euh... :heink:  
 
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.
 


 

dje69r 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 :


Public Function ouvreFichierAppli(appli As Integer) As String
     
    Dim x As Integer
    Dim dateIndic As String
    Dim fichier As String
         
On Error GoTo GestionErreur
    dateIndic = CStr(Format(parametres.dateExeIndic, "yyyymm" ))
    fichier = parametres.listeAppli(appli) & "-pla-plan_prod-" & dateIndic
 
 
With Application.FileSearch
    .LookIn = parametres.cheminFichiers 'Dossier contenant les plan de prod
    .Filename = "*.xls" 'Extension des fichiers à trouver
    If .Execute > 0 Then 'S'il en trouve
        For x = 1 To .FoundFiles.Count
            If InStr(1, .FoundFiles(x), fichier) <> 0 Then
                Workbooks.Open Filename:=.FoundFiles(x)
                       
            ouvreFichierAppli = "OK"  
            End If
 
        Next x
    Else
        MsgBox ("pas de fichier excel trouvé" )
 
    End If
End With
     
Exit Function
 
GestionErreur:
    If Err.Number <> 0 Then
        ouvreFichierAppli = Err.Description
        Err.Clear
    End If
End Function


Message édité par infonewb le 21-07-2009 à 14:21:08
n°1907224
dje69r
Arme de distraction massive
Posté le 21-07-2009 à 14:21:23  profilanswer
 

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

Message cité 1 fois
Message édité par dje69r le 21-07-2009 à 14:22:24

---------------
Plus tu pédales moins vite, moins tu avances plus vite — SuperLoustic ! La radio des Loustics !
n°1907274
infonewb
Posté le 21-07-2009 à 15:11:59  profilanswer
 

dje69r a écrit :

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


 
 
j'ai testé la double condition, et ça marche bien!  :)  
 
par contre, je ne réussie pas à définir FichierSch :

Citation :


Set FichierSch = Application.FileSearch
With FichierSch


quoiqu'il arrive, il me dit "erreur de compilation : variable non définie  :fou:  :pt1cable:  
du coup j'ai fini par écrire direct, pour que ça marche :

Citation :

 
With Application.FileSearch


 
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 :


Public Function ouvreFichierAppli(appli As Integer) As String
    Dim fichier As String
    Dim dateIndic As String
 
On Error GoTo GestionErreur
    dateIndic = CStr(Format(parametres.dateExeIndic, "yyyymm" ))
    fichier = parametres.listeAppli(appli) & "-pla-plan_prod-" & dateIndic & ".xls"
    Workbooks.Open parametres.cheminFichiers & fichier
 
    ouvreFichierAppli = "OK"
 
Exit Function
 
GestionErreur:
    If Err.Number <> 0 Then
        ouvreFichierAppli = Err.Description
        Err.Clear
    End If
End Function
 


 
pourtant, ya pas grand chose de changé :cry:


Message édité par infonewb le 21-07-2009 à 15:24:22
n°1907280
dje69r
Arme de distraction massive
Posté le 21-07-2009 à 15:18:08  profilanswer
 

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


---------------
Plus tu pédales moins vite, moins tu avances plus vite — SuperLoustic ! La radio des Loustics !
n°1907308
infonewb
Posté le 21-07-2009 à 16:30:17  profilanswer
 

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 :


Public Function fermeFichierAppli(appli As Integer) As String
    Dim fichier As String
    Dim dateIndic As String
 
On Error GoTo GestionErreur
    dateIndic = CStr(Format(parametres.dateExeIndic, "yyyymm" ))
     fichier = parametres.listeAppli(appli) & "-pla-plan_prod-" & dateIndic & ".xls"
    Workbooks(fichier).Close SaveChanges:=False
     
    fermeFichierAppli = "OK"
End Function


Et voici ma nouvelle fonction que j'ai adapté de la tienne, et qui ne marche pas!!! :fou:  
(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 :


Public Function fermeFichierAppli(appli As Integer) As String
    Dim x As Integer
    Dim fichier As String
    Dim dateIndic As String
    Dim FichierSch
    Set FichierSch = Application.FileSearch
             
On Error GoTo GestionErreur
    dateIndic = CStr(Format(parametres.dateExeIndic, "yyyymm" ))
    fichier = parametres.listeAppli(appli) & "-pla-plan_prod"
 
With FichierSch
    .LookIn = parametres.cheminFichiers 'Dossier contenant les plan de prod
    .Filename = "*.xls" 'Extension des fichiers à trouver
    If .Execute > 0 Then 'S'il en trouve
        For x = 1 To .FoundFiles.Count
            If InStr(1, .FoundFiles(x), fichier) <> 0 And InStr(1, .FoundFiles(x), dateIndic) <> 0 Then
                Workbooks(.FoundFiles(x)).Close SaveChanges:=False
     
     fermeFichierAppli = "OK"
 
            End If
        Next x
    End If
End With
End Function


 
 
 
 

n°1907310
infonewb
Posté le 21-07-2009 à 16:31:22  profilanswer
 

En tout cas, un grand merci pour le reste :jap:  
 :hello:  ;)

n°1907313
dje69r
Arme de distraction massive
Posté le 21-07-2009 à 16:36:46  profilanswer
 

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 :
  1. 'Cet exemple montre comment enregistrer les modifications et fermer tous les classeurs à l'exception de celui de l'exemple.
  2. For Each w In Workbooks
  3.     If w.Name <> ThisWorkbook.Name Then
  4.         w.Close savechanges:=True
  5.     End If
  6. Next w


 
Je l'adapte comme ca :

Code :
  1. Dim toto
  2. 'Pour chaque fichier ouvert, il les passe en revu, si le nom contient ta variable fichier, il le ferme sans enregistrer.
  3. For Each toto In Workbooks
  4.     If InStr(1, toto.Name, fichier) <> 0 Then
  5.         toto.Close savechanges:=False
  6.     End If
  7. Next toto

Je me suis pas foulé oui, mais c'est pas bien compliqué hein ;)
 
 
Donc ta macro de fermeture donnerait ca :

Code :
  1. Public Function fermeFichierAppli(appli As Integer) As String
  2.     Dim x As Integer
  3.     Dim fichier As String
  4.     Dim dateIndic As String
  5.            
  6. On Error GoTo GestionErreur
  7.     dateIndic = CStr(Format(parametres.dateExeIndic, "yyyymm" ))
  8.     fichier = parametres.listeAppli(appli) & "-pla-plan_prod"
  9. Dim toto
  10. 'Pour chaque fichier ouvert, il les passe en revu, si le nom contient ta variable fichier, il le ferme sans enregistrer.
  11. For Each toto In Workbooks
  12.     If InStr(1, toto.Name, fichier) <> 0 Then
  13.         toto.Close savechanges:=False
  14.     End If
  15. Next toto
  16.     fermeFichierAppli = "OK"
  17. End Function

Tout en sachant que tu n'as pas 'GestionErreur' ici


Message édité par dje69r le 21-07-2009 à 16:43:06

---------------
Plus tu pédales moins vite, moins tu avances plus vite — SuperLoustic ! La radio des Loustics !
n°1907340
infonewb
Posté le 21-07-2009 à 17:25:43  profilanswer
 

Merci beaucoup, ça marche NICKEL  :)  
 
(j'aurais bien aimé avoir l'aide vba, mais je ne l'ai pas  :non: 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

n°1907357
dje69r
Arme de distraction massive
Posté le 21-07-2009 à 17:48:21  profilanswer
 

:jap:


---------------
Plus tu pédales moins vite, moins tu avances plus vite — SuperLoustic ! La radio des Loustics !
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [VBA] Ouvrir un fichier Excel qui commence par...

 

Sujets relatifs
copier un fichier dans une variableEdition de fichier texte.
Création d'un fichier installateurprobleme macro excel
Comptabiliser le nombre de fois que se répète un mot dans un fichierlire des donnees dans un fichier texte
VISIBLEMENT Personne ne sait comment déplacer un fichier simplement...Pourquoi quand je génère mon fichier xml j'ai ces caractères � ?
[VBA] Utilisation de Listviewtrouve pas de fichier alors que le fichier est dedans??
Plus de sujets relatifs à : [VBA] Ouvrir un fichier Excel qui commence par...


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR