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.