Collage Variable après copie de tableau de taille variable [VBA] - VB/VBA/VBS - Programmation
Marsh Posté le 07-01-2010 à 03:14:10
Bonjour
Voici une solution pour déterminer la dernière ligne d'un tableau :
Pour chaque colonne de 1 à 12*, on détermine à partir du bas, le rang de la dernière cellule non vide. Si le rang trouvé est supérieur au plus grand précédent, "dernière" prend cette valeur, puis te voilà rendu 1 ligne en-dessous de la dernière ligne non vide. (très rapide)
*Remplace le 12 par le nbre de colonnes de ton tableau
Code :
|
Par ailleurs, au lieu de récupérer les chemins, onglets, etc, tu peux utiliser ceci sur une feuille visitée:
Set MaFeuille_1 = ActiveSheet
et pour y revenir:
MaFeuille_1.Select
MaFeuille_2, etc
Bien cordialement
PS: Pour info, tu as aussi cette façon très rapide de frouver la dernière ligne d'une feuille:
Code :
|
Mais attention! cela indique la dernière ligne Ayant été utilisée, qui peut se trouver X lignes plus bas que celle désirée...
Marsh Posté le 09-01-2010 à 13:04:45
Laoo,
Un grand merci pour ton aide !
j'ai (bêtement?) intégré ton code à la place du mien dans 'on colle mais maintenant la macro ne me retourne que le tableau de la premiere feuille. La boucle ne semble donc plus marcher.
Qu'est ce que j'ai bie pu raté? Est ce le fait de définir une deuxième série d'Integer au sein de la macro ? D'autre part, il me semble pas que "dernière" soit définie, la comparaison de la ligne 5 du code n'est peut etre donc pas effective?
Cordialement,
Guillaume
Marsh Posté le 09-01-2010 à 13:43:18
Hello
Il faudrait peut-être remplacer mon i par Z, par exemple (et ensuite Next i aussi, bien sûr).
Edit: (et ensuite Next Z aussi, bien sûr).
As-tu simplifié ton début de macro?
si tu avais encore un pb, renvoie l'ensemble.
A+
Marsh Posté le 06-01-2010 à 22:59:49
Bonsoir,
j'ai écris une petite macro pour accélerer le suivi de certains produits.
J'ai en effet un nombre de fichier produits variables (ca change tous les ans) dont les titres et chemin de dossiers sont enregistrée dans une liste.
Dans chaque feuille produit, il y a un tableau qui commence toujours au meme endroit mais qui n'a pas toujours le meme nombre de ligne.
Le but de la macro de concentrer les donnes d'environ 40 fichiers dans une seul feuille, une sorte de base de données unique, pour créer un tableau croisé dynamique derrière.
Elle va donc regarder chaque feuille produit, copier le tableau qui s'y trouve et recopier le tableau a la suite du précedent dans une seule feuille.
Mon problème est que pour l'instant je n'arrive pas à écrire une copie variable. Les tableaux qui sont copiés ne sont pas de même taille et la copie du tableau suivant doit donc commencer a la fin du précédent au lieu d'écraser les données du précedent !
Est ce que quelqu'un aurait une idée ?
En vous remerciant!
Sub TrackingSheet()
'declaration des variables
Dim i As Integer
Dim j, k, l, chemin As String
Sheets("liste" ).Activate
i = 1
chemin = Cells(1, 6).Value
While Cells(i, 1).Value <> ""
'on définit le chemin d'accès du fichier
chemin = Cells(1, 6).Value
j = Cells(i, 1).Value (nom du fichier)
k = Cells(i, 2).Value (extension.xls)
l = j & "." & k
chemin = chemin & l
'ouverture du fichier de le nom est chemin
Workbooks.Open Filename:=(chemin)
'on sélectionne la fenetre active, et l'onglet actif
Windows(l).Activate
Sheets("Data" ).Activate
'on copie le tableau de taille variable
Range("A1" ).CurrentRegion.Select
Selection.Copy
'on revient dans l'ancienne fenetre
Windows("Base.xls" ).Activate
Sheets("Reporting" ).Activate
'On colle
Cells(i, 1).Select
ActiveSheet.Paste
i = i + 1
'on réactive la fenetre initiale
Windows("Base.xls" ).Activate
Sheets("liste" ).Activate
Wend
End Sub
Guillaume