Erreur d'exécution '1004': PasteSpecial Range échoué

Bonjour. ^^

Suite à un collage spécial, on m'affiche le message suivant :

"Erreur d'exécution '1004':

La méthode PasteSpecial de la classe Range a échoué."

J'ai cherché sur internet, mais j'ai tellement le nez sur mon code depuis ce matin que je ne vois pas la faute.

Je vous le poste donc ici, en espérant que l'un de vous me débloque.

Option Explicit
Dim FSO As Object
Dim fld As Object
Dim wb As Workbook
Dim sheet As Worksheet

Private Sub ImportButton_Click()

'Déclaration des variables
Dim i As Integer
Dim n As Integer, Nbf As Integer
Dim fichier() As String, nomfichier As String

Dim xlApp As New Excel.Application
Dim xlBook As New Excel.Workbook
Dim xlSheet As New Excel.Worksheet
Dim à_importer, cellule_début As Range
Dim nl As Integer, l As Integer
Dim type_de_moyen As String, Demandeur As String, LRU As String, Porteur As String, Nature As String, acteur As String

Cells(3, 8) = Now 'la cellule H3 va prendre la date comme valeur

n = Cells(Rows.Count, 2).End(xlUp).Row 'On regarde la dernière ligne écrite pour la liste des fichiers
Nbf = n - 5 'On définit le nombre de fichier par le nombre de la dernière ligne écrite moins 5
Label1 = "Importation en cours" 'On informe via le Label que l'importation a commencé

ReDim fichier(Nbf) 'On redimensionne le tableau chemin() à la dimension

For i = 1 To Nbf 'On boucle sur tout les fichiers
    fichier(i) = Cells(i + 5, 1) 'On rentre le lien de chaque fichier dans le tableau chemin
Next

For i = 1 To Nbf 'Pour tous les fichiers
    nomfichier = fichier(i)

    Set xlBook = xlApp.Workbooks.Open(nomfichier) 'on ouvre le fichier
    Set xlSheet = xlBook.Sheets("Fiche signalétique") 'on ouvre la feuille fiche signalétique
    acteur = xlSheet.Cells(13, 2) 'On stocke le nom de l'acteur
    type_de_moyen = xlSheet.Cells(5, 2) 'on stocke le type de moyen
    Demandeur = xlSheet.Cells(6, 2) 'on stocke le nom du demandeur
    LRU = xlSheet.Cells(7, 2) 'on stocke le nom du LRU
    Porteur = xlSheet.Cells(8, 2) 'on stocke les iniatiales du porteurs
    Nature = xlSheet.Cells(9, 2) 'on stocke la nature

    For Each sheet In xlBook.Worksheets 'Pour chaque feuille du classeur

           Select Case sheet.Name 'Selon le nom de la feuille

                Case "Fiche signalétique" 'Cas où le nom de la feuille est Fiche signalétique

                Set xlSheet = xlBook.Sheets(sheet.Name) 'On ouvre la feuille auquel le nom correspond
                nl = Cells(Rows.Count, 1).End(xlUp).Row 'On regarle la ligne de la dernière cellule remplie de la colonne A
                xlSheet.Range("A4:B" & nl).Copy 'On selectionne la plage de données qui nous interesse
                l = ThisWorkbook.Worksheets("Fiche Signalétique").Cells(Rows.Count, 1).End(xlUp).Row 'On regarle la ligne de la dernière cellule remplie de la colonne A

                'On colle en gardant la mise en forme à partir de ligne l première colonne:
                ThisWorkbook.Worksheets("Fiche Signalétique").Range("A" & (l + 2), "B" & (l + nl - 1)).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
                Application.CutCopyMode = False

        End Select
    Next
    xlBook.Close (False) 'On ferme le classeur (sans enregistrer les changements)
    xlApp.Quit
    Set xlSheet = Nothing
    Set xlBook = Nothing
    Set xlApp = Nothing
Next

UserFormImport.Hide 'On ferme l'UserForm
End Sub

Bonjour,

Au moment du Paste ou PasteSpecial, il ne faut sélectionner (ou mentionner) que la première cellule en haut à gauche du champ où les données seront collées. Le reste de la plage sera déterminé par la zone à coller.

Gelinotte

Bonjour,

comme ton pastespecial revient à un paste normal tu peux écrire

  l = ThisWorkbook.Worksheets("Fiche Signalétique").Cells(Rows.Count, 1).End(xlUp).Row 'On regarle la ligne de la dernière cellule remplie de la colonne A

xlSheet.Range("A4:B" & nl).Copy  ThisWorkbook.Worksheets("Fiche Signalétique").Range("A" & (l + 2)) 'On selectionne la plage de données qui nous interesse

             

au lieu de

xlSheet.Range("A4:B" & nl).Copy 'On selectionne la plage de données qui nous interesse
               l = ThisWorkbook.Worksheets("Fiche Signalétique").Cells(Rows.Count, 1).End(xlUp).Row 'On regarle la ligne de la dernière cellule remplie de la colonne A

                'On colle en gardant la mise en forme à partir de ligne l première colonne:
               ThisWorkbook.Worksheets("Fiche Signalétique").Range("A" & (l + 2), "B" & (l + nl - 1)).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

J'ai essayé ta méthode et j'obtiens ce message d'erreur :

Erreur d'exécution '1004' :

La méthode Copy de la classe Range a échoué

J'ai réussi à m'en sortir avec ce code même si il est loin d'être beau

                     'On regarle la ligne de la dernière cellule remplie de la colonne A
                    l = ThisWorkbook.Worksheets("Fiche Signalétique").Cells(Rows.Count, 1).End(xlUp).Row
                    ThisWorkbook.Worksheets("Fiche Signalétique").Activate 'on active ce workbook
                    Range("A" & l + 2).Select 'on selectionne la case où débuter le collage
                    ActiveSheet.Paste 'on colle
Rechercher des sujets similaires à "erreur execution 1004 pastespecial range echoue"