Je rencontre un problème avec une erreur 1004 "Application-defined or Object-defined error" ; lors de la sélection d'une plage.
Je suis toujours capable de sélectionner des lignes (c'est-à-dire Rows("21:21" ;).select
) et de sélectionner des plages dans d'autres feuilles du même classeur. Je ne pense pas que l'erreur soit dans le code. Peut-être s'agit-il d'un paramètre dont je ne suis pas au courant ?
J'ai utilisé exactement le même code plusieurs fois auparavant, mais pour une raison quelconque, je ne peux pas le faire fonctionner dans ce sous (j'ai commenté où l'erreur se produit)...
Sub CopySheet1_to_PasteSheet2()
Dim CLastFundRow As Integer
Dim CFirstBlankRow As Integer
'Finds last row of content
Windows("Excel.xlsm").Activate
Sheets("Sheet1").Activate
Range("C21").Select
'>>>Error 1004 "Application-defined or Object-defined error" Occurs
Selection.End(xlDown).Select
CLastFundRow = ActiveCell.Row
'Finds first row without content
CFirstBlankRow = CLastFundRow + 1
'Copy Data
Range("A21:C" & CLastFundRow).Select
Selection.Copy
'Paste Data Values
Sheets("PalTrakExport PortfolioAIdName").Select
Range("A21").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'Bring back to top of sheet for consistancy
Range("A21").Select
Range("A1").Select
End Sub
J'ai besoin de faire des copies fantaisistes car le nombre de lignes change fréquemment. Encore une fois, le code ci-dessous a été utilisé auparavant sans erreur... mais pas dans ce cas.
Dim CLastFundRow As Integer
Dim CFirstBlankRow As Integer
'Finds last row of content
Windows("Excel.xlsm").Activate
Sheets("Sheet1").Activate
Range("C21").Select
'>>>Error 1004 "Application-defined or Object-defined error" Occurs
Selection.End(xlDown).Select
CLastFundRow = ActiveCell.Row
'Finds first row without content
CFirstBlankRow = CLastFundRow + 1
Peut-être que votre code se trouve derrière la feuille 1 et que, lorsque vous mettez l'accent sur la feuille 2, les objets ne peuvent être trouvés ? Si c'est le cas, il suffit de spécifier votre feuille de calcul cible pour que cela soit utile :
Sheets("Sheet1").Range("C21").Select
Je ne suis pas très familier avec le fonctionnement de Select, car j'essaie de l'éviter autant que possible :-). Vous pouvez définir et manipuler des plages sans les sélectionner. C'est aussi une bonne idée d'être explicite sur tout ce que vous référencez. Ainsi, vous ne perdrez pas le fil si vous passez d'une feuille ou d'un classeur à un autre. Essayez ceci :
Option Explicit
Sub CopySheet1_to_PasteSheet2()
Dim CLastFundRow As Integer
Dim CFirstBlankRow As Integer
Dim wksSource As Worksheet, wksDest As Worksheet
Dim rngStart As Range, rngSource As Range, rngDest As Range
Set wksSource = ActiveWorkbook.Sheets("Sheet1")
Set wksDest = ActiveWorkbook.Sheets("Sheet2")
'Finds last row of content
CLastFundRow = wksSource.Range("C21").End(xlDown).Row
'Finds first row without content
CFirstBlankRow = CLastFundRow + 1
'Copy Data
Set rngSource = wksSource.Range("A2:C" & CLastFundRow)
'Paste Data Values
Set rngDest = wksDest.Range("A21")
rngSource.Copy
rngDest.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
'Bring back to top of sheet for consistancy
wksDest.Range("A1").Select
End Sub
C'est un peu tard mais cela pourrait être utile pour une référence future. Je viens de rencontrer le même problème et je pense que c’est parce que la macro est enregistrée au niveau de la feuille de calcul. Cliquez avec le bouton droit de la souris sur le nœud des modules dans la fenêtre du projet VBA, cliquez sur insérer un module, puis collez votre macro dans le nouveau module (assurez-vous de supprimer celle qui est enregistrée au niveau de la feuille de calcul).
J'espère que cela vous aidera.
Certaines opérations dans Excel sont limitées par la mémoire disponible. Si vous répétez le même processus encore et encore, cela peut produire un dépassement de mémoire et Excel ne sera plus capable de le répéter. Cela m'est arrivé en essayant de créer plusieurs feuilles dans le même classeur.