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

Ouvrir un fichier Excel qui commence par... [VBA] - VB/VBA/VBS - Programmation

Marsh Posté le 10-10-2008 à 17:09:39    

: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 2To
Reply

Marsh Posté le 10-10-2008 à 17:09:39   

Reply

Marsh Posté le 10-10-2008 à 17:21:20    

Salut, regarde l'aide en ligne sur GetOpenFilename

Reply

Marsh Posté le 12-10-2008 à 11:41:23    

kiki29 a écrit :

Salut, regarde l'aide en ligne sur GetOpenFilename


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


---------------
iMac 4Ghz (fin 2015) RAM 16Go SSD 256Go SSD 2To
Reply

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

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

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 26-10-2008 à 07:34:46    

SuppotDeSaTante 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 2To
Reply

Marsh Posté le 10-02-2009 à 10:14:23    

Je suis interessé par ce code, merci :)

Reply

Marsh Posté le 17-07-2009 à 11:48:20    

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

Reply

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


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 20-07-2009 à 10:23:17    

SuppotDeSaTante 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

Reply

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 :
  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 SuppotDeSaTante le 20-07-2009 à 14:22:46

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 20-07-2009 à 14:02:40   

Reply

Marsh Posté le 20-07-2009 à 15:20:29    

SuppotDeSaTante 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)

Reply

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

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

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 20-07-2009 à 16:37:39    

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

Reply

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

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

---------------
Soyez malin, louez entre voisins !
Reply

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


 
 

Reply

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 :
  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 SuppotDeSaTante le 20-07-2009 à 17:58:38

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 21-07-2009 à 10:26:49    

SuppotDeSaTante 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


Reply

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


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

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 21-07-2009 à 11:38:20    

SuppotDeSaTante 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!  ;)  
 

Reply

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
 

Message cité 1 fois
Message édité par infonewb le 21-07-2009 à 13:51:46
Reply

Marsh Posté le 21-07-2009 à 11:52:52    

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 SuppotDeSaTante le 21-07-2009 à 11:57:51

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 21-07-2009 à 13:57:12    

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


 

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.

Reply

Marsh Posté le 21-07-2009 à 14:20:11    

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


 

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 :


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
Reply

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

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

---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 21-07-2009 à 15:11:59    

SuppotDeSaTante 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
Reply

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


---------------
Soyez malin, louez entre voisins !
Reply

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 :


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


 
 
 
 

Reply

Marsh Posté le 21-07-2009 à 16:31:22    

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

Reply

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 :
  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 SuppotDeSaTante le 21-07-2009 à 16:43:06

---------------
Soyez malin, louez entre voisins !
Reply

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

Reply

Marsh Posté le 21-07-2009 à 17:48:21    

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed