Erreur d'exécution '9
Bonjour à toutes et tous,
J'ai un petit soucis !
Si j'exécute la macro ci dessous en mode normal, elle fonctionne sans problème. Mais si je l’exécute sous le mode Personal.xlsb, alors là j'ai une erreur d'exécution '9' à cette ligne de code:
wkB.Sheets("Order").Copy after:=wkA.Sheets(2)
Ci-dessous le code dans le fichier Personal.xlsb et je joint les deux fichiers.
Sub Macro()
ActiveSheet.Name = "Data"
Application.DisplayAlerts = False
For u = Sheets.Count To 2 Step -1
Sheets(u).Delete
Next u
Application.DisplayAlerts = True
Dim Lg%, i%, fdata As Worksheet
Set fdata = ActiveSheet
' Créer feuille Doublon
Sheets.Add after:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = "Doublon"
' Récupérer les données à traiter
With fdata
Lg = .Cells(.Rows.Count, 2).End(xlUp).Row
Application.ScreenUpdating = False
.Range("B2:I2" & Lg).Copy Worksheets("Doublon").Cells(1, 1)
End With
' Suprimer les doublons
With Worksheets("Doublon")
For i = Lg To 2 Step -1
If WorksheetFunction.CountIf(Range("a:a"), Cells(i, 1)) > 1 Then Rows(i).Delete
Next i
.UsedRange.Columns.AutoFit
End With
Application.ScreenUpdating = True
Columns("B:C").Delete Shift:=xlToLeft
' Importation de la feuille Order
Dim wkA As Workbook, wkB As Workbook
Dim chemin As String, fichier As String
Set wkA = ThisWorkbook
chemin = "E:\"
fichier = "Order2.xlsx"
Workbooks.Open chemin & fichier
Set wkB = ActiveWorkbook
wkB.Sheets("Order").Copy after:=wkA.Sheets(2)
wkB.Close True
'Écriture des RecordD dans la feuilles Order
Sheets("Doublon").Activate
Dn = ActiveSheet.UsedRange.Rows.Count
Sheets("Doublon").Range("A1:D" & Dn).Copy
Sheets("Order").Activate
Sheets("Order").Range("C5").Select
Sheets("order").Paste
Range("A5:A" & ActiveSheet.UsedRange.Rows.Count) = "D"
Range("B5:B" & ActiveSheet.UsedRange.Rows.Count) = "123456"
Range("J5:J" & ActiveSheet.UsedRange.Rows.Count) = "B"
Sheets("Doublon").Activate
Sheets("Doublon").Range("E1:F" & Dn).Copy
Sheets("Order").Activate
Sheets("Order").Range("K5").Select
Sheets("order").Paste
Range("N5:N" & ActiveSheet.UsedRange.Rows.Count) = "FRA"
Range("O5:O" & ActiveSheet.UsedRange.Rows.Count) = "MFN"
Range("S5:s" & ActiveSheet.UsedRange.Rows.Count) = "For any information "
Range("T5:T" & ActiveSheet.UsedRange.Rows.Count) = "N"
'Écriture des RecordB dans la feuilles Order
Sheets("Data").Activate
Da = ActiveSheet.UsedRange.Rows.Count - 1
Sheets("Data").Range("A2:D" & Da).Copy
Sheets("Order").Activate
Da1 = ActiveSheet.UsedRange.Rows.Count + 1
Sheets("Order").Range("F" & ActiveSheet.UsedRange.Rows.Count + 1).Select
Sheets("order").Paste
Range("A" & Da1 & ":A" & ActiveSheet.UsedRange.Rows.Count) = "B"
Range("B" & Da1 & ":B" & ActiveSheet.UsedRange.Rows.Count) = "123456"
Range("C" & Da1 & ":C" & ActiveSheet.UsedRange.Rows.Count) = "123456"
Range("D" & Da1 & ":D" & ActiveSheet.UsedRange.Rows.Count) = "C/O"
Range("E" & Da1 & ":E" & ActiveSheet.UsedRange.Rows.Count) = "0"
Range("N" & Da1 & ":N" & ActiveSheet.UsedRange.Rows.Count) = "MFN"
Range("O" & Da1 & ":O" & ActiveSheet.UsedRange.Rows.Count) = "EUR"
Range("P" & Da1 & ":P" & ActiveSheet.UsedRange.Rows.Count) = "1"
Sheets("Data").Activate
Sheets("Data").Range("L2:L" & Da).Copy
Sheets("Order").Activate
Sheets("Order").Range("Q" & Da1).Select
Sheets("order").Paste
Sheets("Data").Activate
Sheets("Data").Range("K2:K" & Da).Copy
Sheets("Order").Activate
Sheets("Order").Range("R" & Da1).Select
Sheets("order").Paste
Range("S" & Da1 & ":S" & ActiveSheet.UsedRange.Rows.Count) = "0"
Range("T" & Da1 & ":T" & ActiveSheet.UsedRange.Rows.Count) = "0"
Range("U" & Da1 & ":U" & ActiveSheet.UsedRange.Rows.Count) = "0"
Range("V" & Da1 & ":V" & ActiveSheet.UsedRange.Rows.Count) = "0"
Range("W" & Da1 & ":W" & ActiveSheet.UsedRange.Rows.Count) = "0"
Range("X" & Da1 & ":X" & ActiveSheet.UsedRange.Rows.Count) = "0"
Range("Y" & Da1 & ":Y" & ActiveSheet.UsedRange.Rows.Count) = "0"
Range("Z" & Da1 & ":Z" & ActiveSheet.UsedRange.Rows.Count) = "0"
End Sub
Merci pour vos réponses.
David
Bonjour,
Désolé de mon erreur
Gelinotte
Bonjour,
Quel erreur ?
David
Bonjour,
Personne ??
Merci
Bonjour,
Tu fais une confusion entre le ThisWorkbook (qui est le personnal.xlsb), et l'ActiveWorkbook (qui est le fichier ouvert)
Essaie ainsi :
....
....
....
Dim wkA As Workbook, wkB As Workbook
Dim fichier As String
Set wkA = ActiveWorkbook
fichier = ActiveWorkbook.Path & "\" & "Order2.xlsx"
Workbooks.Open fichier
Set wkB = ActiveWorkbook
wkB.Sheets("Order").Copy after:=wkA.Sheets(2)
wkB.Close True
.....
.....
Bon courage
Bonjour cousinhub ,
Désolé, d'avoir ressorti un vieux sujet.
J'ai remplacé mon code par le tien, mais j'ai une autre erreur à cette ligne: wkB.Sheets("Order").Copy after:=wkA.Sheets(2)
Erreur:
Run-Time '1004':
Excel cannot insert the sheets into the destination workbook, because it contains fewer rows and colums than the source workbook.
To move or copy the data to the destination workbook, you can select the data, and the use the copy and paste commands to inset it into the sheets of another workbook.
Mais je sèche, j'ai tester via l'enregistreur de macro et j'ai la même erreur.
Merci
David.
Le problème est réglé.
C'était juste que un fichier était enregistré en 2003 et l'autre en 2007.
Merci à tous.