Copier "à la suite de"

Résolu
Sam -  
 Sam -
Bonjour,

J'ouvre un nouveau topic, plus approprié à mon problème. J'ai un programme qui copie des cellules de plusieurs feuilles d'un classeur vers une colonne dans un autre classeur. Je voudrais que mes données se mettent les unes après les autres sans qu'il y ait chevauchement, pour l'instant mon code ne marche pas comme il faudrait.
Merci d'avance

Dim Wbk1 As Workbook, Wbk2 As Workbook
Dim ws As Worksheet
Dim ws_count As Integer
Dim cells_count As Integer

cells_count = 0


Set Wbk1 = ThisWorkbook
Set Wbk2 = Workbooks("classeur2.xls")
Dim c As Range
Dim d As Range

ws_count = ActiveWorkbook.Worksheets.Count

For I = 7 To ws_count
Wbk1.Worksheets(I).Activate
Set c = [B:B].Find("Material", LookIn:=xlValues, Lookat:=xlWhole)
Set d = [B:B].Find("Comments", LookIn:=xlValues, Lookat:=xlWhole)
Wbk1.Worksheets(I).Range(c, d).Offset(2, 0).Resize(d.Row - c.Row - 3, 1).Copy Destination:=Workbooks("classeur2.xls").Sheets("Structure").Cells(3 + cells_count, 8)
cells_count = Wbk1.Worksheets(I).Range(c, d).Offset(2, 0).Resize(d.Row - c.Row - 3, 1).Count
Next I


A voir également:

4 réponses

Christof422 Messages postés 871 Date d'inscription   Statut Membre Dernière intervention   212
 
Peut être utiliser la fonction:

ActiveCell.End(xlDown).Select
Selection.Offset(1, 0).Select


Qui permet de sélectionner la case après la dernière cellule pleine.
0
Sam
 
Je ne vois pas comment l'incorporer, ce serait là normalement:

Wbk1.Worksheets(I).Range(c, d).Offset(2, 0).Resize(d.Row - c.Row - 3, 1).Copy Destination:=Workbooks("ICEtest_RT2.xls").Sheets("Structure").Cells(3 + cells_count, 8)

Je devrais trouver le moyen de transformer le "Cells(3 + cells_count, 8)", comment faire?
0
Sam
 
Je l'ai incorporé de la manière suivante, mais ça ne "passe pas" dans la boucle for et je ne sais pas pourquoi, ça considère à chaque fois que la première case vide est celle de la première itération donc ça colle par dessus à chaque fois.

Wbk1.Worksheets(I).Range(c, d).Offset(2, 0).Resize(d.Row - c.Row - 3, 1).Copy Destination:=Workbooks("classeur2.xls").Sheets("Structure").Cells(1, 8).End(xlDown).Offset(1, 0)

Quelqu'un aurait-il une solution?
0
Sam
 
Le problème est résolu, j'avais un problème d'indexage.
Voila la solution, il fallait introduire une variable tot:

For I = 7 To ws_count
Wbk1.Worksheets(I).Activate
Set c = [B:B].Find("Material", LookIn:=xlValues, lookat:=xlWhole)
Set d = [B:B].Find("Comments", LookIn:=xlValues, lookat:=xlWhole)
Wbk1.Worksheets(I).Range(c, d).Offset(2, 0).Resize(d.Row - c.Row - 3, 1).Copy Destination:=Workbooks("Classeur2.xls").Sheets("Structure").Cells(3 + tot, 8)
cells_count = Wbk1.Worksheets(I).Range(c, d).Offset(2, 0).Resize(d.Row - c.Row - 3, 1).Count
tot = tot + cells_count
Next I
0