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 SubBonjour,
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:=FalseJ'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