Boucle VBA

Nanir

XLDnaute Occasionnel
Bonjour le forum,

Voici mon problème.
J'ai 200 fichiers excel sur lesquel je dois copier coller une colonne sur un fichier récapitulatif.

voici ce que j'ai déja fais :

Workbooks.Open filename:= _
'C:\\Documents and Settings\\Saxogirl\\Bureau\\hitec\\REPERAGER1-001.xls'
Columns('E:E').Select
Selection.Copy
Windows('RECAPREPERAGER1.xls:1').Activate
Columns('E:E').Select
ActiveSheet.Paste
Windows('REPERAGER1-001.xls:1').Activate
Application.CutCopyMode = False
ActiveWindow.Close

Le problème est que je dois intégrer une boucle pour ouvrir les fichiers, copier/coller la colonne sur le récap et une autre boucle pour que les colonnes se suivent...

Merci de bien vouloir m'aider,
Amicalement
 

Davidc57

XLDnaute Occasionnel
Bonsoir Nanir,

200 FICHIER EXCEL !!!

Permet moi de te demander pourquoi autant ?

Bon !

La première chose que tu dois faire, c'est de te débarrasser de ces 200 fichiers excel et rassembler le tout dans un seul fichier.

Tes fichiers utilisent combien de lignes et de colonnes ?

Admettons 100 lignes et 10 colonnes :

Dans ton nouveau fichier, tu auras 20000 lignes (100 * 200) et 11 colonnes. La première colonne contiendra des 'flag', par exemple les noms actuels de tes 200 fichiers, ou bien Fichier1, Fichier2, ... Fichier200. Les colonnes suivantes, tu les connais mieux que nous !

Ca on devrait pouvoir le faire en automatique !

Tu imagines les avantages pour ton programme !

Si tu as besoins d'aides, essaye de nous faire parvenir un ou deux fichier parmis les 200 (1 seul s'ils ont tous le même aspect (même info au même endroit, mais avec des valeurs différentes bien sur !

A+
David

A+
David
 

pat1545.

XLDnaute Accro
Bonsoir,

je ne connais pas le blem de Nanir, mais j'ai eu cela à une époque aussi, il s'agissait de fichiers exportés de SAP et qu'il fallait réunir en un seul; mais ici je ne comprends pas s'il veut mettre tout en desous l'un de l'autre ou à la droite de l'autre ???

Bye
 

michel_m

XLDnaute Accro
Bonsoir Nanir, David

nanir, si tes plages à récupérer sont toujours les m^mes (même nom de feuille, mêmes adresses)quelquesoit le nombre de fichiers dans le m^me répertoire,tu as un utilitaire créé sur ce forum par Thierry sur ce fil:
Lien supprimé
A+
Michel_M
 

Nanir

XLDnaute Occasionnel
Bonjour à tous,

Merci pour vos conseils.

Je reformule mon problème:

J'ai 200 fichiers nommés x-001, x-002...dans le même dossier.

Sur ces fichiers je dois copier la colonne E pour la coller sur un fichier récap (à la droite des autres).

Par exemple :
colonne E de x-001 en E de récap,
colonne E de x-002 en F de récap,
colonne E de x-003 en G de récap....

J'arrive assez facilement par VBA à faire la colonne E de x-001 en E de récap (uniquement):side:.

J'aimerai savoir si une bonne âme pourrai m'aider à faire la suite parce que la je patauge dans la semoule....

J'aimerai automatiser cette tâche, sachant que je ne peut pas mettre les 200 fichiers en 1 seul, je ne peut pas vous envoyer de fichier car c'est trop lourd.

Merci beaucoup...
 

pat1545.

XLDnaute Accro
bon,
j'ai trouvé un peu de temps et un code à adapter:
tu dois mettre les noms des 200 fichiers
dans un onglet (feuille 5 dans cet exemple)

Sub OuvrirlesFileColonneA()
Application.ScreenUpdating = False
Dim fNames As Variant, Depart, Neuf
Dim mycell As Range
Dim lLastRow As Long, Lastcol As Range
Dim lCount As Long
Dim Last As Integer, Cole As Range
' classeur de départ
Set Depart = ActiveWorkbook
' dernière colonne libre
Last = Range('IV1').End(xlToLeft).Column + 1
' range où l'on copiera
Set Lastcol = Cells(1, Last)
' dernière ligne du range A1:Ax de la feuille 5 de 'départ'
lLastRow = Sheets('feuil5').Range('A1').End(xlDown).Row
' le nom du classeur contenu dans les cellules
fNames = Range('A1:A' & lLastRow)
' boucle sur ces noms
For lCount = 1 To UBound(fNames)
' ouverture du classeur
Workbooks.Open Filename:=fNames(lCount, 1)
Set Neuf = ActiveWorkbook
' on copie la colonne D à droite de la dernière libre de départ
Set Cole = Range('D:D')
Cole.Copy Lastcol
' on ferme le fichier ouvert en second
Neuf.Close
' on REdétermine dernière ligne et range de destination
Last = Range('IV1').End(xlToLeft).Column + 1
Set Lastcol = Cells(1, Last)
Next lCount
End Sub
 
F

filou

Guest
Plutôt que de réécrire les noms des fichiers dans excel tu peux faire une boucle sur le résultat d'une recherche dans un répertoire.

Par exemple :

Code:
Sub Fileintegration()
    
    With Application.FileSearch
        .NewSearch
        .LookIn = 'D:\\test\\commandes'
        .SearchSubFolders = True
        .Filename = 'x_'
        .FileType = msoFileTypeAllFiles
   
    If .Execute() > 0 Then
        For i = 1 To .FoundFiles.Count
            CopieColonne (.FoundFiles(i))
            pourcent = Round(i / .FoundFiles.Count * 100)
            Application.StatusBar = i & ' sur ' & .FoundFiles.Count & ' ( ' & pourcent & ' % )'
        Next i
        Application.StatusBar = False
    Else
        MsgBox 'Aucun fichier trouvé.'
    End If
    End With
   
End Sub

La fonction CopieColonne doit ouvrir le fichier .foundfiles(i) contenu dans le répertoire 'D:\\test\\commandes' et dont le nom commence par 'x_'.

Elle doit ensuite copier la colonne que tu veux dans la dernière colonne de ton fichier récap ou tu mets ta macro. Pour déterminer la colonne à remplir tu peux reprendre le code de Pat1545 ou tout simplement faire un offset de i que tu utilises déjà dans la boucle ci dessus.

--
filou
 

Nanir

XLDnaute Occasionnel
Bonjour le forum,

J'ai réussi à adapter le code de Pat1545.
J'ai mis du temps mais j'y suis arrivé.
Je voudrai remercier tous les xldnautes qui ont participés à mon petit cas.

MERCI A TOUS ENCORE ET ENCORE !!
 

Discussions similaires

Statistiques des forums

Discussions
312 503
Messages
2 089 056
Membres
104 013
dernier inscrit
VELONDAHY Mickaël