Excel Transfert de feuille et module VBA (La Macro Fonctionne) mais...

laurent950

XLDnaute Barbatruc
Bonsoir,

J’ai une problématique avec les variables et leurs portabilités.

Je m’explique :

J’ai deux dossiers :

1 – DossierSource (Avec les fichiers dont les informations doivent être extraites)
2 – DossierDestination (Vides)


Dans le DossierSource, je dois récupérer les feuilles onglets « Dupliquer » (de chacun des fichiers)

Dans le DossierDestination, je dois crée un classeur et copier la feuille (onglets « Dupliquer » de ce classeur) et lors de l’enregistrement (ce classeur doit avoir le même nom que le classeur ou à était récupéré les informations)

‘ - - - - - - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - -

La macro Fonctionne, mais j’aimerais la paramétré avec des variables objet pour :

Car je dois aussi récupérer les Fichiers portant l’extension .bas et .frm

‘ - - - - - - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - -
‘ C’est peux être pas bon ? la macro semelle ?
‘ - - - - - - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - - -- - -

J’ai vu que l’on peut faire comme cela mais je ne comprends pas tous ?

Set Wbk = ActiveWorkbook
tmpBas1 = "c:\ DupliquerTest001.bas"
ThisWorkbook.VBProject.VBComponents("DupliquerTest001").Export tmpBas1
Wbk.VBProject.VBComponents.Import tmpBas1
Kill tmpBas1



Je pense que mon système de recherche avec l’explorateur n’est pas très propre ?
Cela doit être noté une fois et cela est en double dans la macro
Set objShell = CreateObject("Shell.Application")

Set objFolder = objShell.BrowseForFolder(&H0&, "Choisir un répertoire", &H1&)
On Error Resume Next
Set oFolderItem = objFolder.Items.Item


Je joins la Macro dans le fichier : BoucleTransfertFeuilleModule
Le DossierSource (Avec les classeurs et feuilles qui ont des module VBA)
Le DossierDestination (Ou son crée les classeurs avec la feuille (Dupliquer) uniquement


Voici la macro VBA (Excel qui Transfert que les de feuilles pour le moment sans les module VBA « .bas » et « .frm »


Sub BoucleDouvertureRepertoire()

'-------------------------------------------------------------------------------------------------------------------------------------------------------------------
' Ouverture de L'explorateur de fichier (Pour les fichiers du répertoire Sources)
'-------------------------------------------------------------------------------------------------------------------------------------------------------------------

' Boucle d'ouverture
Dim objShell As Object, objFolder As Object, oFolderItem As Object
Dim CheminSource As String

Set objShell = CreateObject("Shell.Application")
MsgBox "Choisir le repertoir Source ou seront faite les copies"
Set objFolder = objShell.BrowseForFolder(&H0&, "Choisir un répertoire", &H1&)

On Error Resume Next
Set oFolderItem = objFolder.Items.Item
CheminSource = oFolderItem.Path

'-------------------------------------------------------------------------------------------------------------------------------------------------------------------
' Mémorisation du CheminSource et FichSource
'-------------------------------------------------------------------------------------------------------------------------------------------------------------------

'MsgBox Chemin
CheminSource = CheminSource + "\"
'MsgBox Chemin
FichSource = Dir(CheminSource & "*.xlsm")
'MsgBox fich


'-------------------------------------------------------------------------------------------------------------------------------------------------------------------
' Ouverture de L'explorateur de fichier (Pour les fichiers du répertoire Destination)
'-------------------------------------------------------------------------------------------------------------------------------------------------------------------

' Boucle d'ouverture
Dim CheminDestination As String

Set objShell = CreateObject("Shell.Application")
MsgBox "Choisir le repertoir De Destination ou seront Crée les classeurs avec feuilles et module selectionnées"
Set objFolder = objShell.BrowseForFolder(&H0&, "Choisir un répertoire", &H1&)

On Error Resume Next
Set oFolderItem = objFolder.Items.Item
CheminDestination = oFolderItem.Path

'-------------------------------------------------------------------------------------------------------------------------------------------------------------------
' Mémorisation du CheminDestination
'-------------------------------------------------------------------------------------------------------------------------------------------------------------------

'MsgBox Chemin
CheminDestination = CheminDestination + "\"
'MsgBox Chemin


'-------------------------------------------------------------------------------------------------------------------------------------------------------------------
' Depart de la boucle qui effectura l'opération sous cette boucle tant qu'il y aura des fichier dans le repertoir
'-------------------------------------------------------------------------------------------------------------------------------------------------------------------

'Boucle
Do While FichSource <> ""

'Basculer sur le fichires source (Ouverture du premier fichier)
Workbooks.Open CheminSource & FichSource

'copier la feuille selectionné dans un nouveau classeur
Sheets("Dupliquer").Copy

' Fermeture du classeur ou les selections ont était faite (Feuilles, Module, usurforme etc.)
Workbooks(FichSource).Close

' Juste le nom du fichier source sans sont extention afin de le renomer exactement pareilles que sont
' fichier sources d'ou proviennent les différentes informations tiré de ce classeur

Extension = Len(FichSource) - 5 ' len = longueur du nom du fichier et - 5 = l'extention .xlsm (donc seul le nom du fichier)
FichSource = Left(FichSource, Extension) ' Gauche de l'extreme droite du nom - 5 caractéres (l'extension) = (donc seul le nom du fichier)
'MsgBox fich

' Enregitrement du document crée !
' CheminDestination = le répertoire choisie en deuxiemme passage
' FichSource = même non de classeur que celuis déja ouvert
' FileFormat:=xlOpenXMLWorkbookMacroEnabled = Pour enregistrer sous .xlsm (Classeur prenant en charge les macro)
ActiveWorkbook.SaveAs CheminDestination & FichSource, FileFormat:=xlOpenXMLWorkbookMacroEnabled

' Fermeture du fichier (enregistré)
ActiveWorkbook.Close False

' Fin de la boucle
FichSource = Dir ' (Boucle de redirection vers l'autres fichier du repertoire)

Loop

End Sub




Je vous remercie par avance si vous avez une solution plus simple

Laurent
 
Dernière édition:

kjin

XLDnaute Barbatruc
Re : Excel Transfert de feuille et module VBA (La Macro Fonctionne) mais...

Bonsoir,
Beaucoup de confusion dans l'explication et le code
Tu souhaites exporter les modules et usf, soit mais pour en faire quoi ? les enregistrer tel quels, les réimporter dans le nouveau classeur ? quels modules ? quels usf ?

Edit : Merci d'utiliser à l'avenir les balises
Code:
 (#dans le menu) pour le confort de tous[/I]
A+
kjin
 
Dernière édition:

laurent950

XLDnaute Barbatruc
Re : Excel Transfert de feuille et module VBA (La Macro Fonctionne) mais...

Bonsoir et merci,

J’ai constitué un classeur Excel bien complexe (avec feuilles et macro diverse ainsi que des usurforme)

Se classeur est un point de base.

On m’envois (par exemple 10 classeur) chacun d’eux porte un nom.

Je dois crée 10 classeurs vierges, donner le nom de ses 10 classeurs, récupérer une feuilles qui a toujours le même nom dans ses 10 classeurs, puis récupérer mes feuilles, module .bas et .frm (Macro et usurforme) puis récupérer une autre feuilles qui se trouve dans un autre classeur.

Se qui donnes (les 10 feuilles différentes des 10 classeurs) intégrés mes feuilles et module, plus une autres feuilles d’un autre classeur.

C’est peux êtres un peux compliquer mais l’idée est là.

Comme j’ai fais cette macro c’est l’idée.

Je vous remercie par avance si vous avez une idée

Laurent
 

laurent950

XLDnaute Barbatruc
Re : Excel Transfert de feuille et module VBA (La Macro Fonctionne) mais...

Parfois j'ai 150 fichiers, et peux être que je ne vais pas récupérer l'ensemble des module .bas ou usurforme, mais juste ceratain, c'est pour cela que j'avais commencer a voir une métodes pour récupérer les modules et usurformes au cas par cas, via une boucle, le soucis c'est que je ne sais pas paramétrer les variables c'est a à dire :

pour une feuilles ou un classeur (avec set devant) et de plus je sais pas si set (peux prendre un chemin) je m'égare et je m'éloigne je pense. j'avais trouver cette macro et je voulais en faire une boucle pour selectionner uniquement se que j'ai besoins et a ma guise construire un nouveau classeur avec des feuilles et module d'autre classeur (pour pas être figé a un seul classeur uniquement) c'est de lq qu'est partie mon idée :

je vous la met pour exemple (se qui était l'idées des exploratateur source et destination pour intégrer cette macro a une boucle) et paramétrer les variable comme celle-ci:

Sub CopieFeuilleEtModule()
Dim Wbk As Workbook, tmpBas$

'copier la feuille dans un nouveau classeur
Sheets("Info").Copy
Set Wbk = ActiveWorkbook ' c'est une variable Objet qui est sur le classeur actif
' Comment faire pour enregister si pas actif ?
' Avec son chemin ou ? en employant Set

'ajouter le module de code contenant les fonctions
tmpBas1 = "c:\Acopier.bas"
tmpBas2 = "c:\DiversEssaie.bas"
tmpBas3 = "c:\SuiteTest.bas"
tmpBas4 = "c:\TableMultiplication.bas"
tmpBas5 = "c:\TransfertFeuil.bas"
tmpBas6 = "c:\TransfertFeuilEtModule.bas"
tmpBas7 = "c:\Formulaire.frm"
tmpBas8 = "c:\PourTest.frm"
ThisWorkbook.VBProject.VBComponents("Acopier").Export tmpBas1
ThisWorkbook.VBProject.VBComponents("DiversEssaie").Export tmpBas2
ThisWorkbook.VBProject.VBComponents("SuiteTest").Export tmpBas3
ThisWorkbook.VBProject.VBComponents("TableMultiplication").Export tmpBas4
ThisWorkbook.VBProject.VBComponents("TransfertFeuil").Export tmpBas5
ThisWorkbook.VBProject.VBComponents("TransfertFeuilEtModule").Export tmpBas6
ThisWorkbook.VBProject.VBComponents("Formulaire").Export tmpBas7
ThisWorkbook.VBProject.VBComponents("PourTest").Export tmpBas8
Wbk.VBProject.VBComponents.Import tmpBas1 ' Le renvois de Set est ici
Wbk.VBProject.VBComponents.Import tmpBas2
Wbk.VBProject.VBComponents.Import tmpBas3
Wbk.VBProject.VBComponents.Import tmpBas4
Wbk.VBProject.VBComponents.Import tmpBas5
Wbk.VBProject.VBComponents.Import tmpBas6
Wbk.VBProject.VBComponents.Import tmpBas7
Wbk.VBProject.VBComponents.Import tmpBas8
Kill tmpBas1
Kill tmpBas2
Kill tmpBas3
Kill tmpBas4
Kill tmpBas5
Kill tmpBas6
Kill tmpBas7
Kill tmpBas8
End Sub 'fs

C'est se genre de macro que j'aimerais effectuer avec une boucle et paramétrer mais variable avec Set.

J'ai vraiment besoin de cela pour construire diffirents classeur a partire de classeur construit. pour diverses taches différentes

laurent
 

kjin

XLDnaute Barbatruc
Re : Excel Transfert de feuille et module VBA (La Macro Fonctionne) mais...

Bonsoir,
Parfois j'ai 150 fichiers, et peux être que je ne vais pas récupérer l'ensemble des module .bas ou usurforme, mais juste ceratain, c'est pour cela que j'avais commencer a voir une métodes pour récupérer les modules et usurformes au cas par cas, via une boucle
Désolé, mais il y a là une certaine logique qui m'échappe...
C'est se genre de macro que j'aimerais effectuer avec une boucle et paramétrer mais variable avec Set.
Je pense que tu devrais consulter l'aide VBE concernant l'utilisation de l'instruction Set
A+
kjin
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
314 499
Messages
2 110 249
Membres
110 711
dernier inscrit
chmessi