Erreur d'exécution '9' Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
Avatar du membre
david5
Jeune membre
Jeune membre
Messages : 27
Inscrit le : 9 novembre 2005
Version d'Excel : 2016 FR, 2016 EN

Message par david5 » 23 janvier 2016, 22:31

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
Order2.xlsx
(9.71 Kio) Téléchargé 8 fois
Test.xlsm
(17.03 Kio) Téléchargé 10 fois
Avatar du membre
gelinotte
Membre dévoué
Membre dévoué
Messages : 607
Inscrit le : 29 juillet 2013
Version d'Excel : 2016

Message par gelinotte » 23 janvier 2016, 23:11

Bonjour,

Désolé de mon erreur

Gelinotte
Google est mon ami ...
Avatar du membre
david5
Jeune membre
Jeune membre
Messages : 27
Inscrit le : 9 novembre 2005
Version d'Excel : 2016 FR, 2016 EN

Message par david5 » 24 janvier 2016, 00:35

Bonjour,

Quel erreur ?

David
Avatar du membre
david5
Jeune membre
Jeune membre
Messages : 27
Inscrit le : 9 novembre 2005
Version d'Excel : 2016 FR, 2016 EN

Message par david5 » 24 janvier 2016, 13:06

Bonjour,

Personne ??

Merci
c
cousinhub
Membre impliqué
Membre impliqué
Messages : 1'949
Appréciations reçues : 5
Inscrit le : 28 mai 2009
Version d'Excel : xl 2016

Message par cousinhub » 24 janvier 2016, 15:11

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
1/ on se demande à quoi servent les correcteurs d'orthographe....
2/ Notre seule récompense est un "Merci".....
Avatar du membre
david5
Jeune membre
Jeune membre
Messages : 27
Inscrit le : 9 novembre 2005
Version d'Excel : 2016 FR, 2016 EN

Message par david5 » 15 mars 2016, 18:12

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.
Avatar du membre
david5
Jeune membre
Jeune membre
Messages : 27
Inscrit le : 9 novembre 2005
Version d'Excel : 2016 FR, 2016 EN

Message par david5 » 16 mars 2016, 14:24

Le problème est réglé.

C'était juste que un fichier était enregistré en 2003 et l'autre en 2007.

Merci à tous.
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message