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

max9292 Messages postés 1 Date d'inscription   Statut Membre Dernière intervention   -  
Patrice33740 Messages postés 8561 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
A voir également:

1 réponse

Patrice33740 Messages postés 8561 Date d'inscription   Statut Membre Dernière intervention   1 780
 
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