OVH Cloud OVH Cloud

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.

6 réponses

1 2
Avatar
maud s
MERCI DANIEL ET FS pour vos codes...

je finirai de les essayer lundi et je vous tiendrai au courant

merci à vous deux









"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
Daniel.C
On peut ajouter un incrément dans ce cas.
Daniel

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
EUH l'incrément ???? je ne sais pas ce que c est......!!



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

On peut ajouter un incrément dans ce cas.
Daniel

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
Daniel.C
incrémenter, verbe transitif
Sens Augmenter d'une quantité déterminée une variable à chaque boucle
d'un programme [Informatique].
En général ajouter 1 à un nombre, nombre que mettra au bout du nom de
l'onglet.
par exemple :
NomOnglet
NomOnglet1
NomOnglet2
Daniel

EUH l'incrément ???? je ne sais pas ce que c est......!!



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

On peut ajouter un incrément dans ce cas.
Daniel

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
merci pour l info
donc en fait je rajoute une boucle du style FOR J = 1 TO 500 par
exemple...
j'ai pas essayé si cela marche car je ne suis plus sur mon PC portable....
mais d'après vous c'est là qu'il faut mettre l'incrémentation?

merci pour tout Daniel.




Sub Import()
Application.ScreenUpdating = False
With Application.FileSearch
.NewSearch
.LookIn = "e:donneesdanielmpfeASD" ' chemin à modifier
.SearchSubFolders = True
.Execute
For i = 1 To .FoundFiles.Count
FOR J = 1 TO 500 ' par exemple
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 & J
Workbooks(Dir(.FoundFiles(i))).Close
Next i

NEXT 'du FOR J = 1 TO 500

End With
Application.ScreenUpdating = True

End Sub



"Daniel.C" a écrit dans le message de news:
%
incrémenter, verbe transitif
Sens Augmenter d'une quantité déterminée une variable à chaque boucle
d'un programme [Informatique].
En général ajouter 1 à un nombre, nombre que mettra au bout du nom de
l'onglet.
par exemple :
NomOnglet
NomOnglet1
NomOnglet2
Daniel

EUH l'incrément ???? je ne sais pas ce que c est......!!



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

On peut ajouter un incrément dans ce cas.
Daniel

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
Daniel.C
Bonjour.
Essaie la macro suivante (pas testée en totalité) :

Sub Import()
Dim Ctr As Integer, NomFich As String
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)
NomFich = Workbooks(Dir(.FoundFiles(i))).Name
Var = "FACTURE" & Right(ActiveWorkbook.Path, _
Len(ActiveWorkbook.Path) - _
InStrRev(ActiveWorkbook.Path, "")) & [I12].Value
Sheets("FACTURE").Copy Before:=ThisWorkbook.Sheets(1)
On Error Resume Next
Ctr = 0
Err.Clear
Do
If Err.Number > 0 Then
Ctr = Ctr + 1
Var = Var & Ctr
Err.Clear
End If
If Len(Var) > 31 Then
MsgBox "fichier " & NomFich & " : nom d'onglet trop long" &
_
"fin de la macro"
Exit Sub
End If
ActiveSheet.Name = Var
If Err.Number = 0 Then Exit Do
Loop
On Error GoTo 0
Workbooks(Dir(.FoundFiles(i))).Close
Next i
End With
Application.ScreenUpdating = True
End Sub

Daniel


merci pour l info
donc en fait je rajoute une boucle du style FOR J = 1 TO 500 par exemple...
j'ai pas essayé si cela marche car je ne suis plus sur mon PC portable....
mais d'après vous c'est là qu'il faut mettre l'incrémentation?

merci pour tout Daniel.




Sub Import()
Application.ScreenUpdating = False
With Application.FileSearch
.NewSearch
.LookIn = "e:donneesdanielmpfeASD" ' chemin à modifier
.SearchSubFolders = True
.Execute
For i = 1 To .FoundFiles.Count
FOR J = 1 TO 500 ' par exemple
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 & J
Workbooks(Dir(.FoundFiles(i))).Close
Next i

NEXT 'du FOR J = 1 TO 500

End With
Application.ScreenUpdating = True

End Sub



"Daniel.C" a écrit dans le message de news:
%
incrémenter, verbe transitif
Sens Augmenter d'une quantité déterminée une variable à chaque boucle d'un
programme [Informatique].
En général ajouter 1 à un nombre, nombre que mettra au bout du nom de
l'onglet.
par exemple :
NomOnglet
NomOnglet1
NomOnglet2
Daniel

EUH l'incrément ???? je ne sais pas ce que c est......!!



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

On peut ajouter un incrément dans ce cas.
Daniel

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.




























1 2