Copie de données d'un dossier Excel à autre [Résolu/Fermé]

Signaler
Messages postés
79
Date d'inscription
jeudi 3 mai 2012
Statut
Membre
Dernière intervention
6 juillet 2018
-
Messages postés
79
Date d'inscription
jeudi 3 mai 2012
Statut
Membre
Dernière intervention
6 juillet 2018
-
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

1 réponse

Messages postés
8128
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
24 juin 2020
1 436
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

Cordialement
Patrice
Messages postés
8128
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
24 juin 2020
1 436
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
Messages postés
79
Date d'inscription
jeudi 3 mai 2012
Statut
Membre
Dernière intervention
6 juillet 2018

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.
Messages postés
8128
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
24 juin 2020
1 436
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 ?
Messages postés
79
Date d'inscription
jeudi 3 mai 2012
Statut
Membre
Dernière intervention
6 juillet 2018
>
Messages postés
8128
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
24 juin 2020

Hello again!

Ca fonctionne! Il met du temps mais ça marche. Merci beaucoup!

Later!
Messages postés
79
Date d'inscription
jeudi 3 mai 2012
Statut
Membre
Dernière intervention
6 juillet 2018

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