Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Ouvrir tous les fichiers (par VBA)

9 réponses
Avatar
Sergio
Salut les amis

Voici mon probleme du jour:
j'ai un fichier principal et je voudrais que celui-ci=20
aille voir dans un r=E9pertoire ( disons c:\rep), qu'il=20
ouvre les uns apres les autres tous les fichiers pr=E9sent=20
dans ce r=E9pertoire et y exc=E9cute une macro (disons macro1)
Le probleme c'est que je ne sais pas d'avance combien il y=20
a de fichiers ni quels sont les noms des diff=E9rents=20
fichiers (tous sont des .xls quand meme ).
Je pensais =E0 quelquechose dans le genre:
for each workbook....
....

Mais je ne parviens pas =E0 finaliser le code
Quelqu'un voit comment faire ?
Merci =E0 tous
Sergio

9 réponses

Avatar
Philippe.R
Bonsoir Sergio,
Une base comme ceci conviendrait ?

http://perso.wanadoo.fr/frederic.sigonneau/
--
Amicales Salutations
Retirer A_S_ pour répondre.
XL 97 / 2000 / 2002
Pour suivre le forum :
news://msnews.microsoft.com/microsoft.public.fr.excel
(Voulez-vous vous abonner ? -> Oui)

"Sergio" a écrit dans le message de
news:1e2a401c4555c$3278db70$
Salut les amis

Voici mon probleme du jour:
j'ai un fichier principal et je voudrais que celui-ci
aille voir dans un répertoire ( disons c:rep), qu'il
ouvre les uns apres les autres tous les fichiers présent
dans ce répertoire et y excécute une macro (disons macro1)
Le probleme c'est que je ne sais pas d'avance combien il y
a de fichiers ni quels sont les noms des différents
fichiers (tous sont des .xls quand meme ).
Je pensais à quelquechose dans le genre:
for each workbook....
....

Mais je ne parviens pas à finaliser le code
Quelqu'un voit comment faire ?
Merci à tous
Sergio
Avatar
sergio
Beaucoup de choses tres interressantes mais par contre je
ne vois pas vraiment de solution adaptée à mon besoin.
peut-etre avec getopenfilename je vais essayer de faire
quelquechose avec cela.
Si toi ou quelqu'un possede une réponse plus "intuitive"
qu'il n'hesite pas !!!!
Merci à tous
Sergio

-----Message d'origine-----
Bonsoir Sergio,
Une base comme ceci conviendrait ?

http://perso.wanadoo.fr/frederic.sigonneau/
--
Amicales Salutations
Retirer A_S_ pour répondre.
XL 97 / 2000 / 2002
Pour suivre le forum :
news://msnews.microsoft.com/microsoft.public.fr.excel
(Voulez-vous vous abonner ? -> Oui)

"Sergio" a écrit
dans le message de

news:1e2a401c4555c$3278db70$
Salut les amis

Voici mon probleme du jour:
j'ai un fichier principal et je voudrais que celui-ci
aille voir dans un répertoire ( disons c:rep), qu'il
ouvre les uns apres les autres tous les fichiers présent
dans ce répertoire et y excécute une macro (disons macro1)
Le probleme c'est que je ne sais pas d'avance combien il y
a de fichiers ni quels sont les noms des différents
fichiers (tous sont des .xls quand meme ).
Je pensais à quelquechose dans le genre:
for each workbook....
.....

Mais je ne parviens pas à finaliser le code
Quelqu'un voit comment faire ?
Merci à tous
Sergio


.



Avatar
Sergio
En fait non ça ne me convient pas vraiment
Le comportement que je souhaiterais:
le fichier principal ouvre chaque le 1er fichier du
répertoire (sans aucune boite de dialogue ouvrir ou autre),
il excécute le traitement, ferme le 1er fichier et passe
au suivant, tout ceci sans aucune intervention de
l'utilisateur.
Merci de m'aider
Sergio
-----Message d'origine-----
Beaucoup de choses tres interressantes mais par contre je
ne vois pas vraiment de solution adaptée à mon besoin.
peut-etre avec getopenfilename je vais essayer de faire
quelquechose avec cela.
Si toi ou quelqu'un possede une réponse plus "intuitive"
qu'il n'hesite pas !!!!
Merci à tous
Sergio

-----Message d'origine-----
Bonsoir Sergio,
Une base comme ceci conviendrait ?

http://perso.wanadoo.fr/frederic.sigonneau/
--
Amicales Salutations
Retirer A_S_ pour répondre.
XL 97 / 2000 / 2002
Pour suivre le forum :
news://msnews.microsoft.com/microsoft.public.fr.excel
(Voulez-vous vous abonner ? -> Oui)

"Sergio" a écrit
dans le message de

news:1e2a401c4555c$3278db70$
Salut les amis

Voici mon probleme du jour:
j'ai un fichier principal et je voudrais que celui-ci
aille voir dans un répertoire ( disons c:rep), qu'il
ouvre les uns apres les autres tous les fichiers présent
dans ce répertoire et y excécute une macro (disons
macro1)


Le probleme c'est que je ne sais pas d'avance combien il
y


a de fichiers ni quels sont les noms des différents
fichiers (tous sont des .xls quand meme ).
Je pensais à quelquechose dans le genre:
for each workbook....
.....

Mais je ne parviens pas à finaliser le code
Quelqu'un voit comment faire ?
Merci à tous
Sergio


.

.





Avatar
isabelle
bonjour sergio,

il y a pourtant celle ci sur le site de FS qui devrait faire l'affaire,

Sub TousFichiersDunDossier()
Dim fso As Object, Dossier As Object, NomDossier
Dim Files As Object, File As Object, i As Integer
Set fso = CreateObject("Scripting.FileSystemObject")
NomDossier = ChoisirDossier
If NomDossier = "" Then Exit Sub
Set Dossier = fso.getfolder(NomDossier)
Set Files = Dossier.Files
If Files.Count <> 0 Then
For Each File In Files
Workbooks.Open Filename:=File
'execute ta macro ici
ThisWorkbook.Save
ThisWorkbook.Close
Next
End If
End Sub

Function ChoisirDossier()
Dim objShell, objFolder, chemin, SecuriteSlash
Set objShell = CreateObject("Shell.Application")
Set objFolder = _
objShell.BrowseForFolder(&H0&, "Choisisser un répertoire", &H1&)
On Error Resume Next
chemin = objFolder.ParentFolder.ParseName(objFolder.Title).Path & ""
If objFolder.Title = "Bureau" Then
chemin = "C:WindowsBureau"
End If
If objFolder.Title = "" Then
chemin = ""
End If
SecuriteSlash = InStr(objFolder.Title, ":")
If SecuriteSlash > 0 Then
chemin = Mid(objFolder.Title, SecuriteSlash - 1, 2) & ""
End If
ChoisirDossier = chemin
End Function



isabelle


Beaucoup de choses tres interressantes mais par contre je
ne vois pas vraiment de solution adaptée à mon besoin.
peut-etre avec getopenfilename je vais essayer de faire
quelquechose avec cela.
Si toi ou quelqu'un possede une réponse plus "intuitive"
qu'il n'hesite pas !!!!
Merci à tous
Sergio

-----Message d'origine-----
Bonsoir Sergio,
Une base comme ceci conviendrait ?

http://perso.wanadoo.fr/frederic.sigonneau/
--
Amicales Salutations
Retirer A_S_ pour répondre.
XL 97 / 2000 / 2002
Pour suivre le forum :
news://msnews.microsoft.com/microsoft.public.fr.excel
(Voulez-vous vous abonner ? -> Oui)

"Sergio" a écrit
dans le message de

news:1e2a401c4555c$3278db70$
Salut les amis

Voici mon probleme du jour:
j'ai un fichier principal et je voudrais que celui-ci
aille voir dans un répertoire ( disons c:rep), qu'il
ouvre les uns apres les autres tous les fichiers présent
dans ce répertoire et y excécute une macro (disons macro1)
Le probleme c'est que je ne sais pas d'avance combien il y
a de fichiers ni quels sont les noms des différents
fichiers (tous sont des .xls quand meme ).
Je pensais à quelquechose dans le genre:
for each workbook....
.....

Mais je ne parviens pas à finaliser le code
Quelqu'un voit comment faire ?
Merci à tous
Sergio


.





Avatar
isabelle
dans ce cas tu n'as besoin que de celle ci,

Sub TousFichiersDunDossier()
Dim fso As Object, Dossier As Object, NomDossier
Dim Files As Object, File As Object, i As Integer
Set fso = CreateObject("Scripting.FileSystemObject")
NomDossier = "c:zaza" '<--- adapter au nom de ton dossier
If NomDossier = "" Then Exit Function
Set Dossier = fso.getfolder(NomDossier)
Set Files = Dossier.Files
If Files.Count <> 0 Then
For Each File In Files
Workbooks.Open Filename:=File
msgbox "execute ta macro ici"
ThisWorkbook.Save
ThisWorkbook.Close
Next
End If
End Function

isabelle


En fait non ça ne me convient pas vraiment
Le comportement que je souhaiterais:
le fichier principal ouvre chaque le 1er fichier du
répertoire (sans aucune boite de dialogue ouvrir ou autre),
il excécute le traitement, ferme le 1er fichier et passe
au suivant, tout ceci sans aucune intervention de
l'utilisateur.
Merci de m'aider
Sergio
-----Message d'origine-----
Beaucoup de choses tres interressantes mais par contre je
ne vois pas vraiment de solution adaptée à mon besoin.
peut-etre avec getopenfilename je vais essayer de faire
quelquechose avec cela.
Si toi ou quelqu'un possede une réponse plus "intuitive"
qu'il n'hesite pas !!!!
Merci à tous
Sergio

-----Message d'origine-----
Bonsoir Sergio,
Une base comme ceci conviendrait ?

http://perso.wanadoo.fr/frederic.sigonneau/
--
Amicales Salutations
Retirer A_S_ pour répondre.
XL 97 / 2000 / 2002
Pour suivre le forum :
news://msnews.microsoft.com/microsoft.public.fr.excel
(Voulez-vous vous abonner ? -> Oui)

"Sergio" a écrit
dans le message de

news:1e2a401c4555c$3278db70$
Salut les amis

Voici mon probleme du jour:
j'ai un fichier principal et je voudrais que celui-ci
aille voir dans un répertoire ( disons c:rep), qu'il
ouvre les uns apres les autres tous les fichiers présent
dans ce répertoire et y excécute une macro (disons
macro1)


Le probleme c'est que je ne sais pas d'avance combien il
y


a de fichiers ni quels sont les noms des différents
fichiers (tous sont des .xls quand meme ).
Je pensais à quelquechose dans le genre:
for each workbook....
.....

Mais je ne parviens pas à finaliser le code
Quelqu'un voit comment faire ?
Merci à tous
Sergio


.

.







Avatar
LeSteph
Bonsoir Sergio,

Sub actionFileIn()
ChDir ("c:rep")

fs = Dir("*.xls")

Do While Len(fs) > 0
Workbooks.Open (fs)
MsgBox ("classeur traité :" & fs)
'TraiteFichier fs
Workbooks(fs).Close False

fs = Dir
Loop

End Sub

:-)

LeSteph

"Sergio" a écrit dans le message de
news:1e2a401c4555c$3278db70$
Salut les amis

Voici mon probleme du jour:
j'ai un fichier principal et je voudrais que celui-ci
aille voir dans un répertoire ( disons c:rep), qu'il
ouvre les uns apres les autres tous les fichiers présent
dans ce répertoire et y excécute une macro (disons macro1)
Le probleme c'est que je ne sais pas d'avance combien il y
a de fichiers ni quels sont les noms des différents
fichiers (tous sont des .xls quand meme ).
Je pensais à quelquechose dans le genre:
for each workbook....
....

Mais je ne parviens pas à finaliser le code
Quelqu'un voit comment faire ?
Merci à tous
Sergio
Avatar
isabelle
correction :
mettre End Sub à la place de End Function

isabelle


dans ce cas tu n'as besoin que de celle ci,

Sub TousFichiersDunDossier()
Dim fso As Object, Dossier As Object, NomDossier
Dim Files As Object, File As Object, i As Integer
Set fso = CreateObject("Scripting.FileSystemObject")
NomDossier = "c:zaza" '<--- adapter au nom de ton dossier
If NomDossier = "" Then Exit Function
Set Dossier = fso.getfolder(NomDossier)
Set Files = Dossier.Files
If Files.Count <> 0 Then
For Each File In Files
Workbooks.Open Filename:=File
msgbox "execute ta macro ici"
ThisWorkbook.Save
ThisWorkbook.Close
Next
End If
End Function

isabelle


En fait non ça ne me convient pas vraiment
Le comportement que je souhaiterais:
le fichier principal ouvre chaque le 1er fichier du
répertoire (sans aucune boite de dialogue ouvrir ou autre),
il excécute le traitement, ferme le 1er fichier et passe
au suivant, tout ceci sans aucune intervention de
l'utilisateur.
Merci de m'aider
Sergio
-----Message d'origine-----
Beaucoup de choses tres interressantes mais par contre je
ne vois pas vraiment de solution adaptée à mon besoin.
peut-etre avec getopenfilename je vais essayer de faire
quelquechose avec cela.
Si toi ou quelqu'un possede une réponse plus "intuitive"
qu'il n'hesite pas !!!!
Merci à tous
Sergio

-----Message d'origine-----
Bonsoir Sergio,
Une base comme ceci conviendrait ?

http://perso.wanadoo.fr/frederic.sigonneau/
--
Amicales Salutations
Retirer A_S_ pour répondre.
XL 97 / 2000 / 2002
Pour suivre le forum :
news://msnews.microsoft.com/microsoft.public.fr.excel
(Voulez-vous vous abonner ? -> Oui)

"Sergio" a écrit
dans le message de

news:1e2a401c4555c$3278db70$
Salut les amis

Voici mon probleme du jour:
j'ai un fichier principal et je voudrais que celui-ci
aille voir dans un répertoire ( disons c:rep), qu'il
ouvre les uns apres les autres tous les fichiers présent
dans ce répertoire et y excécute une macro (disons
macro1)


Le probleme c'est que je ne sais pas d'avance combien il
y


a de fichiers ni quels sont les noms des différents
fichiers (tous sont des .xls quand meme ).
Je pensais à quelquechose dans le genre:
for each workbook....
.....

Mais je ne parviens pas à finaliser le code
Quelqu'un voit comment faire ?
Merci à tous
Sergio


.

.









Avatar
Sergio
Merci à tous les amis
Pour ma part mes recherches m'ont permis de trouver ceci
sur le fantastique :http://www.excelabo.net/xl/fichiers.php
Voici la sub:
Dim F
With Application.FileSearch
.NewSearch
.LookIn = "C:Temp"
.Execute
On Error Resume Next
For Each F In .FoundFiles
Workbooks.Open F
Next F
End With

Celle ci me convient parfaitement
Merci 1000 fois à tous et à toutes
Sergio
-----Message d'origine-----
bonjour sergio,

il y a pourtant celle ci sur le site de FS qui devrait
faire l'affaire,


Sub TousFichiersDunDossier()
Dim fso As Object, Dossier As Object, NomDossier
Dim Files As Object, File As Object, i As Integer
Set fso = CreateObject("Scripting.FileSystemObject")
NomDossier = ChoisirDossier
If NomDossier = "" Then Exit Sub
Set Dossier = fso.getfolder(NomDossier)
Set Files = Dossier.Files
If Files.Count <> 0 Then
For Each File In Files
Workbooks.Open Filename:=File
'execute ta macro ici
ThisWorkbook.Save
ThisWorkbook.Close
Next
End If
End Sub

Function ChoisirDossier()
Dim objShell, objFolder, chemin, SecuriteSlash
Set objShell = CreateObject("Shell.Application")
Set objFolder = _
objShell.BrowseForFolder(&H0&, "Choisisser un
répertoire", &H1&)

On Error Resume Next
chemin = objFolder.ParentFolder.ParseName
(objFolder.Title).Path & ""

If objFolder.Title = "Bureau" Then
chemin = "C:WindowsBureau"
End If
If objFolder.Title = "" Then
chemin = ""
End If
SecuriteSlash = InStr(objFolder.Title, ":")
If SecuriteSlash > 0 Then
chemin = Mid(objFolder.Title, SecuriteSlash - 1,
2) & ""

End If
ChoisirDossier = chemin
End Function



isabelle


Beaucoup de choses tres interressantes mais par contre
je


ne vois pas vraiment de solution adaptée à mon besoin.
peut-etre avec getopenfilename je vais essayer de faire
quelquechose avec cela.
Si toi ou quelqu'un possede une réponse plus "intuitive"
qu'il n'hesite pas !!!!
Merci à tous
Sergio

-----Message d'origine-----
Bonsoir Sergio,
Une base comme ceci conviendrait ?

http://perso.wanadoo.fr/frederic.sigonneau/
--
Amicales Salutations
Retirer A_S_ pour répondre.
XL 97 / 2000 / 2002
Pour suivre le forum :
news://msnews.microsoft.com/microsoft.public.fr.excel
(Voulez-vous vous abonner ? -> Oui)

"Sergio" a écrit
dans le message de

news:1e2a401c4555c$3278db70$
Salut les amis

Voici mon probleme du jour:
j'ai un fichier principal et je voudrais que celui-ci
aille voir dans un répertoire ( disons c:rep), qu'il
ouvre les uns apres les autres tous les fichiers
présent



dans ce répertoire et y excécute une macro (disons
macro1)



Le probleme c'est que je ne sais pas d'avance combien
il y



a de fichiers ni quels sont les noms des différents
fichiers (tous sont des .xls quand meme ).
Je pensais à quelquechose dans le genre:
for each workbook....
.....

Mais je ne parviens pas à finaliser le code
Quelqu'un voit comment faire ?
Merci à tous
Sergio


.

.







Avatar
LeSteph
Bonsoir Isabelle,
:-(
la vie est ingrate parfois il est allé cherché une autre sub
les notres étaient pourtant bien!
Enfin, Excelabo c'est bien et puis l'essentiel c'est qu'il soit content!

:-)
LeSteph

"isabelle" a écrit dans le message de
news:
correction :
mettre End Sub à la place de End Function

isabelle


dans ce cas tu n'as besoin que de celle ci,

Sub TousFichiersDunDossier()
Dim fso As Object, Dossier As Object, NomDossier
Dim Files As Object, File As Object, i As Integer
Set fso = CreateObject("Scripting.FileSystemObject")
NomDossier = "c:zaza" '<--- adapter au nom de ton dossier
If NomDossier = "" Then Exit Function
Set Dossier = fso.getfolder(NomDossier)
Set Files = Dossier.Files
If Files.Count <> 0 Then
For Each File In Files
Workbooks.Open Filename:=File
msgbox "execute ta macro ici"
ThisWorkbook.Save
ThisWorkbook.Close
Next
End If
End Function

isabelle


En fait non ça ne me convient pas vraiment
Le comportement que je souhaiterais:
le fichier principal ouvre chaque le 1er fichier du
répertoire (sans aucune boite de dialogue ouvrir ou autre),
il excécute le traitement, ferme le 1er fichier et passe
au suivant, tout ceci sans aucune intervention de
l'utilisateur.
Merci de m'aider
Sergio
-----Message d'origine-----
Beaucoup de choses tres interressantes mais par contre je
ne vois pas vraiment de solution adaptée à mon besoin.
peut-etre avec getopenfilename je vais essayer de faire
quelquechose avec cela.
Si toi ou quelqu'un possede une réponse plus "intuitive"
qu'il n'hesite pas !!!!
Merci à tous
Sergio

-----Message d'origine-----
Bonsoir Sergio,
Une base comme ceci conviendrait ?

http://perso.wanadoo.fr/frederic.sigonneau/
--
Amicales Salutations
Retirer A_S_ pour répondre.
XL 97 / 2000 / 2002
Pour suivre le forum :
news://msnews.microsoft.com/microsoft.public.fr.excel
(Voulez-vous vous abonner ? -> Oui)

"Sergio" a écrit
dans le message de

news:1e2a401c4555c$3278db70$
Salut les amis

Voici mon probleme du jour:
j'ai un fichier principal et je voudrais que celui-ci
aille voir dans un répertoire ( disons c:rep), qu'il
ouvre les uns apres les autres tous les fichiers présent
dans ce répertoire et y excécute une macro (disons
macro1)


Le probleme c'est que je ne sais pas d'avance combien il
y


a de fichiers ni quels sont les noms des différents
fichiers (tous sont des .xls quand meme ).
Je pensais à quelquechose dans le genre:
for each workbook....
.....

Mais je ne parviens pas à finaliser le code
Quelqu'un voit comment faire ?
Merci à tous
Sergio


.

.