Copier coller une plage d'un classeur à un autre
Bonjour,
Je suis coincé avec cette erreur "la méthode de sélection de la classe Worksheet a échoué", j'ai créé un bouton qui permet à l'utilisateur de choisir un fichier, après que la macro ouvre le fichier et vérifie si l'antete et le même qu'il a déjà, la prochaine étape est de copier toutes les données sauf l'autete qui existe déjà dans le fichier qui contient le bouton et c'est là que j'ai ce problème, merci d'avance pour votre suggestions.
Sub Selectfile()
Dim WB As Workbook
Dim WB2 As Workbook
Dim WS As Worksheet
Dim headerImport As Range
Dim FileToOpen As Variant
Dim isAccepted As Boolean
Dim cell As Range
isAccepted = True
Set WB = ActiveWorkbook
Set WS = WB.Worksheets(1)
FileToOpen = Application.GetOpenFilename(Title:="Please select a file", FileFilter:="Excel Files(*.xls*),*xls*")
If FileToOpen <> False Then
Set WB2 = Application.Workbooks.Open(FileToOpen)
Else
Exit Sub
End If
With WB2.Worksheets(1)
'Set headerImport = .Range("A1:N1")
For Each cell In WB.Worksheets(1).Range("A1:N1")
If cell.Value <> .Range(cell.Address).Value Then isAccepted = False
Next
End With
If isAccepted = False Then WB2.Close MsgBox("Retry!")
WB2.Worksheets(1).Range("A2:N" & WB2.Worksheets(1).Rows.Count).Copy
WB.Worksheets(1).Select ' erreur ici
WB.Worksheets(1).Range("A5").Select ' meme chose
WB.Worksheets(1).PasteBonjour,
En final essaies :
If isAccepted = False Then
WB2.Close False
MsgBox ("Retry!")
Else
WB2.Worksheets(1).Range("A2:N" & WB2.Worksheets(1).Rows.Count).Copy WB.Worksheets(1).Range("A5")
End IfBonjour,
Voici une proposition de réorganisation du code :
Sub Selectfile()
Dim WB As Workbook, WB2 As Workbook
Dim WS As Worksheet
Dim FileToOpen As Variant
Dim isAccepted As Boolean
FileToOpen = Application.GetOpenFilename(Title:="Please select a file", FileFilter:="Excel Files(*.xls*),*xls*")
If FileToOpen <> False Then
Set WB2 = Application.Workbooks.Open(FileToOpen)
Else
Exit Sub
End If
Set WB = Thisworkbook
Set WS = WB.Worksheets(1)
isAccepted = True
With WB2.Worksheets(1)
For Each cell In WS.Range("A1:N1")
If cell.Value <> .Range(cell.Address).Value Then isAccepted = False
Next
If isAccepted = False Then WB2.Close false: MsgBox("Retry!"): exit sub
dl2 = .cells(.rows.count, 1).end(xlup).row
.Range("A2:N" & dl2).Copy destination:=WS.Range("A5:N" & dl2 + 5 - 2)
end with
WB2.close false
msgbox "terminé"
end subIci, on copie directement sur la destination sans sélection... Il y avait une erreur car au moment où vous cherchez à sélectionner la feuille du classeur WB, c'est le classeur WB2 qui est actif. Ce n'est donc pas possible...
Cdlt,
Edit : Salut Patrice !