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

travail sur fichiers fermés

16 réponses
Avatar
maud s
Bonjour
sur excel 2003

Je dispose d'un répertoire nommé ASD
dans ce répertoire il y a des sous répertoires
et dans ces sous répertoires il y a divers fichiers excel.

dans chacun de ces fichiers excel il y a 4 onglets..... dont un qui se
nomme facture

J'aimerais si c'est possible, qu'un code VBA balaye les fichiers excel de
chaque répertoire et sous repertoires etc... et me recupere de chaque
fichier excel les onglets nommé FACTURE et les mets dans un fichiers nommé
ASD.xls.

chaque onglet recopié dans le fichiers ASD.xls doit se nommer FACTURE et le
nom du sous répertoire et le contenu de la cellule "I12" de cette feuille.

J'ai regardé sur le net boisgontier sigonneau et autre mais j ai pas
réussi..

merci à vous par avance.

10 réponses

1 2
Avatar
Philippe.R
Bonjour,
Il y a, chez Frédéric, une mine pour travailler en souterrain :
http://frederic.sigonneau.free.fr/Ado.htm
--
Avec plaisir
http://dj.joss.free.fr/trombine.htm
http://jacxl.free.fr/mpfe/trombino.html
Philippe.R
Pour se connecter au forum :
http://www.excelabo.net/web/mpfe
News://news.microsoft.com/microsoft.public.fr.excel
"maud s" a écrit dans le message de
news:
Bonjour
sur excel 2003

Je dispose d'un répertoire nommé ASD
dans ce répertoire il y a des sous répertoires
et dans ces sous répertoires il y a divers fichiers excel.

dans chacun de ces fichiers excel il y a 4 onglets..... dont un qui se
nomme facture

J'aimerais si c'est possible, qu'un code VBA balaye les fichiers excel de
chaque répertoire et sous repertoires etc... et me recupere de chaque
fichier excel les onglets nommé FACTURE et les mets dans un fichiers
nommé ASD.xls.

chaque onglet recopié dans le fichiers ASD.xls doit se nommer FACTURE et
le nom du sous répertoire et le contenu de la cellule "I12" de cette
feuille.

J'ai regardé sur le net boisgontier sigonneau et autre mais j ai pas
réussi..

merci à vous par avance.








Avatar
Daniel.C
Bonjour.
A mon humble avis, tu ne peux pas recopier une feuille d'un classeur
fermé. Tu ne peux que recopier les valeurs des cellules.
Daniel

Bonjour
sur excel 2003

Je dispose d'un répertoire nommé ASD
dans ce répertoire il y a des sous répertoires
et dans ces sous répertoires il y a divers fichiers excel.

dans chacun de ces fichiers excel il y a 4 onglets..... dont un qui se nomme
facture

J'aimerais si c'est possible, qu'un code VBA balaye les fichiers excel de
chaque répertoire et sous repertoires etc... et me recupere de chaque fichier
excel les onglets nommé FACTURE et les mets dans un fichiers nommé ASD.xls.

chaque onglet recopié dans le fichiers ASD.xls doit se nommer FACTURE et le
nom du sous répertoire et le contenu de la cellule "I12" de cette feuille.

J'ai regardé sur le net boisgontier sigonneau et autre mais j ai pas
réussi..

merci à vous par avance.


Avatar
FS
Bonjour,

En dehors du fait qu'il vaudrait sûrement mieux, comme le suggère Daniel
C., ouvrir chaque classeur pour en recopier la feuille souhaitée dans un
classeur de "consolidation" (ça peut être totalement invisible en
désactivant le rafraichissement de l'écran), je voudrais attirer ton
attention sur le fait que le nom des onglets est limité à 31 caractères.
Le mot FACTURE (déjà 7 caractères) + le nom du sous répertoire + le
contenu de la cellule "I12" feront-ils à eux tous 31 caractères ou moins ?
N'oublie pas de gérer l'erreur (1004) possible en cas de dépassement.
Juste mes qq centimes d'euros en passant..

FS
--
Frédéric SIGONNEAU
Modules et modèles pour Excel :
http://frederic.sigonneau.free.fr/

maud s a écrit :
Bonjour
sur excel 2003

Je dispose d'un répertoire nommé ASD
dans ce répertoire il y a des sous répertoires
et dans ces sous répertoires il y a divers fichiers excel.

dans chacun de ces fichiers excel il y a 4 onglets..... dont un qui se
nomme facture

J'aimerais si c'est possible, qu'un code VBA balaye les fichiers excel de
chaque répertoire et sous repertoires etc... et me recupere de chaque
fichier excel les onglets nommé FACTURE et les mets dans un fichiers nommé
ASD.xls.

chaque onglet recopié dans le fichiers ASD.xls doit se nommer FACTURE et le
nom du sous répertoire et le contenu de la cellule "I12" de cette feuille.

J'ai regardé sur le net boisgontier sigonneau et autre mais j ai pas
réussi..

merci à vous par avance.








Avatar
maud s
et si on oubliait le fait que les classeurs soient fermés...
le code serait quoi?

merci de votre aide...
"maud s" a écrit dans le message de news:

Bonjour
sur excel 2003

Je dispose d'un répertoire nommé ASD
dans ce répertoire il y a des sous répertoires
et dans ces sous répertoires il y a divers fichiers excel.

dans chacun de ces fichiers excel il y a 4 onglets..... dont un qui se
nomme facture

J'aimerais si c'est possible, qu'un code VBA balaye les fichiers excel de
chaque répertoire et sous repertoires etc... et me recupere de chaque
fichier excel les onglets nommé FACTURE et les mets dans un fichiers
nommé ASD.xls.

chaque onglet recopié dans le fichiers ASD.xls doit se nommer FACTURE et
le nom du sous répertoire et le contenu de la cellule "I12" de cette
feuille.

J'ai regardé sur le net boisgontier sigonneau et autre mais j ai pas
réussi..

merci à vous par avance.








Avatar
maud s
Donc en fait j aimerais la macro qui me permette de faire ceci en ouvrant
les différents classuers et les refermant aussitot si cela possible
merci....



"maud s" a écrit dans le message de news:

Bonjour
sur excel 2003

Je dispose d'un répertoire nommé ASD
dans ce répertoire il y a des sous répertoires
et dans ces sous répertoires il y a divers fichiers excel.

dans chacun de ces fichiers excel il y a 4 onglets..... dont un qui se
nomme facture

J'aimerais si c'est possible, qu'un code VBA balaye les fichiers excel de
chaque répertoire et sous repertoires etc... et me recupere de chaque
fichier excel les onglets nommé FACTURE et les mets dans un fichiers
nommé ASD.xls.

chaque onglet recopié dans le fichiers ASD.xls doit se nommer FACTURE et
le nom du sous répertoire et le contenu de la cellule "I12" de cette
feuille.

J'ai regardé sur le net boisgontier sigonneau et autre mais j ai pas
réussi..

merci à vous par avance.








Avatar
Daniel.C
Essaie la macro suivante; note qu'elle ne pourra pas s'exécuter sur une
version XL2007 car elle emploie l'instruction FileSearch :

Sub Import()
Application.ScreenUpdating = False
With Application.FileSearch
.NewSearch
.LookIn = "e:donneesdanielmpfeASD" ' chemin à modifier
.SearchSubFolders = True
.Execute
For i = 1 To .FoundFiles.Count

Workbooks.Open .FoundFiles(i)
Var = "FACTURE" & Right(ActiveWorkbook.Path, _
Len(ActiveWorkbook.Path) - _
InStrRev(ActiveWorkbook.Path, "")) & [I12].Value
If Len(Var) > 31 Then
MsgBox "fichier " & .FoundFiles(i) & " : nom d'onglet trop
long" & _
"fin de la macro"
End If
Sheets("FACTURE").Copy Before:=ThisWorkbook.Sheets(1)
ActiveSheet.Name = Var
Workbooks(Dir(.FoundFiles(i))).Close
Next i
End With
Application.ScreenUpdating = True
End Sub

Daniel

Donc en fait j aimerais la macro qui me permette de faire ceci en ouvrant les
différents classuers et les refermant aussitot si cela possible merci....



"maud s" a écrit dans le message de news:

Bonjour
sur excel 2003

Je dispose d'un répertoire nommé ASD
dans ce répertoire il y a des sous répertoires
et dans ces sous répertoires il y a divers fichiers excel.

dans chacun de ces fichiers excel il y a 4 onglets..... dont un qui se
nomme facture

J'aimerais si c'est possible, qu'un code VBA balaye les fichiers excel de
chaque répertoire et sous repertoires etc... et me recupere de chaque
fichier excel les onglets nommé FACTURE et les mets dans un fichiers nommé
ASD.xls.

chaque onglet recopié dans le fichiers ASD.xls doit se nommer FACTURE et le
nom du sous répertoire et le contenu de la cellule "I12" de cette feuille.

J'ai regardé sur le net boisgontier sigonneau et autre mais j ai pas
réussi..

merci à vous par avance.










Avatar
FS
Re,

Une approche possible (avec quelques vérifications à compléter sans
doute selon ton contexte). C'est la procédure TraiterFactures que tu
peux éventuellement affecter à un bouton de barre d'outils (suivant ta
version d'Excel). Testé avec Excel 2003 et 2007.

'===========(dans un module standard)
Sub TraiterFactures()
Dim Wbk As Workbook, Racine$, Nom

Racine = "D:ASD": Nom = "ASD.xls"
Set Wbk = Workbooks.Add

Application.ScreenUpdating = False
ListFilesInFolder Racine, True, Wbk

Wbk.SaveAs Racine & "" & Nom
Wbk.Close

End Sub

Sub ListFilesInFolder(SourceFolderName As String, _
IncludeSubfolders As Boolean, Cible As Workbook)
Dim FSO As Object, SourceFolder As Object, SubFolder As Object
Dim FileItem As Object, Classeur As Workbook, Nom

Set FSO = CreateObject("Scripting.FileSystemObject")
Set SourceFolder = FSO.GetFolder(SourceFolderName)

For Each FileItem In SourceFolder.Files
If Right(FileItem.Name, 3) = "xls" Then
If FileItem.Name <> ThisWorkbook.Name Then
Set Classeur = Workbooks.Open(FileItem.Path)
If SheetExists(Classeur, "Facture") Then
Nom = Left("FACTURE" & "-" & SourceFolder.Name & "-" & _
Classeur.Sheets("Facture").Range("I12").Value, 31)
Classeur.Sheets("Facture").Copy _
After:=Cible.Sheets(Cible.Sheets.Count)
Cible.Sheets("Facture").Name = Nom
End If
Classeur.Close False
End If
End If
Next FileItem


If IncludeSubfolders Then
For Each SubFolder In SourceFolder.SubFolders
ListFilesInFolder SubFolder.Path, True, Cible
Next SubFolder
End If

Set FileItem = Nothing
Set SourceFolder = Nothing
Set FSO = Nothing

End Sub 'fs (d'après Ole P Erlandsen)

Private Function SheetExists(Wbk As Workbook, sname) As Boolean
Dim F As Object
On Error Resume Next
Set F = Wbk.Sheets(sname)
If Err = 0 Then
SheetExists = True
Else
SheetExists = False
Err.Clear
End If
End Function
'===================================
FS
--
Frédéric SIGONNEAU
Modules et modèles pour Excel :
http://frederic.sigonneau.free.fr/

maud s a écrit :
Bonjour
sur excel 2003

Je dispose d'un répertoire nommé ASD
dans ce répertoire il y a des sous répertoires
et dans ces sous répertoires il y a divers fichiers excel.

dans chacun de ces fichiers excel il y a 4 onglets..... dont un qui se
nomme facture

J'aimerais si c'est possible, qu'un code VBA balaye les fichiers excel de
chaque répertoire et sous repertoires etc... et me recupere de chaque
fichier excel les onglets nommé FACTURE et les mets dans un fichiers nommé
ASD.xls.

chaque onglet recopié dans le fichiers ASD.xls doit se nommer FACTURE et le
nom du sous répertoire et le contenu de la cellule "I12" de cette feuille.

J'ai regardé sur le net boisgontier sigonneau et autre mais j ai pas
réussi..

merci à vous par avance.








Avatar
maud s
Merci daniel pour ton code il marche au début de la procédure et au niveau
de la ligne
Workbooks(Dir(.FoundFiles(i))).Close
à la deuxième execution de la boucle il me marque une erreur de type 1004

as tu une idée?

"Daniel.C" a écrit dans le message de news:

Essaie la macro suivante; note qu'elle ne pourra pas s'exécuter sur une
version XL2007 car elle emploie l'instruction FileSearch :

Sub Import()
Application.ScreenUpdating = False
With Application.FileSearch
.NewSearch
.LookIn = "e:donneesdanielmpfeASD" ' chemin à modifier
.SearchSubFolders = True
.Execute
For i = 1 To .FoundFiles.Count

Workbooks.Open .FoundFiles(i)
Var = "FACTURE" & Right(ActiveWorkbook.Path, _
Len(ActiveWorkbook.Path) - _
InStrRev(ActiveWorkbook.Path, "")) & [I12].Value
If Len(Var) > 31 Then
MsgBox "fichier " & .FoundFiles(i) & " : nom d'onglet trop
long" & _
"fin de la macro"
End If
Sheets("FACTURE").Copy Before:=ThisWorkbook.Sheets(1)
ActiveSheet.Name = Var
Workbooks(Dir(.FoundFiles(i))).Close
Next i
End With
Application.ScreenUpdating = True
End Sub

Daniel

Donc en fait j aimerais la macro qui me permette de faire ceci en ouvrant
les différents classuers et les refermant aussitot si cela possible
merci....



"maud s" a écrit dans le message de news:

Bonjour
sur excel 2003

Je dispose d'un répertoire nommé ASD
dans ce répertoire il y a des sous répertoires
et dans ces sous répertoires il y a divers fichiers excel.

dans chacun de ces fichiers excel il y a 4 onglets..... dont un qui se
nomme facture

J'aimerais si c'est possible, qu'un code VBA balaye les fichiers excel
de chaque répertoire et sous repertoires etc... et me recupere de chaque
fichier excel les onglets nommé FACTURE et les mets dans un fichiers
nommé ASD.xls.

chaque onglet recopié dans le fichiers ASD.xls doit se nommer FACTURE et
le nom du sous répertoire et le contenu de la cellule "I12" de cette
feuille.

J'ai regardé sur le net boisgontier sigonneau et autre mais j ai pas
réussi..

merci à vous par avance.














Avatar
maud s
A lors en fait daniel ton code planteau moment ou il recopie l onglet avec
VAR car il a deja un onglet du meme nom dans le fichier destination.... j ai
executé en pas à pas et il plante là avec une erreur 1004 je vois pas
comment faire!!

merci


"Daniel.C" a écrit dans le message de news:

Essaie la macro suivante; note qu'elle ne pourra pas s'exécuter sur une
version XL2007 car elle emploie l'instruction FileSearch :

Sub Import()
Application.ScreenUpdating = False
With Application.FileSearch
.NewSearch
.LookIn = "e:donneesdanielmpfeASD" ' chemin à modifier
.SearchSubFolders = True
.Execute
For i = 1 To .FoundFiles.Count

Workbooks.Open .FoundFiles(i)
Var = "FACTURE" & Right(ActiveWorkbook.Path, _
Len(ActiveWorkbook.Path) - _
InStrRev(ActiveWorkbook.Path, "")) & [I12].Value
If Len(Var) > 31 Then
MsgBox "fichier " & .FoundFiles(i) & " : nom d'onglet trop
long" & _
"fin de la macro"
End If
Sheets("FACTURE").Copy Before:=ThisWorkbook.Sheets(1)
ActiveSheet.Name = Var
Workbooks(Dir(.FoundFiles(i))).Close
Next i
End With
Application.ScreenUpdating = True
End Sub

Daniel

Donc en fait j aimerais la macro qui me permette de faire ceci en ouvrant
les différents classuers et les refermant aussitot si cela possible
merci....



"maud s" a écrit dans le message de news:

Bonjour
sur excel 2003

Je dispose d'un répertoire nommé ASD
dans ce répertoire il y a des sous répertoires
et dans ces sous répertoires il y a divers fichiers excel.

dans chacun de ces fichiers excel il y a 4 onglets..... dont un qui se
nomme facture

J'aimerais si c'est possible, qu'un code VBA balaye les fichiers excel
de chaque répertoire et sous repertoires etc... et me recupere de chaque
fichier excel les onglets nommé FACTURE et les mets dans un fichiers
nommé ASD.xls.

chaque onglet recopié dans le fichiers ASD.xls doit se nommer FACTURE et
le nom du sous répertoire et le contenu de la cellule "I12" de cette
feuille.

J'ai regardé sur le net boisgontier sigonneau et autre mais j ai pas
réussi..

merci à vous par avance.














Avatar
maud s
il plante là en erreur 1004

ActiveSheet.Name = Var



"Daniel.C" a écrit dans le message de news:

Essaie la macro suivante; note qu'elle ne pourra pas s'exécuter sur une
version XL2007 car elle emploie l'instruction FileSearch :

Sub Import()
Application.ScreenUpdating = False
With Application.FileSearch
.NewSearch
.LookIn = "e:donneesdanielmpfeASD" ' chemin à modifier
.SearchSubFolders = True
.Execute
For i = 1 To .FoundFiles.Count

Workbooks.Open .FoundFiles(i)
Var = "FACTURE" & Right(ActiveWorkbook.Path, _
Len(ActiveWorkbook.Path) - _
InStrRev(ActiveWorkbook.Path, "")) & [I12].Value
If Len(Var) > 31 Then
MsgBox "fichier " & .FoundFiles(i) & " : nom d'onglet trop
long" & _
"fin de la macro"
End If
Sheets("FACTURE").Copy Before:=ThisWorkbook.Sheets(1)
ActiveSheet.Name = Var
Workbooks(Dir(.FoundFiles(i))).Close
Next i
End With
Application.ScreenUpdating = True
End Sub

Daniel

Donc en fait j aimerais la macro qui me permette de faire ceci en ouvrant
les différents classuers et les refermant aussitot si cela possible
merci....



"maud s" a écrit dans le message de news:

Bonjour
sur excel 2003

Je dispose d'un répertoire nommé ASD
dans ce répertoire il y a des sous répertoires
et dans ces sous répertoires il y a divers fichiers excel.

dans chacun de ces fichiers excel il y a 4 onglets..... dont un qui se
nomme facture

J'aimerais si c'est possible, qu'un code VBA balaye les fichiers excel
de chaque répertoire et sous repertoires etc... et me recupere de chaque
fichier excel les onglets nommé FACTURE et les mets dans un fichiers
nommé ASD.xls.

chaque onglet recopié dans le fichiers ASD.xls doit se nommer FACTURE et
le nom du sous répertoire et le contenu de la cellule "I12" de cette
feuille.

J'ai regardé sur le net boisgontier sigonneau et autre mais j ai pas
réussi..

merci à vous par avance.














1 2