web-dev-qa-db-fra.com

Erreur d'exécution 1004 VBA "Erreur définie par l'application ou définie par l'objet" lors de la sélection de la plage

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
16
thomas

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
21
Frank H.

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.

11
Kam

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.

5
Emily

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.

2
Dave

Vous pouvez recevoir un message d'erreur «Erreur d'exécution 1004» lorsque vous définissez par programme une chaîne de tableau volumineuse sur une plage dans Excel 2003

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.

2
Cees Timmerman

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)}

1
WannabeProger

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.

1
Rolf

J'ai eu un problème similaire et résolu en appliquant ces étapes:

  1. Déprotéger la feuille que je veux éditer
  2. Modification de la plage que j'avais sélectionnée pour chaque cellule de la plage (éclatée)

J'espère que cela aidera quelqu'un.

1
Fabian

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
1
Alex Merlano

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

0
user6292909

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
0
Dave Pile

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
0
Zim84

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.

0
Singaravelan

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
0
parpaei

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.

0
Chris Cooksey

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: 

0
Bhuvanesh Mani