Copie de données d'un dossier Excel à autre
Résolu
7ossam
Messages postés
80
Date d'inscription
Statut
Membre
Dernière intervention
-
7ossam Messages postés 80 Date d'inscription Statut Membre Dernière intervention -
7ossam Messages postés 80 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je dispose d'un fichier Excel (Source) et je veux copier certaines de ses données, dans une de ces feuille (la première est la seule), dans une autre feuille (Feuil1, N°4) dans un autre fichier Excel (Destination).
Et je veux lancer la macro à partir du fichier destination (a priori vide).
J'ai un message d'erreur (Erreur d'exécution '91': Variable objet ou variable de bloc With non définie) pour la ligne : Feuille_Suivi.Range("A1:R" & n).Select
Voici le code que j'ai écrit, si vou pouvez m'aider et merci d'avance:
Sub Export_Données()
Dim n As Integer
Dim Workbook_Export_SAP As Workbook
Dim Feuille_Export_SAP As Worksheet, Feuille_Suivi As Worksheet
Application.ScreenUpdating = False
'Ouvrir le classeur Workbook_Export_SAP
Set Workbook_Export_SAP = Workbooks.Open("L:\Export SAP Réservations\Réservations en cours_SAP.XLS")
'Source = la 1ère feuille de Workbook_Export_SAP :
Set Feuille_Export_SAP = Workbook_Export_SAP.Worksheets(1)
'Destination = Feuil1 de classeur Feuille_Suivi
Set Feuille_Suivi = ThisWorkbook.Worksheets("Feuil1")
'Copie des données de l'EXPORT:
n = Feuille_Export_SAP.Range("D" & Rows.Count).End(xlUp).Row
Feuille_Export_SAP.Activate
Feuille_Export_SAP.Range("A1:R1").Select
Selection.Copy
' J 'efface toute la plage en dessous de la A1:R1 (les titres du tableau):
Feuille_Suivi.Activate
Set Feuille_Suivi = Nothing
Feuille_Suivi.Range("A1:R" & n).Select
ActiveSheet.Paste
'Je ferme le classeur Export SAP
Workbook_Export_SAP.Close True
MsgBox "Export terminé"
End Sub
Je dispose d'un fichier Excel (Source) et je veux copier certaines de ses données, dans une de ces feuille (la première est la seule), dans une autre feuille (Feuil1, N°4) dans un autre fichier Excel (Destination).
Et je veux lancer la macro à partir du fichier destination (a priori vide).
J'ai un message d'erreur (Erreur d'exécution '91': Variable objet ou variable de bloc With non définie) pour la ligne : Feuille_Suivi.Range("A1:R" & n).Select
Voici le code que j'ai écrit, si vou pouvez m'aider et merci d'avance:
Sub Export_Données()
Dim n As Integer
Dim Workbook_Export_SAP As Workbook
Dim Feuille_Export_SAP As Worksheet, Feuille_Suivi As Worksheet
Application.ScreenUpdating = False
'Ouvrir le classeur Workbook_Export_SAP
Set Workbook_Export_SAP = Workbooks.Open("L:\Export SAP Réservations\Réservations en cours_SAP.XLS")
'Source = la 1ère feuille de Workbook_Export_SAP :
Set Feuille_Export_SAP = Workbook_Export_SAP.Worksheets(1)
'Destination = Feuil1 de classeur Feuille_Suivi
Set Feuille_Suivi = ThisWorkbook.Worksheets("Feuil1")
'Copie des données de l'EXPORT:
n = Feuille_Export_SAP.Range("D" & Rows.Count).End(xlUp).Row
Feuille_Export_SAP.Activate
Feuille_Export_SAP.Range("A1:R1").Select
Selection.Copy
' J 'efface toute la plage en dessous de la A1:R1 (les titres du tableau):
Feuille_Suivi.Activate
Set Feuille_Suivi = Nothing
Feuille_Suivi.Range("A1:R" & n).Select
ActiveSheet.Paste
'Je ferme le classeur Export SAP
Workbook_Export_SAP.Close True
MsgBox "Export terminé"
End Sub
A voir également:
- Copie de données d'un dossier Excel à autre
- Dossier appdata - Guide
- Liste déroulante excel - Guide
- Copie cachée - Guide
- Impossible de supprimer un dossier - Guide
- Trier des données excel - Guide
1 réponse
Bonjour,
Peut-être :
Peut-être :
Sub Export_Données() Dim Workbook_Export_SAP As Workbook Dim source As Range, destination As Range Dim Feuille_Export_SAP As Worksheet, Feuille_Suivi As Worksheet Application.ScreenUpdating = False 'Ouvrir le classeur Workbook_Export_SAP Set Workbook_Export_SAP = Workbooks.Open("L:\Export SAP Réservations\Réservations en cours_SAP.XLS") 'Source = la 1ère feuille de Workbook_Export_SAP : Set Feuille_Export_SAP = Workbook_Export_SAP.Worksheets(1) With Feuille_Export_SAP Set source = .Range("D" & .Rows.Count).End(xlUp) Set source = .Range("A1", .Cells(source.Row, "R")) End With 'Destination = Feuil1 de classeur Feuille_Suivi Set Feuille_Suivi = ThisWorkbook.Worksheets("Feuil1") With Feuille_Suivi Set destination = .Range("A" & .Rows.Count).End(xlUp).Offset(1) End With 'Copie des données de l'EXPORT: source.Copy destination ' Effacer les données de la source source.Offset(1).Clear 'Je ferme le classeur Export SAP Workbook_Export_SAP.Close True MsgBox "Export terminé" End Sub
Merci pour la proposition de solution.
Alors, à la première exécution il a fait buggé mon fichier Excel.
En relançant une deuxième fois, il n'y a pas eu un message d'erreur. Sauf que ce n'est pas le résultat que je voulais.
En effet, il a copié seulement la première ligne de mon fichier Source dans le fichier Destination. Et, à la fin, il a effacé les données de mon fichier Source (je voulais les conserver et effacer celles de mon fichier Destination avant de faire la copie).
Je viens de le relancer et ça a fonctionné! Je ne comprends pas alors pourquoi ça n'a pas marché ni la première ni la deuxième fois.
Mais merci, tout de même, pour l'aide!
Juste une autre petite question:
Comme la base de donnée que je copie peut atteindre les 6000 lignes fois 18 colonnes (colonnes jusqu'à R). y'a-t-il un moyen d'améliorer la méthode de copier? Avec des tableaux?
Merci encore.
1) Alors, à la première exécution il a fait buggé mon fichier Excel.
- Y aurait-il d'autres macro dans ton fichier ?
2) En effet, il a copié seulement la première ligne de mon fichier Source dans le fichier Destination.
- C'est qu'il n'y a qu'une donnée dans la colonne D du fichier source (en D1). C'est cette colonne que tu utilises pour mesurer la taille du tableau de données.
Et, à la fin, il a effacé les données de mon fichier Source
- C'est effectivement le rôle de la ligne 22
(je voulais les conserver et effacer celles de mon fichier Destination avant de faire la copie).
- Pas facile à deviner, vu l'endroit où se situe le commentaire !!!
Ceci de devrait mieux correspondre à ton besoin (tel que je l'ai compris) :
Je n'utilise qu'une seule macro;
La colonne D contenait plusieurs valeurs (environ 6000).
Je crois que c'est à cause de la quantité de données que j'ai dans ce fichier que ça a planté. Car il a pas mal ramé avant de planter. et quand je l'ai relancé et que j'ai vu qu'il n'avait copié qu'une seule ligne (celle des titres) alors j'ai été vérifié mon fichier Source et j'ai remarqué que j'avais tout perdu (j'ai fait une copie pour les tests).
Quant à la clarté du message que j'ai posté:
<<
' J 'efface toute la plage en dessous de la A1:R1 (les titres du tableau):
Feuille_Suivi.Activate
Set Feuille_Suivi = Nothing
Feuille_Suivi.Range("A1:R" & n).Select
ActiveSheet.Paste
>>
J'ai pensé que c'était compréhensible, que je voulais effacer les données de la plage <<A 1:Rn >> de la Feuille_Suivi...
Merci pour le coup de main.
« La colonne D contenait plusieurs valeurs (environ 6000).
Je crois que c'est à cause de la quantité de données que j'ai dans ce fichier que ça a planté »
Ce serait surprenant, env. 110000 valeurs, c'est relativement faible, à moins que ton PC ne dispose que de très très peu de mémoire vive disponible.
« j'ai été vérifié mon fichier Source et j'ai remarqué que j'avais tout perdu »
Je viens de te dire que c'est normal, c'est à cause de la ligne 22 (que j'ai supprimé dans le dernier code) :
Il y a certainement une autre raison au plantage précédent mais il sera difficile de l'identifier. De toute façon le premier code ne donne pas le résultat attendu.
Est-ce que le dernier code (post #3) fonctionne correctement ?
C'est fort probable! C'est un PC assez vieux.
Inutile de le rappeler je l'avais bien lue, la ligne en question, la première fois et j'ai fait une copie de mon fichier et j'ai fait tout de même un test pour voir ce que ça allait donner à la fin.
Je t'ai cité ce que j'ai écrit dans ma question car tu as dit "Pas facile à deviner, vu l'endroit où se situe le commentaire !!! " alors que j'ai pensé, au moment de l'écrire, que ce n'était pas très confondant ... Mais certes, j'aurais pu être beaucoup plus clair ...
Malheureusement je ne peux pas le tester tout de suit. Je dois attendre le lundi. Je te tiendrai au courant.
Merci