Récupérer feuille entière d'un classeur fermé (ADO ?)

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Sylvain M.

XLDnaute Nouveau
Bonjour à tous,

(discussion ouverte sur Developpez, mais il m'a été suggéré de tenter le coup ici 😀)


J'avance doucement sur un projet de classeur de contacts : celui-ci permet de "piocher" des contacts dans un classeur "maître" géré par notre secrétariat (sur lequel nous n'avons que la lecture).

Je souhaiterai qu'à l'ouverture de ce fichier "enfant" (= sélection de contacts du fichier "maître"), l'onglet "BASE" se mette à jour d'après l'onglet "BASE" du fichier maître (un simple copier/coller de l'onglet avec écrasement du précédent).

J'ai vu qu'il fallait pour cela (étant donné que le classeur source est fermé) utiliser les ADO (ActiveX Data Objects), et j'ai trouvé les très bons tutos de Jacques Boisgontier.
Malheureusement, je ne parviens pas* à adapter ces codes pour mon besoin, qui me parait encore plus basique que les cas proposés par Jacques Boisgontier (pas de requêtes sur les champs : juste copier/coller d'une feuille entière)

(peut-être y a-t-il d'ailleurs d'autres solutions que les ADO ???)

Merci pour votre aide !

Sylvain M.

* comme souvent, malheureusement vu mon faible niveau VBA... 😱
 
Re : Récupérer feuille entière d'un classeur fermé (ADO ?)

Bonjour Sylvain M.

Il faudrait joindre le fichier "maître et le fichier "enfant", allégés au besoin et sans données confidentielles.

Et nous dire quelle plage(s) précise(s) vous voulez copier et où vous voulez les coller.

A+
 
Re : Récupérer feuille entière d'un classeur fermé (ADO ?)

Merci Job75 de te pencher sur ma demande.
Je peux bien entendu joindre des fichiers épurés, mais comme je le disais, peu importe la structure des données, puisque Je souhaite copier/coller la feuille entière.
Donc pas de plage particulière à sélectionner !

Le plus simple, finalement, serait peut-être d'ouvrir le fichier maître, puis de le refermer dans la macro ?
Qu'en penses-tu ?

Merci encore !

Sylvain M.
 
Re : Récupérer feuille entière d'un classeur fermé (ADO ?)

Re,

Le plus simple, finalement, serait peut-être d'ouvrir le fichier maître, puis de le refermer dans la macro ?

S'il s'agit de copier toute la feuille (y compris les formats) c'est même la seule solution.

Quel est le nom exact du fichier "maître" et quel est son chemin d'accès ?

Quels sont les noms de la feuille source et de la feuille de destination ?

Y a-t-il des objets (images, boutons...) dans la feuille source et faut-il les copier ?

Y a-t-il des macros dans la feuille source et faut-il les copier ?

Y a-t-il des macros à conserver dans la feuille de destination ?

A+
 
Re : Récupérer feuille entière d'un classeur fermé (ADO ?)

Merci Job75 !
Voici mes réponses à tes questions :

Quel est le nom exact du fichier "maître" et quel est son chemin d'accès ?
Y:\Services_Generaux\Contacts\base_generale.xlsx

Quels sont les noms de la feuille source et de la feuille de destination ?
Source : "Base" (dans "base_generale.xlsm")
Destination : "Base" (dans "base_selection.xlsm")

Y a-t-il des objets (images, boutons...) dans la feuille source et faut-il les copier ?
non

Y a-t-il des macros dans la feuille source et faut-il les copier ?
non (il y en aura plus tard, mais elle ne sont pas à récupérer)
D'ailleurs, un "collage-spécial valeurs" sera suffisant !

Y a-t-il des macros à conserver dans la feuille de destination ?
Non, aucune.

Merci encore !!! 😀

Sylvain M.
 
Re : Récupérer feuille entière d'un classeur fermé (ADO ?)

Re, hello Marc,

Mettez par exemple cette macro dans un module standard du fichier de destination :

Code:
Sub CopierFeuille()
Dim fichier$, nomfeuil$
fichier = "Y:\Services_Generaux\Contacts\base_generale.xlsx"
nomfeuil = "Base"
Application.ScreenUpdating = False
Application.DisplayAlerts = False
On Error Resume Next
ThisWorkbook.Sheets(nomfeuil).Name = nomfeuil & "µ"
With Workbooks.Open(fichier)
  .Sheets(nomfeuil).Copy Before:=ThisWorkbook.Sheets(1) 'en 1ère position
  .Close False
End With
ThisWorkbook.Sheets(nomfeuil & "µ").Delete
End Sub
Vous l'exécutez quand et comme vous voulez.

Par exemple par cette macro dans ThisWorkbook :

Code:
Private Sub Workbook_Open()
CopierFeuille
End Sub
A+
 
Re : Récupérer feuille entière d'un classeur fermé (ADO ?)

Re,

La macro précédente n'est pas utilisable si dans les autres feuilles il y a des formules de liaison avec la feuille "Base".

Alors dans ce cas utiliser celle-ci :

Code:
Sub CopierFeuille()
Dim fichier$, nomfeuil$
fichier = "Y:\Services_Generaux\Contacts\base_generale.xlsx"
nomfeuil = "Base"
Application.ScreenUpdating = False
With Workbooks.Open(fichier)
  .Sheets(nomfeuil).Cells.Copy ThisWorkbook.Sheets(nomfeuil).[A1] 'pour les formats
  ThisWorkbook.Sheets(nomfeuil).UsedRange = .Sheets(nomfeuil).UsedRange.Value
  .Close False
End With
[A1].Copy [A1] 'pour alléger la mémoire
End Sub
A+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour