Je rencontre un problème d'erreur 1004 "Erreur définie par l'application ou définie par l'objet" lors de la sélection d'une plage.
Je suis toujours en mesure 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 crois pas que l'erreur soit dans le code. Peut-être que c'est un paramètre dont je ne suis pas au courant?
J'ai utilisé le même code exactement plusieurs fois auparavant mais pour une raison quelconque, je ne peux pas le faire fonctionner dans ce sous-fichier (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
Je dois faire tout mon possible dans ma copie car le nombre de lignes changera 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
Votre code est peut-être derrière la feuille Sheet1. Ainsi, lorsque vous modifiez le focus en feuille Sheet2, les objets sont introuvables. Si tel est le cas, il vous suffit de spécifier votre feuille de calcul cible:
Sheets("Sheet1").Range("C21").Select
Je ne connais pas très bien 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 à propos de tout ce que vous référencez. De cette façon, vous ne perdez pas la trace si vous passez d'une feuille ou d'un classeur à un autre. Essaye ça:
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 pourrait être utile pour référence future. Je venais d'avoir 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 sur le nœud de 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 enregistrée au niveau de la feuille de calcul).
J'espère que cette aide.
Il m'est arrivé la même chose. Dans mon cas, la majeure partie de la feuille de calcul était en mode protégé (bien que les cellules relatives à la macro aient été déverrouillées). Lorsque j'ai désactivé la protection de la feuille de calcul, la macro a bien fonctionné ... VBA n'aime pas les cellules verrouillées, même si elles ne sont pas utilisées par la macro.
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, vous risquez un débordement de mémoire et Excel ne pourra plus le répéter. Cela m'est arrivé en essayant de créer plusieurs feuilles dans le même classeur.
Dans Office Excel 2003, lorsque vous définissez par programme une valeur d'intervalle avec un tableau contenant une chaîne longue, un message d'erreur semblable au suivant peut s'afficher:
Erreur d'exécution '1004'. Erreur définie par l'application ou définie par l'opération.
Ce problème peut se produire si une ou plusieurs des cellules d'un tableau (plage de cellules) contiennent une chaîne de caractères définie pour contenir plus de 911 caractères.
Pour résoudre ce problème, modifiez le script de sorte qu'aucune cellule du tableau ne contienne une chaîne de caractères contenant plus de 911 caractères.
Par exemple, la ligne de code suivante de l'exemple de bloc de code ci-dessous définit une chaîne de caractères contenant 912 caractères:
Sub XLTest()
Dim aValues(4)
aValues(0) = "Test1"
aValues(1) = "Test2"
aValues(2) = "Test3"
MsgBox "First the Good range set."
aValues(3) = String(911, 65)
Range("A1:D1").Value = aValues
MsgBox "Now the bad range set."
aValues(3) = String(912, 66)
Range("A2:D2").Value = aValues
End Sub
D'autres versions d'Excel ou free alternatives like Calc devraient également fonctionner.
J'ai eu un problème similaire, mais il s'est avéré que je ne faisais que référencer une cellule qui se trouvait hors de la page {i.e. cellules (i, 1). cellules cutanées (i-1,2)}
Je pourrais supprimer l'erreur (erreur d'exécution '1004'. Erreur définie par l'application ou définie par l'opération) en définissant les compteurs comme étant simples.
J'ai eu un problème similaire et résolu en appliquant ces étapes:
J'espère que cela aidera quelqu'un.
Vous devez aller à la feuille de base de données pour obtenir la première ligne vide, vous pouvez essayer cette méthode.
Sub DesdeColombia ()
Dim LastRowFull As Long
'Here we will define the first blank row in the column number 1 of sheet number 1:
LastRowFull = Sheet1.Cells(Rows.Count,1).End(xlUp).Offset(1,0).Row
'Now we are going to insert information
Sheet1.Cells(LastRowFull, 1).Value = "We got it"
End Sub
J'avais un problème similaire lorsque j'essayais de boucler chaque feuille d'un classeur ..__ Pour le résoudre, j'ai fait quelque chose comme ça.
dim mySheet as sheet
for each mysheet in myWorkbook.sheets
mySheet.activate
activesheet.range("A1").select
with Selection
'any wanted operations here
end with
next
Et ça a bien fonctionné
J'espère que vous pourrez l'adapter à votre situation
J'ai aussi eu un problème similaire. Après avoir copié et collé sur une feuille, je voulais que le curseur/la cellule sélectionnée soit au format A1 et non dans la plage dans laquelle je viens de coller.
Dim wkSheet as Worksheet
Set wkSheet = Worksheets(<sheetname>)
wkSheet("A1").Select
mais a obtenu une erreur 400 qui était en fait une erreur 1004
Vous devez activer la feuille avant de changer la cellule sélectionnée Cela a fonctionné
Dim wkSheet as Worksheet
Set wkSheet = Worksheets(<sheetname>)
wkSheet.Activate
wkSheet("A1").Select
Moi aussi j'ai eu le même problème et je suis presque devenu fou. La solution était assez inattendue.
Mon Excel est expédié par défaut lorsque je saisis les formules dans un Excel-Cell comme suit:
=COUNTIF(Range; Searchvalue)
=COUNTIF(A1:A10; 7) 'Example
Veuillez noter que les paramètres sont séparés par un point-virgule;
. Maintenant, si vous collez exactement cette chaîne dans une formule dans VBA, par exemple, comme suit:
Range("C7").FormulaArray = "=COUNTIF(A1:A10; 7)" 'this will not work
Vous obtiendrez cette erreur 1004 sans aucune explication. J'ai passé des heures à résoudre ce problème .. Tout ce que vous avez à faire est de remplacer tout point-virgule par des virgules.
Range("C7").FormulaArray = "=COUNTIF(A1:A10, 7)" 'this works
J'ai également le même problème et j'ai résolu par comme ci-dessous.
Dans la macro ont une variable appelée rownumber et initialement je le mettre à zéro. c'est l'erreur car aucune feuille Excel ne contient un numéro de ligne égal à zéro. quand je définis comme 1 et incrémente ce que je veux.
maintenant cela fonctionne bien.
Vous pouvez utiliser le code suivant (par exemple, si vous voulez copier des données de cellule de Sheet2
à Sheet1
).
Sub Copy
Worksheets("Sheet1").Activate
Worksheets("Sheet1").Range(Cells(i, 6), Cells(i, FullPathLastColumn)).Copy_
Destination:=Worksheets("Sheet2").Cells(Path2Row, Path2EndColumn + 1)
End Sub
J'ai rencontré le même problème et j'ai constaté que la personne qui avait créé la feuille de calcul avait plusieurs colonnes verrouillées. J'ai enlevé la protection et tout a fonctionné comme prévu.
Vous devez connaître la raison réelle de ce code d'erreur courant: 1004. Modifiez votre code fonction/VBA et exécutez votre programme en mode débogage pour identifier la ligne qui l'a provoqué. Et puis, ajoutez le morceau de code ci-dessous pour voir l'erreur,
On Error Resume Next
//Your Line here which causes 1004 error
If Err.Number > 0 Then
Debug.Print Err.Number & ":" & Err.Description
End If
Remarque: Touches de raccourci de débogage que j'utilise sur PC: