Copie de données d'un dossier Excel à autre

Résolu/Fermé
7ossam Messages postés 82 Date d'inscription jeudi 3 mai 2012 Statut Membre Dernière intervention 30 décembre 2022 - Modifié le 29 juin 2018 à 15:14
7ossam Messages postés 82 Date d'inscription jeudi 3 mai 2012 Statut Membre Dernière intervention 30 décembre 2022 - 2 juil. 2018 à 09:02
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
A voir également:

1 réponse

Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
Modifié le 29 juin 2018 à 15:49
Bonjour,

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

0
7ossam Messages postés 82 Date d'inscription jeudi 3 mai 2012 Statut Membre Dernière intervention 30 décembre 2022
29 juin 2018 à 16:34
Bonjour,

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.
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
29 juin 2018 à 17:29
Re,

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) :
Option Explicit
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
  'Destination = Feuil1 de classeur Feuille_Suivi
  Set Feuille_Suivi = ThisWorkbook.Worksheets("Feuil1")
  With Feuille_Suivi
    'Effacer les anciennes données sauf les titres
    .UsedRange.Offset(1).Clear
    Set destination = .Range("A2")
  End With
  '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
  'Copie des données de l'EXPORT:
  source.Copy destination
  'Je ferme le classeur Export SAP sans le modifier
  Workbook_Export_SAP.Close False
  MsgBox "Export terminé"
End Sub
0
7ossam Messages postés 82 Date d'inscription jeudi 3 mai 2012 Statut Membre Dernière intervention 30 décembre 2022
29 juin 2018 à 22:00
Hello,

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.
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
29 juin 2018 à 22:18
Re,

« 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) :
  source.Offset(1).Clear


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 ?
0
7ossam Messages postés 82 Date d'inscription jeudi 3 mai 2012 Statut Membre Dernière intervention 30 décembre 2022
30 juin 2018 à 18:55
Hello,

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
0