Sélection feuille pour copier données

  • Initiateur de la discussion lesuisse
  • Date de début
L

lesuisse

Guest
Bonjour le forum,

Je tente de copier des lignes entières dans un autre fichier... Et ça ne marche pas !
Ca bloque au niveau du Workbooks("Working File")...
Est ce que quelqu'un a une idée ???

Merci beaucoup et bonne journée à tous

Le suisse en Suisse


Dim cell As Range
For Each cell In Workbooks("Previous Statement").Sheets("Data").Range("K2:K65536")
If Not IsEmpty(cell) Then
If cell.Value <> "M" Then
cell.EntireRow.Copy Workbooks("Working File").Sheets("Test").Range("A" & Sheets("Test").Range("A65536").End(xlUp).Row + 1)
End If
End If
Next cell
 
S

sousou

Guest
Bonjour lesuisse

Il semble que ta destination ne soit pas très claire.

Workbooks("Working File").Sheets("Test").Range("A" & Sheets("Test").Range("A65536").End(xlUp).Row + 1)

copie de cell(une ligne entière) dans la feuille "test" du classeur "working file" à la cellule...
C'est la que je ne comprend pas le sens de ta formule.
ta definition de range me semble étrange.
peut-tu préciser.
 
@

@+Thierry

Guest
Bonjour Le Suisse, Sousou

Je ne pense pas que l'erreur provienne de la plage de destination, on peut avoir besoin de copier des ligne entière et il n'est nécessaire dans ce cas de préciser une ligne de destination, on peut ne préciser que la celllule de destination.

Non à mon avis les problèmes de notre ami Suisse (qui ne l'est pas en fait ! ) viennent de plusieurs choses...

Premièrement tu ne dois pas oublier l'extention ".xls" quand tu fais référence à un WorkBook.

Secondement quand tu écrit ceci :
For Each cell In Workbooks("Previous Statement").Sheets("Data").Range("K2:K65536")
Tu dimensionne la plage sur 65535 cellules qui vont être scanées peut être pour rien, alors qu'il vaut mieux donner les dimension réélles.

Troisièmement quand tu écrit ceci :
cell.EntireRow.Copy Workbooks("Working File").Sheets("Test").Range("A" & Sheets("Test").Range("A65536").End(xlUp).Row + 1)
Si par malheur tu as un autre workbook actif que "Working File" et qu'il contient une sheet "Test", alors ton dimensionement de la dernière cellule (Sheets("Test").Range("A65536")) sera pris sur ce classeur et non le bon ...

Voici deux versions de ton code corrigés, la première sans instance aux Objets et moins lisible et probablement plus longue d'exécution...

Option Explicit

Sub TheMethodeNumberOne()
Dim Cell As Range

For Each Cell In Workbooks("Previous Statement.xls").Sheets("Data").Range("K2:K" & Workbooks("Previous Statement.xls").Sheets("Data").Range("K65536").End(xlUp).Row)
If Not IsEmpty(Cell) Then
If Cell.Value <> "M" Then
Cell.EntireRow.Copy Workbooks("Working File.xls").Sheets("Test").Range("A" & Workbooks("Working File.xls").Sheets("Test").Range("A65536").End(xlUp).Row + 1)
End If
End If
Next Cell
End Sub

Sub TheMethodeNumberTwo()
Dim WBSource As Workbook, WBCible As Workbook
Dim WSSource As Worksheet, WSCible As Worksheet
Dim Cell As Range

Set WBSource = Workbooks("Previous Statement.xls")
With WBSource
Set WSSource = .Worksheets("Data")
End With

Set WBCible = Workbooks("Working File.xls")
With WBCible
Set WSCible = .Worksheets("Test")
End With

With WSSource
For Each Cell In .Range("K2:K" & .Range("K65536").End(xlUp).Row)
If Not IsEmpty(Cell) Then
If Cell.Value <> "M" Then
Cell.EntireRow.Copy WSCible.Range("A" & WSCible.Range("A65536").End(xlUp).Row + 1)
End If
End If
Next Cell
End With

End Sub


Bonne Journée
@+Thierry
 
L

lesuisse

Guest
Bonjour Thierry, Sousou, le forum

Désolé de ne pas avoir été plus clair Sousou...
Merci pour ton aide Thierry, mais en fait il y a environ 30.000 lignes à copier à chaque fois. La macro prend environ 5 mn pour s'exécuter (les PC sont suisses eux...) ce qui est un peu trop long.
Donc en fait j'ai opté pour une simple solution: un filtre et un copier/coller du fichier source vers le fichier "Working File".
Ca met exactement 3 secondes!
Par contre lorsque je veux fermer le fichier source, dans la macro, je lui dis:

ActiveWorkbook.close

Et lorsque je lance la chose, j'ai la fenêtre qui demande l'enregistrement ou non du fichier...
Comment éviter que cette fenêtre s'affiche et que le fichier se ferme sans prendre en compte les modifications ?

Merci d'avance pour vos précieuses connaissances.

Le faux Suisse
 

Discussions similaires

Réponses
3
Affichages
531

Statistiques des forums

Discussions
312 336
Messages
2 087 389
Membres
103 534
dernier inscrit
Kalamymustapha