Copier toutes les feuilles d'un classeur

C@thy

XLDnaute Barbatruc
Bonsouar le forum,

J'ai trouvé des discussions similaires mais pas exactement ce que je cherchais.

J'ai environ une centaine de fichiers avec une seule feuille vide de données nommée "Bidon", mais sur lesquels j'ai créé plein de macros.
Le but c'est d'aller chercher pour chacun les données de la base d'exploitation :

Je mets en paramètres le chemin et le nom du fichier à copier, et je copie toutes les feuilles dans mon classeur vide qui contient mes macros, ensuite je supprime la feuille "Bidon", qui ne sert à rien.

Du moins c'est comme ça que j'imagine la chose...

Auriez-vous une idée de la façon de procéder??

En vous remerciant pour vos idées,

Bizz et bonne soirée

C@thy
 

camarchepas

XLDnaute Barbatruc
Re : Copier toutes les feuilles d'un classeur

Bonjour Cathy,

Je te résume.

A partir d'un fichier vide (x 100) tu veux :


importer X onglets : Est-ce toujours les mêmes onglets ? si non quels critères de sélection

du classeur ce situant : en réseau , sur intranet , internet ou le même ordi ?

Supprimer la feuille bidon .

Sauvegarder le fichier : Faut-il versionner ou horodater la sauvegarde ?

Merci de nous préciser tous ces points.
 

C@thy

XLDnaute Barbatruc
Re : Copier toutes les feuilles d'un classeur

Merci de ton attention, camarchepas, tous les onglets du classeur, parfois 1 seul, parfois une dizaine,
le contenu est très différent d'1 classeur à l'autre
Les fichiers sont en réseau
La sauvegarde n'est pas nécessaire

Merci et biz

C@thy
 
Dernière édition:

camarchepas

XLDnaute Barbatruc
Re : Copier toutes les feuilles d'un classeur

Cathy,

1° essai :

Lire le contenu d'un onglet dans un classeur fermé !

Si cela fonctionne dans votre configuration, l'on pourra passer à la suite ...

Vous devez préalablement activer la référence Microsoft ActiveX Data Objects x.x Library pour utiliser les exemples présentés dans ce tutoriel.

Dans l'éditeur de macros:
Menu Outils.
Références.
Cochez la ligne "Microsoft ActiveX Data Objects x.x Library".
Cliquez sur le bouton OK pour valider.

x.x dépend de la version installée sur votre ordi.

Code:
Sub RequeteClasseurFerme()
    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 = "D:\Forum XL\Proposition 1.xls"
    'Nom de la feuille dans le classeur fermé
    NomFeuille = "tableau récap"
    
    Set Cn = New ADODB.Connection
    
    '--- Connection ---
    With Cn
        .Provider = "Microsoft.Jet.OLEDB.4.0"
        .ConnectionString = "Data Source=" & Fichier & _
            ";Extended Properties=Excel 8.0;"
        .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
 

C@thy

XLDnaute Barbatruc
Re : Copier toutes les feuilles d'un classeur

Merci caparchepas.

Je viens de tester.

Le principe de ne pas ouvrir le classeur source est excellent, et fonctionne à merveille,

mais... (sinon c'est pas drôle!!!)

1- je ne connais pas à l'avance le nom de toutes mes feuilles (edit : il y a plus de 100 fichiers à traiter de la même façon)
2- je dois récupérer la feuille telle quelle, y compris les largeurs de colonnes, donc...
camarchepas:)... tout à fait comme je le souhaiterais.

Je te remercie grandement, car ta solution est intéressante, je la range dans mon grenier, pour une copie de données d'une feuille dont on connaît le nom.

Bises

C@thy:cool:
 

ERIC S

XLDnaute Barbatruc
Re : Copier toutes les feuilles d'un classeur

Bonjour Cathy et çàmarchepas

j'ai le cerveau embrumé donc je souhaiterais une reformulation. Ce que je comprends :

tu as un certain nb de classeurs contenant une feuille bidon et des macros.
tu veux faire une copie de tes classeurs mais sans macros et sans feuille bidon ?

Désolé, je suis en remise à niveau anglais 4h par jour et du coup, I don' t print anymore
 

C@thy

XLDnaute Barbatruc
Re : Copier toutes les feuilles d'un classeur

exactly, c'est bien ça, sauf que certains fichiers peuvent avoir des macros, mais pas les bonnes...

je reformule pour être plus claire :

j'ai un fichier récepteur qui comporte des macros et une seule feuille vide nommée Bidon,
je veux copier toutes les feuilles d'un fichier émetteur mais pas les macros s'il en a,
et quand je dis copier les feuilles, c'est vraiment récupérer toute la feuille complète : contenu, formats, largeur des colonnes, noms..., tout quoi!:)

Merci à toi pour l'intérêt que tu portes à cette question.:cool:

Bizz

C@thy
 
Dernière édition:

ERIC S

XLDnaute Barbatruc
Re : Copier toutes les feuilles d'un classeur

Re

Qu'entends-tu par pas les bonnes ?

pour rester dans le conceptuel ne faudrait-il pas à partir d'un fichier de mise à jour contenant une macro maj():

1/ balayer tes fichiers
2/ vérifier si besoin qu'ils ont une feuille Bidon
3/ supprimer la feuille Bidon
4/ supprimer les modules
5/ enregistrer sous un autre nom

edit : désolé j'ai mal lu ta réponse c'est ton fichier maj qui a la feuille Bidon et les bonnes macros. La séquence deviendrait

0/ exporter les modules du récepteur1
/ balayer tes fichiers
2/ supprimer les modules
3/ importer les nouveaux modules (ceux du récepteur)
5/ enregistrer sous un autre nom
 
Dernière édition:

C@thy

XLDnaute Barbatruc
Re : Copier toutes les feuilles d'un classeur

Non c pas ça.

Les fichiers à récupérer n'ont pas de feuille Bidon, c'est le fichier récepteur qui en a une, car un fichier doit comporter au moins une feuille, mais elle ne sert à rien du tout.

Il s'agit de faite migrer des fichiers vers excel 2010, et au passage, d'y apporter des améliorations. J'ai donc écrit les nouvelles macros qui vont bien (enfin, j'espère...:eek:)
mais il faut faire un test en parallèle run avec les vrais fichiers de la base en exploitation,
donc sur deux postes distincts on fait les mêmes mises à jour de fichiers pour voir si ils se comportent de la même façon, mais pour cela, il faut récupérer les mêmes données (celles de la base).
Je précise que l'application est complexe, lorsqu'on clique sur un bouton macro, il y a souvent l'exécution d'autres macros pouvant provenir d'autres fichiers...

C@thy
 
Dernière édition:

ERIC S

XLDnaute Barbatruc
Re : Copier toutes les feuilles d'un classeur

Re

je pense que tu as répondu à ma première suggestion mais que tu n'as pas vu mon édit:

si tes macros sont dans des modules (je n'ai pas regardé pour les feuilles)
peux-tu, à la main faire les manips suivantes, avec une copie de ton récepteur et une copie d'un fichier source, dans un répertoire d'essai :
dans un tu ouvres ton récepteur, tu valide les vba
tu vas sur un module clic droit et tu l'exportes, dans le même répertoire (.BAS)
tu ouvres ta copie source
tu importes ton module (.BAS)
tu supprimes les anciens modules
tu sauvegardes ta source sous un autre nom

C'est juste pour vérifier que c'est cela que tu veux, normalement on peut espérer que tout s'automatise
 

C@thy

XLDnaute Barbatruc
Re : Copier toutes les feuilles d'un classeur

Eh ben voilà, j'ai essayé...

tout d'abord je dois te dire que certains de mes fichiers comportent environ 25 modules,
mais de toute façon j'ai le message suivant :
 

Pièces jointes

  • msg interdit.bmp
    163.4 KB · Affichages: 83

ERIC S

XLDnaute Barbatruc
Re : Copier toutes les feuilles d'un classeur

Re

tu as fait la manip dans un répertoire que tu as créé toi-même ? Surprenant

Je regarde de mon côté pour un petit exemple, camarchepas repassera peut-être entre temps

Autre précision : tu enlèves bien tous les anciens modules pour les remplacer par des nouveaux ? ce qui m'étonne c'est que tous tes fichiers ne semblent pas avoir le même nombre de modules ??
 

C@thy

XLDnaute Barbatruc
Re : Copier toutes les feuilles d'un classeur

Tu as raison, j'ai fait la manip à l'envers...:eek:

J'ai une centaine de fichiers très différents, certains comportent des modules, parfois beaucoup, d'autres non,
certains ont beaucoup de feuilles, d'autres une seule
mon but :
récupérer toutes les données dans mon nouveau classeur qui comporte mes nouvelles macros

est-ce mieux compréhensible?

j'ai réussi à copier des feuilles dans un nouveau classeur avec le code ci-dessous :

Code:
Sub CopieClasseur()
Dim Sh As Worksheet
Dim classeur1 As String, classeur2 As String
    classeur1 = ThisWorkbook.Name
    Workbooks.Add
   classeur2 = ActiveWorkbook.Name
     For Each Sh In Workbooks(classeur1).Worksheets
          Workbooks(classeur1).Sheets(Sh.Name).Copy Before:=Workbooks(classeur2).Sheets(1)
    Next Sh
End Sub
mais il ne s'agit pas de créer un nouveau classeur, il s'agit de copier les feuilles dans ce classeur
donc ce qui change :

aller chercher le classeur xxx.xls et copier dans ce classeur

C@thy
 

C@thy

XLDnaute Barbatruc
Re : Copier toutes les feuilles d'un classeur

OK, j'ai trouvé :
Code:
Sub CopieClasseur2()
Dim Sh As Worksheet
Dim classeur1 As String, classeur2 As String
Dim Fichier As String
classeur1 = ThisWorkbook.Name
Fichier = "Z:\DPAEP-SDI-2B\Pressepapier\Nsyn test.XLS"
Workbooks.Open Filename:=Fichier, UpdateLinks:=0
   classeur2 = ActiveWorkbook.Name
For Each Sh In Workbooks(classeur2).Worksheets
          Workbooks(classeur2).Sheets(Sh.Name).Copy Before:=Workbooks(classeur1).Sheets(1)
    Next Sh
   Workbooks(classeur2).Close SaveChanges:=False
   Workbooks(classeur1).Sheets("Bidon").Delete
End sub

Merci a tous

Biz

C@thy
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 294
Messages
2 086 941
Membres
103 404
dernier inscrit
sultan87