Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1503 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [VBA] Collage Variable après copie de tableau de taille variable

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[VBA] Collage Variable après copie de tableau de taille variable

n°1955678
Guillaumet​heroux
Posté le 06-01-2010 à 22:59:49  profilanswer
 

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

mood
Publicité
Posté le 06-01-2010 à 22:59:49  profilanswer
 

n°1955714
Laoo
Posté le 07-01-2010 à 03:14:10  profilanswer
 

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 :
  1. Dim Ligne, dernière as Integer
  2. Range("a1" ).Select
  3.      For i = 1 To 12
  4. Ligne = Cells(65530, i).end(xlUp).Row
  5. If Ligne > dernière Then dernière = Ligne
  6. Next  i
  7. Range("a" &  dernière).Offset(1,0).Select
  8. ActiveSheet.Paste


 
 
 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 :
  1. dernière = Range("a1" ).SpecialCells(xlLastCell).Row
  2. Range("a" & dernière).Offset(1, 0).Select
  3. ActiveSheet.Paste


 
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...


Message édité par Laoo le 07-01-2010 à 03:37:19

---------------
Olympus OM-D  EM-5 + 14-42
n°1956342
Guillaumet​heroux
Posté le 09-01-2010 à 13:04:45  profilanswer
 

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

n°1956349
Laoo
Posté le 09-01-2010 à 13:43:18  profilanswer
 

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+


Message édité par Laoo le 10-01-2010 à 04:53:22

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [VBA] Collage Variable après copie de tableau de taille variable

 

Sujets relatifs
Recherche dans tableau et copie de lignes[VBA]Copier certaines cellules dans un userform.
Tri de tableau[VBA] Graph : Selection d'une zone de cellules
créer un tableau a partir d'une chaineSauvegarder une variable
Choisir entre une liste de variables ou un tableau[VBA] Détection des touches
Modifier une propriété d'un CommandButton par VBA 
Plus de sujets relatifs à : [VBA] Collage Variable après copie de tableau de taille variable


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR