Erreur d'éxécution 1004 PasteSpecial

Bonjour,

Je sollicite votre aide car j'ai une erreur depuis le début de la matinée, et je n'ai pas trouvé comment le résoudre sur les différents forums.

Je voudrais coller en valeur les cellules d'un onglet ("Insertion BG") vers un autre onglet ("BG"). La position du collage sur le deuxième onglet dépend des cellules déjà copiées antérieurement.

Le code que j'ai réalisé jusqu'à maintenant est le suivant :

Dim LigneBGHistorique As Long
LigneBGHistorique = Sheets("BG").Cells(Rows.Count, 2).End(xlUp).Row
Dim LigneNouvelleBG As Long
LigneNouvelleBG = Sheets("Insertion BG").Cells(Rows.Count, 2).End(xlUp).Row
Sheets("Insertion BG").Activate
Sheets("Insertion BG").Range(Cells(4, 2), Cells(LigneNouvelleBG, 4)).Copy
Sheets("BG").Activate
Sheets("BG").Range(Cells(LigneBGHistorique + 1, 4)).PasteSpeciale Paste:=xlPasteValues, Operation:=xlNone, SkipBlancks:=False, Transpose:=False
Sheets("Insertion BG").Activate

Et j'ai l'erreur suivante qui s'affiche quand je lance la macro :

image

La ligne ayant le problème est la suivante :

Sheets("BG").Range(Cells(LigneBGHistorique + 1, 4)).PasteSpeciale Paste:=xlPasteValues, Operation:=xlNone, SkipBlancks:=False, Transpose:=False

Si quelqu'un pouvait m'apporter son aide, j'en serais très heureux :)

Bonne journée.

bonjour,

essaie avec .pastespecial (au lieu de .pastespeciale)

Bonjour,

Plus simplement :

Option Explicit
Sub test()
Dim LigneBGHistorique As Range
Dim LigneNouvelleBG As Range
  Set LigneBGHistorique = Worksheets("BG").Cells(Rows.Count, 2).End(xlUp).EntireRow
  Set LigneNouvelleBG = Worksheets("Insertion BG").Cells(Rows.Count, 2).End(xlUp).EntireRow
  LigneBGHistorique.Value = LigneNouvelleBG.Value
End Sub

Merci pour les réponses. Le problème du code que tu proposes, c'est qu'il sélectionne l'ensemble de la ligne. J'ai d'autres données sur les colonnes adjacentes. De plus, la nouvelle BG remplace la BG historique au lieu de se mettre à la suite comme j'essayais de le faire initialement.

J'ai donc essayé d'adapter ton code pour remplir ces conditions :

    Dim lgLigneBGHistorique As Long
    lgLigneBGHistorique = Sheets("BG").Cells(Rows.Count, 2).End(xlUp).Row
    Dim lgLigneNouvelleBG As Long
    lgLigneNouvelleBG = Sheets("Insertion BG").Cells(Rows.Count, 2).End(xlUp).Row
    Dim rBGHistorique As Range
    Dim rNouvelleBG As Range
    Set rBGHistorique = Worksheets("BG").Range(Cells(lgLigneBGHistorique + 1, 4), Cells(lgLigneBGHistorique + lgLigneNouvelleBG - 2, 6))
    Set rNouvelleBG = Worksheets("Insertion BG").Range(Cells(4, 2), Cells(lgLigneNouvelleBG, 4))
    rBGHistorique.Value = rNouvelleBG.Value

Mais j'ai toujours la même erreur qui s'affiche ici cette fois :

    Set rNouvelleBG = Worksheets("Insertion BG").Range(Cells(4, 2), Cells(lgLigneNouvelleBG, 4))

J'ai trouvé. Il suffisait d'activer les feuilles avant chaque Set.

bonjour,

J'ai trouvé. Il suffisait d'activer les feuilles avant chaque Set.

le problème c'est que ta syntaxe pour définir une plage sur une autre feuille que la feuille active n'est pas correcte. Voici la syntaxe correcte.

Set rNouvelleBG = Range(Worksheets("Insertion BG").Cells(4, 2), Worksheets("Insertion BG").Cells(lgLigneNouvelleBG, 4))

Merci. Je ne connaissais pas.

J'ai trouvé. Il suffisait d'activer les feuilles avant chaque Set.

En VBA, il est très fortement déconseillé de sélectionner les objets pour agir dessus.

C'est inutile, très chronophage et source d'erreur potentielle.

Comme te l'a indiqué h2so4 (salut), quand on transfère des données d'une feuille à une; il faut toujours préciser le parent (i.e. la feuille) de chaque objet Range (i.e Range, Cells, Rows, Columns, ....), sinon VBA utiliser l'objet actif, d'où ton problème : le premier Cells est sur une feuille et le second sur une autre.

De même pour passer d'un classeur à un autre il préciser le lien de parenté jusqu'au classeur.

Rechercher des sujets similaires à "erreur execution 1004 pastespecial"