Copier "à la suite de"

Résolu
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

4 réponses

  • Votes
  • Date
  • Date décroissante
  1. 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.
    1. 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?
      1. 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?
        1. 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