Récupérer tout le contenu d'une feuille d'un fichier Excel sans l'ouvrir

Bonjour !

J'ai fait pas mal de recherche pour pouvoir copier le contenu d'un fichier excel n°2 dans un fichier excel n°1, sans ouvrir le classeur n°2.

Je place ici mon fichier n°1 (fichier cible) et mon fichier n°2 (fichier source) dans le même dossier, ce qui me donne comme code :

Sub test()

Dim Fichier As String

Fichier = "source.xlsx"
ThisWorkbook.Names.Add "plage", _
RefersTo:="='" & ThisWorkbook.Path & Application.PathSeparator & "[" & Fichier & "]Feuil1'!$A$1:$F$10"

With Sheets("Feuil1")
    .[A1:F10] = "=plage"
    .[A1:F10].Copy
    .Range("A1").PasteSpecial xlPasteValues
    Application.CutCopyMode = False
End With

End Sub

Donc là je peux récupérer le contenu de la plage de cellule [A:F] du classeur source pour le copier dans mon fichier cible.

J'ai une question à ce stade : on est d'accord qu'avec mon code, je n'ai aucune connexion entre les deux classeurs ? Car je n'en veux surtout pas. Je veux dire par là que la variable "plage" (si c'en est une) est supprimée ? Je n'ai pas tout compris du code que j'ai récupéré, je voulais m'en assurer.

Deuxième question : j'aimerais garder un peu le même code mais cette fois ci, copier TOUT le contenu de la feuille du fichier source, sans spécifier de plage de cellule (le fichier source que je récupère a près d'un million de lignes mdr).

Dernière question : Comment modifier mon code pour récupérer le contenu de la feuille excel du fichier source et le copier dans une variable de type à deux dimensions VBA ? Je dois manipuler ces lignes, et j'aimerais autant le faire en passant par VBA, ce sera plus rapide.

Merci et bonne soirée !

KillChief

Bonjour KillChief,

j'aimerais garder un peu le même code mais cette fois ci, copier TOUT le contenu de la feuille du fichier source, sans spécifier de plage de cellule (le fichier source

voici un exemple,

les données sont récupérées dans la variable Rst

Sub RequeteClasseurFerme()
'activer la référence Microsoft ActiveX Data Objects x.x Library
    Dim Cn As ADODB.Connection
    Dim Fichier As String
    Dim NomFeuille As String, texte_SQL As String
    Dim Rst As ADODB.Recordset

    'Définit le classeur fermé servant de base de données
    Fichier = "C:\Users\isabelle\Documents\base.xlsx"

    'Nom de la feuille dans le classeur fermé
    NomFeuille = "Feuil1"

    Set Cn = New ADODB.Connection

    '--- Connection ---
    With Cn
        .Provider = "Microsoft.ACE.OLEDB.12.0"
        .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
            & Fichier & ";Extended Properties=""Excel 12.0;HDR=NO;"""
        .Open
    End With

    'Définit la requête.
    '/!\ Attention à ne pas oublier le symbole $ après le nom de la feuille.
    texte_SQL = "SELECT * FROM [" & NomFeuille & "$]"

    Set Rst = New ADODB.Recordset
    Set Rst = Cn.Execute(texte_SQL)

    'Ecrit le résultat de la requête dans la cellule A2
    Range("A2").CopyFromRecordset Rst

    '--- Fermeture connexion ---
    Cn.Close
    Set Cn = Nothing

End Sub

Bonjour sabV,

Merci d'avoir répondu!

Lorsque je lance la macro, on me marque

Erreur de compilation : Type défini par l'utilisateur non défini

Cela concerne la première ligne. Je crois qu'il faut activer la référence Microsoft ActiveX Data Object x.x Library.

En fait, je devrai passer ensuite ce code d'autres personnes. Existe un moyen de faire la même chose sans avoir à activer cela ? Quelque chose dans le même ordre d'idée que le code écrit au début ?

re,

Cela concerne la première ligne. Je crois qu'il faut activer la référence Microsoft ActiveX Data Object x.x Library.

oui c'est bien ça.

En fait, je devrai passer ensuite ce code d'autres personnes. Existe un moyen de faire la même chose sans avoir à activer cela ? Quelque chose dans le même ordre d'idée que le code écrit au début ?

j'ai trouvé une autre méthode,

ici: https://www.commentcamarche.com/faq/32961-vba-excel-lire-dans-un-classeur-ferme

il faut impérativement que les fichiers soient mit dans le même répertoire.

j'ai trouvé une autre méthode,

ici: https://www.commentcamarche.com/faq/32961-vba-excel-lire-dans-un-classeur-ferme

il faut impérativement que les fichiers soient mit dans le même répertoire.

Ce lien permet juste de récupérer une plage de cellules, non ?

J'ai cherché un peu partout sur internet, je crois qu'en fait c'est vraiment compliqué, je vais donc ouvrir mon fichier source je pense! Je voulais éviter de le faire car il est assez lourd (180 méga) mais cela devrait être plus simple à coder!

Rechercher des sujets similaires à "recuperer tout contenu feuille fichier ouvrir"