Fichier Introuvable

Bonjour à toutes et à tous, j'ai un problème.

J'écris une macro qui a pour but d'extraire des données dans un fichier excel source pour les importer dans un fichier excel de destination, mon fichier de travail. Cependant Lorsque je lance ma macro, j'ai le message "Erreur d'exécution '1004': 'Fichiersource.xlsx' introuvable. Vérifiez l'orthographe du nom du classeur et la validité de l'emplacement." alors que le fichier est bel et bien là, en bonne et due forme.

Voici mon code :

Sub macro1()

Dim CD As Workbook

Dim OD As Worksheet

Dim CA As String

Dim CS As Workbook

Dim OS As Worksheet

Dim Fichier As String

Dim DL As Range

Application.ScreenUpdating = False

Set CD = ThisWorkbook

Set OD = CD.Sheets("Ongletdestination")

CA = CD.Path

Fichier = Dir(CA & "\Fichiersource.xlsx")

Application.Workbooks.Open (Fichier) (C'est ici que mon problème se manifeste)

Set CS = ActiveWorkbook

Set OS = CS.Sheets("Ongletsource")

DL = OD.Cells(Application.Rows.Count, "A").End(xlUp).Offset(1, 0)

OS.Range(A, L).Copy

DL.PasteSpecial (xlPasteValuesAndNumberFormats)

CS.Close savechanges = False

Application.ScreenUpdating = True

MsgBox "Importation reussie"

End Sub

Quelqu'un pourrait m'aider s'il vous plait ?

Bonjour,

C'est bien de vouloir utiliser des variables pour mieux s'y retrouver dans les noms de classeurs et feuilles, mais à utiliser avec parcimonie ! Un essai à tester :

Sub macro1()

Dim DL As Range

Application.ScreenUpdating = False
With ThisWorkbook.Sheets("Ongletdestination")
    Workbooks.Open Filename:=ThisWorkbook.Path & "\Fichiersource.xlsx" 'Dans le même répertoire que ce classeur
    DL = .Cells(Rows.Count, "A").End(xlUp).Offset(1, 0)
    Sheets("Ongletsource").Range(A, L).Copy 'Attention : A & L non définis
    DL.PasteSpecial (xlPasteValuesAndNumberFormats)
    ActiveWorkbook.Close savechanges = False
End With
MsgBox "Importation reussie"

End Sub

Bonjour kingscannor,

Modifie cette ligne en ajoutant "\" :

CA = CD.Path & "\"

Cordialement,

Bonjour Pedro,

Tout d'abord merci de m'apporter ton aide. Ton code marche déjà beaucoup mieux que le miens (je l'ai modifié et il trouve mon fichier source, l'ouvre et copy ce que je veux). Cependant il ne fonctionne pas au moment d'aller coller ces données dans mon onglet de destination, j'ai essayé de trouver une solution mais en vain.

Le voici :

Sub macro1()

    Dim DL As Range

    Application.ScreenUpdating = False
    With ThisWorkbook.Sheets("Ongletdestination")
    Workbooks.Open Filename:=ThisWorkbook.Path & "\Fichiersource.xlsx" 'Dans le même répertoire que ce classeur
    Sheets("Ongletsource").Range("A:AM").Copy 'Copie les données que je veux, jusqu'ici tout va bien
    DL = .Cells(Rows.Count, "A").End(xlUp).Offset(1, 0) 'Voici là où il y a un problème "Erreur d'execution '91': variable objet ou variable de bloc With non définie"
    DL.PasteSpecial (xlPasteValuesAndNumberFormats)
    ActiveWorkbook.Close savechanges = False
    End With
    MsgBox "Importation reussie"

End Sub

Bonjour,

C'est bien de vouloir utiliser des variables pour mieux s'y retrouver dans les noms de classeurs et feuilles, mais à utiliser avec parcimonie ! Un essai à tester :

Sub macro1()

Dim DL As Range

Application.ScreenUpdating = False
With ThisWorkbook.Sheets("Ongletdestination")
    Workbooks.Open Filename:=ThisWorkbook.Path & "\Fichiersource.xlsx" 'Dans le même répertoire que ce classeur
    DL = .Cells(Rows.Count, "A").End(xlUp).Offset(1, 0)
    Sheets("Ongletsource").Range(A, L).Copy 'Attention : A & L non définis
    DL.PasteSpecial (xlPasteValuesAndNumberFormats)
    ActiveWorkbook.Close savechanges = False
End With
MsgBox "Importation reussie"

End Sub

Bonjour IronBoule, merci de te pencher sur ma problèmatique.

J'ai essayé mais j'ai remarqué que c'était la même chose que

CA = CD.Path
Fichier = Dir(CA & "\Fichiersource.xlsx") 'j'ajoute le "\" ici 

Du coup le problème n'est pas là. Regarde ce que Pedro m'a proposé et ma réponse, vois-tu une facon de regler le problème s'il te plait ?

Bonjour kingscannor,

Modifie cette ligne en ajoutant "\" :

CA = CD.Path & "\"

Cordialement,

Ajoute un "Set" au début de la ligne en erreur :

Sub macro1()

Dim DL As Range

Application.ScreenUpdating = False
With ThisWorkbook.Sheets("Ongletdestination")
    Workbooks.Open Filename:=ThisWorkbook.Path & "\Fichiersource.xlsx" 'Dans le même répertoire que ce classeur
    Set DL = .Cells(Rows.Count, "A").End(xlUp).Offset(1, 0)
    Sheets("Ongletsource").Range(A, L).Copy 'Attention : A & L non définis
    DL.PasteSpecial (xlPasteValuesAndNumberFormats)
    ActiveWorkbook.Close savechanges = False
End With
MsgBox "Importation reussie"

End Sub

Concernant le problème initial, il concerne une mauvaise utilisation de la fonction "Dir", qui n'est d'ailleurs pas nécessaire pour ouvrir ton fichier (connaissant le chemin complet et nom du fichier).

Par ailleurs, le problème souligné dans le commentaire du code que je t'ai proposé est toujours d'actualité. Les variables A et L ne sont définies nulle part, et ne correspondent donc à rien, en l'état...

J'ai ajouté Set et c'est passé merci. J'ai juste un dernier problème, c'est qu'au moment de coller, c'est à dire à :

DL.PasteSpecial (xlPasteValuesAndNumberFormats)

Un message d'erreur s'affiche "Erreur d'exécution '1004': Impossible de coller les informations car les zones Copier et de collage sont de forme et de taille différentes." alors que quand je le fais à la main ca fonctionne.

Par ailleurs, le problème souligné dans le commentaire du code que je t'ai proposé est toujours d'actualité. Les variables A et L ne sont définies nulle part, et ne correspondent donc à rien, en l'état...

Je ne te suis pas, je veux copier de la colonne A à AM voilà pourquoi j'ai mis

 
 Sheets("GL ACE").Range("A:AM").Copy
 

Pourquoi dois-je définir des variables A et L ?

Les 2 erreurs sont liées :

Dans le code que tu as donné ici et sur lequel je me suis basé, tu indiquais :

OS.Range(A, L).Copy

Et pas :

Sheets("GL ACE").Range("A:AM").Copy

En l’occurrence, ce n'est pas une plage valide...

Ensuite, tu ne peux pas copier des colonnes complètes ("A:AM") à la suite d'une colonne déjà partiellement renseignée. Il faut donc définir une plage finie à copier, du genre "A1:AM1000", ou "A1:AM" & DerLig.

Dans le code que tu as donné ici et sur lequel je me suis basé, tu indiquais :

OS.Range(A, L).Copy

Désolé, c'était une erreur. N'en tenons pas compte.

J'ai modifié en mettant

"A1:AM1000"

et ca fonctionne ! Le seul problème est que ca me colle à la suite de mon fichier source et non de mon fichier de destination.

Voici le code actuel :

[code]

Sub macro1()

Dim DL As Range

Application.ScreenUpdating = False

With ThisWorkbook.Sheets("Ongletdestination")

Workbooks.Open Filename:=ThisWorkbook.Path & "\Fichiersource.xlsx" 'Dans le même répertoire que ce classeur

Set DL = Cells(Rows.Count, "A").End(xlUp).Offset(1, 0)

Sheets("Ongletsource").Range("A2:AM1000").Copy

DL.PasteSpecial (xlPasteValuesAndNumberFormats)

ActiveWorkbook.Close savechanges = False

End With

MsgBox "Importation reussie"

End Sub

J'ai trouvé la solution grâce à votre aide, je la poste dans 5 minutes. Merci beaucoup.

Voici mon code final qui fonctionne et repond à mon besoin :

Sub macro1()

    Dim DL As Range

        Application.ScreenUpdating = False

            Workbooks.Open Filename:=ThisWorkbook.Path & "\Fichiersource.xlsx"  ' ouvre le fichier source dans le même répertoire que ce classeur
            Sheets("Ongletsource").Range("A2:AM10000").Copy 'copie les donnée dont j'ai besoin
            ThisWorkbook.Sheets("Ongletdestination").Activate 'va sur l'onglet de destination
            Set DL = Cells(Rows.Count, "A").End(xlUp).Offset(1, 0) ' défini une variable qui est la position dans le fichier de destination
            DL.PasteSpecial (xlPasteValuesAndNumberFormats) ' colle les données
            Application.CutCopyMode = False 'désactive le presse-papier pour éviter le message d'avertissement
            Workbooks("Fichiersource.xlsx").Close False 'Ferme le fichier source sans l'enregistrer

        MsgBox "Importation reussie"

End Sub

Merci encore pour votre aide et si vous avez des idées pour l'optimiser je suis preneur

J'ai modifié en mettant

"A1:AM1000"

et ca fonctionne ! Le seul problème est que ca me colle à la suite de mon fichier source et non de mon fichier de destination.

Vous avez mal recopié ma proposition : il vous manque un point qui fait toute la différence (entre = et Cells)...

Set DL = .Cells(Rows.Count, "A").End(xlUp).Offset(1, 0)

Avec ceci, on fait bien référence à :

ThisWorkbook.Sheets("Ongletdestination").Cells(Rows.Count, "A").End(xlUp).Offset(1, 0)

Et non à :

ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Offset(1, 0)

Bonjour Pedro, j'ai ajouté le point et ca fonctionne. Merci beaucoup, voici donc le code final:

Sub macro1()
    Dim DL As Range

    Application.ScreenUpdating = False
    With ThisWorkbook.Sheets("Onglet destination")
        Workbooks.Open Filename:=ThisWorkbook.Path & "\Fichiersource.xlsx" 'Dans le même répertoire que ce classeur
        Set DL = .Cells(Rows.Count, "A").End(xlUp).Offset(1, 0)
        Sheets("Ongletsource").Range("A2:AM1000").Copy
        DL.PasteSpecial (xlPasteValuesAndNumberFormats)
        Application.CutCopyMode = False
        ActiveWorkbook.Close savechanges = False
    End With
    MsgBox "Importation reussie"

End Sub

Merci encore pour votre aide

Bonjour kingescanor et merci du retour !

Je vous souhaite une excellente continuation.

Rechercher des sujets similaires à "fichier introuvable"