Problème pour récupérer des données dans 1 fichier excel fermé

max9292 Messages postés 1 Statut Membre -  
Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je suis sous Excel 2016 et j'ai un problème pour récupérer les données à partir d'un fichier excel fermé.

En effet, j'ai un fichier source DDdj3Iojvex_source.xls dans lequel je souhaite extraire une plage de données pour les recopier dans un autre fichier. Celui-ci contient un bouton avec la macro suivante (que j'ai repris de ce site) :

Sub ImporterDonneesSansOuvrir()
Dim Chemin As String, Fichier As String

Chemin = "C:\Users\HDDinner\Documents"

Fichier = "DDdj3Iojvex_source.xls"

ThisWorkbook.Names.Add "plage", _
RefersTo:="='" & Chemin & "[" & Fichier & "]Feuil1'!$A$1:$F$10"

With Sheets("Feuil1")
.[A1:F10] = "=plage"
.[A1:F10].Copy
Sheets("Feuil1").Range("A1").PasteSpecial xlPasteValues
.[A1:F10].Clear
End With
End Sub

J'ai un souci avec cette partie du code -> ThisWorkbook.Names.Add "plage"
Pouvez-vous m'indiquer à quoi cela correspond?

Merci par avance pour votre aide

Configuration: Windows / Firefox 65.0

1 réponse

  1. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 785
     
    Bonjour,

    Cette ligne crée une plage nommée, nommée plage.
    C'est inutile et cela risque de générer une erreur si il existe déjà une plage nommée ainsi.

    De façon générique, j'aurais écrit :

    Sub ImporterDonneesSansOuvrir()
    Dim destination As Range
    Dim chemin$, fichier$, formule$, plage$
      ' Définir la source
      chemin = "C:\Users\HDDinner\Documents"
      fichier = "DDdj3Iojvex_source.xls"
      plage = "$A$1:$F$10"
      ' Définir la destination (par exemple C4:H13 )
      With Worksheets(1)
        Set destination = .Range("C4")
        With .Range(plage)
          Set destination = destination.Resize(.Rows.Count, .Columns.Count)
        End With
      End With
      ' Lire le fichier fermé
      formule = "='" & chemin & "\[" & fichier & "]Feuil1'!" & plage
      With destination
        .FormulaArray = formule
        .Value = .Value
      End With
    End Sub


    L'inconvénient de cette méthode est qu'il faut connaître le nom de la feuille source (dans l'exemple Feuil1)

    0