Sélection feuille pour copier données

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

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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
 
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.
 
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
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Retour