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

Sylvain M.

XLDnaute Nouveau
Bonjour à tous,

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


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... :eek:
 

job75

XLDnaute Barbatruc
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+
 

Sylvain M.

XLDnaute Nouveau
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.
 

job75

XLDnaute Barbatruc
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+
 

Sylvain M.

XLDnaute Nouveau
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 !!! :D

Sylvain M.
 

job75

XLDnaute Barbatruc
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+
 

job75

XLDnaute Barbatruc
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+
 

Discussions similaires

Statistiques des forums

Discussions
312 207
Messages
2 086 252
Membres
103 166
dernier inscrit
ZAHRAA