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

Résolu
7ossam Messages postés 99 Statut Membre -  
7ossam Messages postés 99 Statut Membre -
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

  1. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
     
    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
    1. 7ossam Messages postés 99 Statut Membre
       
      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
    2. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
       
      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
    3. 7ossam Messages postés 99 Statut Membre
       
      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
    4. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
       
      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
    5. 7ossam Messages postés 99 Statut Membre
       
      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