Copier/Coller colonnes de plusieurs fichiers sur une feuille
Bonjour à tous,
Je suis actuellement sur un problème intellectuel.
J'ai donc un dossier dans lequel j'ai plusieurs fichiers. J'aimerai compiler ces fichiers avec une macro VBA.
Le soucis est que je veux seulement compiler certaines colonnes précises des fichiers (7 au total).
L'autre soucis est que dans certaines de ces colonnes, des lignes vides apparaissent au milieu, ce qui rend impossible l'utilisation de "xlDown" lors de la sélection des colonnes si je veux une sélection correcte qui ne s'arrête pas à la première cellule vide.
Lors de la compilation, j'aimerai que les fichiers se copient collent les uns en dessous des autres sans laisser d'espace entre eux (je crois que je dois jouer avec "DerLigne +1" à ce niveau là).
Enfin, je n'arrive pas à trouver un code pour que tous les fichiers du dossier se compilent les uns à la suite des autres jusqu'à ce qu'il n'y en ai plus.
Je ne peux malheureusement pas joindre de fichier car ils contiennent des infos confidentielles par rapport à l'entreprise...
Merci d'avance pour vos réponses... Je débute en VBA et le travail que je dois faire nécessite de très bonnes connaissances que je n'ai pas....
Grégoire.
Bonsoir et bienvenue sur le forum,
Tu peux essayer de voir si ce code te convient en l'adaptant à tes contraintes.
Sub ParcourirEtCopier()
Dim Chemin As String, Fichier As String, NomFichierCible As String, NomFichierSource As String
Dim LastLigne As Integer, NumColonne As Integer, i As Integer, j As Integer
NomFichierCible = ActiveWorkbook.Name 'correspond au fichier destinataire des données
Chemin = "C:\TonChemin\" 'chemin où se trouve des fichiers
'----------------------------------------------------
'Boucle sur tous les fichiers xls du répertoire
'---------------------------------------------------
Fichier = Dir(Chemin & "*.xls") 'ou xlsx
j = 1
Do While Len(Fichier) > 0
Workbooks.Open Filename:=Chemin & Fichier
NomFichierSource = ActiveWorkbook.Name
Sheets(1).Select 'selectionne l'onglet dans lequel se trouve les données
LastLigne = Range("A65000").End(xlUp).Row 'trouve la dernière ligne de la 1ere colonne en considérant que dans un même classeur, toutes les colonnes ont le même nombre de lignes
For i = 1 To 7 'permet de choisir les colonnes à copier, ici la 1,3,5,6,7,8,9
Select Case i
Case 1
NumColonne = 1
Case 2
NumColonne = 3
Case 3
NumColonne = 5
Case 4
NumColonne = 6
Case 5
NumColonne = 7
Case 6
NumColonne = 8
Case 7
NumColonne = 9
End Select
Range(Cells(1, NumColonne), Cells(LastLigne, NumColonne)).Select 'sélectionne la colonne
Selection.Copy
Windows(NomFichierCible).Activate
Cells(j, i).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False 'colle les valeurs
Windows(NomFichierSource).Activate
Next i
j = j + LastLigne
ActiveWorkbook.Close (False) 'ferme le classeur sans le sauver
Fichier = Dir() 'récupére le nom du prochain fichier
Loop
End Sub
Bonsoir,
Le soucis est que je veux seulement compiler certaines colonnes précises des fichiers (7 au total).
En quoi serait-ce un souci ?
Ne prélever qu'une partie des données d'une ligne est un cas fréquent...
L'autre soucis est que dans certaines de ces colonnes, des lignes vides apparaissent au milieu, ce qui rend impossible l'utilisation de "xlDown"
C'est une des raisons pour lesquelles on préfère généralement xlUp !
(je crois que je dois jouer avec "DerLigne +1" à ce niveau là)
Ce n'est pas ce qu'il y a de mieux ! Constituer un tableau qu'on n'affectera qu'une seule fois à la fin est préférable à affecter ligne après ligne !
Enfin, je n'arrive pas à trouver un code pour que tous les fichiers du dossier se compilent les uns à la suite des autres jusqu'à ce qu'il n'y en ai plus.
Quel est le souci encore ? Juste une boucle sur les fichiers... ! Une de plus d'ailleurs, car sur chaque fichier une boucle pour parcourir les lignes, et sur chaque ligne à prélever une boucle sur les colonnes visées !
On ne peut coder sérieusement en VBA sans boucle ni tableau !
Cordialement.