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

10test.xlsm (17.03 Ko)
9order2.xlsx (9.71 Ko)

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.

Rechercher des sujets similaires à "erreur execution"