Encore moi
Alors voilà la procédure modifiée :
Sub CopieDonnees(SheetName$())
'
Dim i%
Dim oPlageSource As Range
Dim ColDest&
'
' on commence en colonne A
ColDest = 1
For i = 1 To UBound(SheetName)
If SheetName(i) ‹› '' Then
With Sheets(SheetName(i))
Set oPlageSource = .Range('A1:B' & .Range('A65536') _
.End(xlUp).Row)
End With
With oPlageSource
If (.Rows.Count > 1) Or Not (IsEmpty(.Item(1, 1))
And IsEmpty(.Item(1, 2))) Then
.Copy Sheets(NomFeuilleDest).Cells(Sheets(NomFeuilleDest) _
.Cells(1, ColDest).End(xlDown).Row Mod 65536 + 1, _
ColDest)
ColDest = ColDest + 2
End If
End With
End If
Next i
End Sub
Voilà, plus long à écrire qu'à modifier ! Tu peux supprimer la déclaration de
LigneDest et la remplacer par
ColDest.
Les modifications sont en gras. J'ai prévu d'incrémenter
ColDest de 2 à chaque fichier, mais tu peux modifier cela en fonction de tes souhaits (i.e. en laissant une colonne vide à chaque fois).
Si tu as des soucis, n'hésite pas.
EDITION : Mise en page et explications :
La ligne
Sh.Cells(Sh.Cells(1, ColDest).End(xlDown).Row Mod 65536 + 1, ColDest)
permet de copier (en partant de la colonne 1 lors de la première boucle) les données sur la première ligne vide. Cela signifie à fortiori que si tu effectues plusieurs fois la manip, les données se mettront à chaque fois sous celles précédemment copiées. Donc si tu rapatries plusieurs fois des données de fichiers différents, tu peux remplacer celles existantes en les effaçant avant la nouvelle copie ou en te plaçant après la dernière colonne remplie.
Pour effacer, tu mets en début de procédure :
Sheets(NomFeuilleDest.Cells.ClearContents
et si tu préfères aller après la dernière colonne précédemment remplie, tu remplaces l'initialisation de
ColDest par
ColDest = Sheets(NomFeuilleDest).Range('IV1').End(xlToLeft).Column + ?
' Remplacer le ? par le décalage souhaité % à la dernière colonne
C'est tout !
A+
Message édité par: Charly2, à: 28/03/2006 02:31
Message édité par: Charly2, à: 28/03/2006 03:03