Re : vba la methode pastespecial de la classe range a echouée
Merci à tout le monde,
Mais hélas l'erreur est toujours présente. Ca doit venir d'un paramètre dans le fichier source, parcque là j'ai beau cherché, le code est correct.
Par contre, je peut contourner le problème :
mon code est :
Sub Ouverture_Fichier_Supplier()
Application.ScreenUpdating = False
Dim Fichier_Travail As String, Fichier As String
Dim Msg, Style, Title, Help, Ctxt, Response, MyString
Dim classeurSource As Workbook, classeurDestination As Workbook
ChDrive CHEMIN2
ChDir CHEMIN2
'Set une variable qui va contenir le nom et le chemin du fichier à ouvrir.
Fichier = Application.GetOpenFilename("Excel Files (*.xls), *.xls", 1, "Select the supplier extract") 'On ouvre la fenêtre et conserve le nom du fichier choisi dans une variable
'Test si un fichier a été sélectionné
If Fichier = "Faux" Then
Msg = "Aucun fichier sélectionné. SVP, veuillez recommencer !" ' Définit le message.
Style = vbOKOnly ' Définit les boutons.
Title = "Abandon de la procédure !" ' Définit le titre.
' Affiche le message.
Response = MsgBox(Msg, Style, Title)
Exit Sub 'Sort de la macro puisqu'aucun fichier n'a été sélectionné
Else 'Sinon, on ouvre le fichier sélectionné
Workbooks.OpenText Filename:=Fichier
Fichier_Travail = ActiveWorkbook.Name 'On donne à une variable le nom de ce fichier qu'on vient d'ouvrir.
End If
'ouvrir le classeur source (en lecture seule)
Set classeurSource = Application.Workbooks.Open(Fichier_Travail, , True)
'définir le classeur destination
Set classeurDestination = ThisWorkbook
'copier les données du classeur source vers le classeur destination
classeurSource.Sheets("Supplier Deliverables").Range("A1:AE1000").Copy classeurDestination.Sheets("Deliverables_Database").Range("A1")
'classeurSource.Sheets("Risks-Issues").Cells.Copy classeurDestination.Sheets("Risks_Database").Range("A1")
'classeurSource.Sheets("KPIs").Cells.Copy classeurDestination.Sheets("Quality_Database").Range("A1")
'classeurSource.Sheets("Supplier Deliverables").Range("A1:AE500").Copy
'With classeurDestination.Sheets("Deliverables_Database").Range("A1")
'.PasteSpecial Paste:=xlPasteValuesAndNumberFormats
'.PasteSpecial Paste:=xlPasteFormats
'Application.CutCopyMode = False
'End With
classeurSource.Sheets("Risks-Issues").Range("A1:BE1000").Copy
With classeurDestination.Sheets("Risks_Database").Range("A1")
.PasteSpecial Paste:=xlPasteValues
.PasteSpecial Paste:=xlPasteFormats
End With
classeurSource.Sheets("KPIs").Range("A1:BE1000").Copy
With classeurDestination.Sheets("Quality_Database").Range("A1")
.PasteSpecial Paste:=xlPasteValues
.PasteSpecial Paste:=xlPasteFormats
End With
'Vide le presse papiers
Application.CutCopyMode = False
'fermer le classeur source
classeurSource.Close False
end sub
Comme ca, ca marche, sauf que, durant cette macro, tous les noms définis dans le classeur source sont importés dans mon classeur de destination (par ex; si dans le classeur source il y a un tableau nommé toto, bah il apparait dans mon classeur de destination), ce que je ne veux pas...
Vous avez une idée pour contourner le probleme ??