Partager via

VBA : Copier une plage nommée dans un fichier fermé sans l'ouvrir.

Anonyme
2020-06-09T08:10:26+00:00

Bonjour à tous,

J'ai glané sur la toile ce bout de code qui permet d'importer une plage dans un classeur depuis un autre classeur fermé et sans l'ouvrir.

Après l'avoir adapté à mon cas perso, cela fonctionne bien.

Le principal inconvénient auquel je n' ai pas trouvé de solution c'est la nécessité d'utiliser des plages fixes dans la source et la destination.

Quelqu'un saurait-il me dire s'il est possible de copier dans le fichier source une plage nommée "maplage" en lieu et place de  "A1:A3000"

Merci par avance pour votre coup de main ;o)

Domi

Dim Cheminsource As String, Fichiersource As String

    Cheminsource = "\serveur\log\data"

    Fichiersource = "monfichier_A.xlsm"

    ThisWorkbook.Names.Add "plage", RefersTo:="='" & Cheminsource & "[" & Fichiersource & "]mafeuille'!$A$1:$A$3000"

    With Worksheets("DEST")

        Worksheets("DEST").Range("A1:A3000").Value = "=plage"

    End With

Microsoft 365 et Office | Excel | Pour la maison | Windows

Question verrouillée. Cette question a été migrée à partir de la Communauté Support Microsoft. Vous pouvez voter pour indiquer si elle est utile, mais vous ne pouvez pas ajouter de commentaires ou de réponses ni suivre la question.

0 commentaires Aucun commentaire
Réponse acceptée par l’auteur de la question
  1. DanielCo 107.7K Points de réputation
    2020-06-09T16:42:45+00:00

    Bêtement, et contrairement à Excel, je ne sais pas le faire.

    Adapte en cochant la référence :

    Microsoft ActiveX Data Objects n.n Library

    Sub LecctureFichierFermé()

      Dim cn As ADODB.Connection

      Dim Fichier As String

      Dim NomFeuille As String, texte_SQL As String

      Dim rst As ADODB.Recordset

      Fichier = "D:\Users\dcola\Documents\Donnees\Daniel\mpfe\test\Classeur3.xlsm"

      NomFeuille = "plage"

      Set cn = New ADODB.Connection

      With cn

      .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _

      & Fichier & ";Extended Properties=""Excel 12.0;HDR=YES;"""

      .Open

      texte_SQL = "SELECT * FROM [" & NomFeuille & "$]"

      texte_SQL = "SELECT * FROM [" & NomFeuille & "]"

      Set rst = New ADODB.Recordset

      Set rst = .Execute(texte_SQL)

      Range("A1").CopyFromRecordset rst

      .Close

      End With

      Set cn = Nothing

    End Sub

    En changeant le nom et le chemin du fichier et en précisant le nom de la feuille.

    Daniel

    2 personnes ont trouvé cette réponse utile.
    0 commentaires Aucun commentaire

3 réponses supplémentaires

  1. Anonyme
    2020-06-10T04:10:13+00:00

    Un grand merci ;o)

    0 commentaires Aucun commentaire
  2. Anonyme
    2020-06-09T15:21:52+00:00

    MErci Daniel pour ce premier pas

    Pour la partie "collage qui suit  ? sachant que je veux coller en $A1 mais que je ne connais pas la fin puisque la taille de "maplage" est variable"...

    0 commentaires Aucun commentaire
  3. DanielCo 107.7K Points de réputation
    2020-06-09T12:13:26+00:00

    Bonjour,

    Essaie :

        ThisWorkbook.Names.Add Name:="plage", RefersToR1C1:= _

            Cheminsource & Fichiersource & "!maplage"

    Cordialement.

    Daniel

    0 commentaires Aucun commentaire