Liaison entre fichier et copier coller

Bonjour à tous

J'ai 2 fichiers : C:\dossier 1\entrée.xls et C:\dossier 2\sortie.xls

Dans le fichier "entrée.xls", j'ai un tableau comportant 10 colonnes et plusieurs lignes (variable selon la colonne), sur le feuille 1. Ces données commencent en A1
Je souhaite copier les données A2:C1048576
Les copier dans le fichier "sortie.xls" en feuille 2 et à partir de la cellule A2.
Le fichier "entrée.xls" sera fermé mais il faut que les données remontent dans le fichier "sortie.xls" qui sera actif.

J'ai fait plusieurs essais mais bute sur le fait que ce fichier "entrée.xls" soit fermé.

Quelqu'un aurait il une solution à me proposer ?

Merci.

11 réponses

  1. Contributeur
    Bonjour

    à adapter à ton contexte (éviter les espaces dans les noms 'onglet, fichier, dossiers)
    Pourrquoi importer toute la page ? si 1 million de lignes, utiliser alors Access:Xl non adapté

    Sub extraire()
    Dim Chemin As String, Fichier As String, Onglet As String, Plage As String
    Dim Source As Object, Requete As Object

    Chemin = "C:\dossier1"
    Fichier = Classeur1.xls
    Onglet = "feuil1" & "§" 'dollar obligatoire
    Plage = "A2:C100000"
    'connexion ADO au fichier
    Set Source = CreateObject("ADODB.Connection")
    Source.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
    "Data Source=" & Chemin & "\" & Fichier & ";Extended Properties=""Excel 8.0;HDR=No;"";"

    'exerce la requete ADO sur la donnée à recopier
    Texte_SQL = "SELECT * FROM [" & Onglet & Plage & "]"
    Set Requete = CreateObject("ADODB.Recordset")
    Set Requete = Source.Execute(Texte_SQL)

    'restitue ces données sur ce classeur
    Sheets(2).Range("A2").CopyFromRecordset Requete

    End Sub
    1
    1. Contributeur
      edit
      lire
      Fichier = "Classeur1.xls"
      0
  2. Bonjour,

    probleme du a ceci:

    Onglet = "Feuil1" & "§" 'dollar obligatoire
    c'est pas un signe $

    donc ecrire ceci

    Onglet = "Feuil1" & "$" 'dollar obligatoire
    1
    1. Bonjour michel_m,

      merci
      Mais lorsque je lance la macro, ça ne marche pas au niveau de la connection ADO au fichier (2 dernières lignes).
      J'ai fais divers essais en change les nom des fichiers (sans espace etc) mais je bloque.
      Et je n'ai pas Access non plus.
      0
      1. Bonjour,

        quelle ligne exactement pose probleme ????
        0
        1. Voici la formule finale. (A partir de votre aide)

          Sub extraire()
          
          Dim Chemin As String, Fichier As String, Onglet As String, Plage As String
          Dim Source As Object, Requete As Object
          
          Chemin = "C:\Users\100728954\Desktop\Entrée"
          Fichier = "Donneesdentree.xls"
          Onglet = "Feuil1" & "§" 'dollar obligatoire
          Plage = "A2:C100000"
          
          'connexion ADO au fichier
          
          Set Source = CreateObject("ADODB.Connection")
          Source.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
          "Data Source=" & Chemin & "\" & Fichier & ";Extended Properties=""Excel 8.0;HDR=No;"";"
          
          'exerce la requete ADO sur la donnée à recopier
          
          texte_SQL = "SELECT * FROM [" & Onglet & Plage & "]"
          Set Requete = CreateObject("ADODB.Recordset")
          Set Requete = Source.Execute(texte_SQL)
          
          'restitue ces données sur ce classeur
          
          Sheets(2).Range("A2").CopyFromRecordset Requete
          
          
          End Sub


          Mon bug remonte sur la ligne "Set Requete = Source.Execute(texte_SQL)"

          Et vu mon niveau de novice, je ne comprends pas d'où vint l'erreur.

          J'ai une autre question concernant cette macro. Si le fichier source est .xlsx ou .xlsm, que'elles sont les "extended properties" ?

          Encore merci à vous.
          0
          1. Oh ! Merci, merci, à vous 2 !
            Ca fonctionne.

            Savez vous les paramètres à changer si nous partons d'un fichier .xlsx ou xlsm ? Est ce les mêmes ?
            0
            1. Bonjour,

              de quel fichier parlez-vous ????
              0
              1. Bonjour,

                Du fichier d'entrée des données.
                En utilisant la formule

                Set Source = CreateObject("ADODB.Connection") Source.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                "Data Source=" & Chemin & "\" & Fichier & ";Extended Properties=""Excel 8.0;HDR=No;"";"

                le fichier d'entrée sélectionné a une extension .xls
                J'ai essayé en partant d'un .xlsx mais celà n'a pas fonctionner.
                J'ai changé ce parmètres dans la définition du fichier. MAis rien.

                A moins d'avoir fait une fausse manip.
                0
                1. Re

                  suivant l'excel, ca change, donc choisir en fonction de votre excel

                      'excel 97-2003
                      Source.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                      "Data Source=" & Chemin & "\" & Fichier & ";Extended Properties=""Excel 8.0;HDR=No;"";"
                      'excel 2007
                      Source.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
                      "Data Source=" & Chemin & "\" & Fichier & ";Extended Properties=""Excel 12.0 xml;HDR=No;"";"
                      'excel 2010
                      Source.Open "Provider=Microsoft.ACE.OLEDB.14.0;" & _
                      "Data Source=" & Chemin & "\" & Fichier & ";Extended Properties=""Excel 14.0 xml;HDR=No;"";"
                      'excel 2013
                      Source.Open "Provider=Microsoft.ACE.OLEDB.15.0;" & _
                      "Data Source=" & Chemin & "\" & Fichier & ";Extended Properties=""Excel 15.0 xml;HDR=No;"";"
                  
                  0
                  1. Re,

                    Ai fini par trouver pour toutes les versions EXCEL (je l'ai pour toutes versions access, a fallu petite modif)

                    Source.Open "DRIVER={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=" & Chemin & "\" & Fichier
                    0
                    1. Contributeur
                      Bonjour

                      Merci F89 d'avoir pris le relais car jétais hospitalisé (rien de bien grave):o)
                      petit bonus
                      un site très utile pour toutes connexions à des databases
                      https://www.connectionstrings.com/
                      0
                      1. Bonjour michel_m,

                        Bonne annee et prompt retablissement. Heureux que ce ne soit (rien de bien grave)

                        Ai oublie dans le message, avoir au moins office2007. Merci pour ce lien
                        0