Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

COPIE MACRO

17 réponses
Avatar
steph b
Bonjour,
je dispose d un fichier excel nommé "porte.xls" qui se trouve sur "c:\" qui
comporte une feuille nommée "PARIS"

dans ce fichier il y 2 module nommés "module21" et "module41"

je voudrais si possible créer un macro qui me copie dans un fichier excel
ouvert la feuille nommée "PARIS" du fichier "porte.xls" à L'IDENTIQUE avec
tous les champs, formats de cellules, boutons etc.... ainsi que les deux
modules nommés "module21" et "module41"

est ce possible?

merci d 'avance

et bien sûr me refermer le fichier "porte.xls" qui se trouve sur "c:\" sans
aucune modification.

7 réponses

1 2
Avatar
steph b
non justement le fichier source n'est pas ouvert mais c est toujours le meme
le fichier source
je savais que j avais mal expliqué ma problematique

désolé

"MichD" a écrit dans le message de news:
islk31$21k$
| Set Wk = Workbooks("Classeur2.xls") 'nom à adapter

| pourtant j'ai bien mis le chemin et le nom du fichier.xls

Qui t'a parlé d'inscrire le chemin ? Ton fichier est déjà ouvert, tu n'as
qu'à inscrire son nom.



MichD
--------------------------------------------
"steph b" a écrit dans le message de groupe de discussion :
4dee4016$0$14665$

dsolé mais ca plante à ce niveau
Set Wk = Workbooks("Classeur2.xls") 'nom à adapter

pourtant j'ai bien mis le chemin et le nom du fichier.xls

"MichD" a écrit dans le message de news:
islc3v$ago$
Comme ceci :

'-------------------------------------
Sub test()
Dim Code1 As String, Code2 As String
Dim Wk As Workbook

'classeur source où sont les données et le code
Set Wk = Workbooks("Classeur2.xls") 'nom à adapter

With Wk
'Copie de la feuille de calcul
.Worksheets("Feuil1").Copy
after:=ThisWorkbook.Worksheets(Worksheets.Count)

'Met dans une variable "String" le code des 2 modules
'adapte le nom des 2 modules que tu veux copier
With .VBProject.VBComponents("Module1").CodeModule
Code1 = .Lines(1, .CountOfLines)
End With
With .VBProject.VBComponents("Module2").CodeModule
Code2 = .Lines(1, .CountOfLines)
End With
End With

With ThisWorkbook.VBProject.VBComponents
With .Add(1) 'Ajout d'un module
With .CodeModule
If .CountOfLines > 0 Then
.DeleteLines 1, .CountOfLines
End If
.AddFromString Code1 'insère le code
End With
End With
With .Add(1)
With .CodeModule
If .CountOfLines > 0 Then
.DeleteLines 1, .CountOfLines
End If
.AddFromString Code2 'insère le code
End With
End With
End With
End Sub
'------------------------------------

MichD
--------------------------------------------




Avatar
MichD
Un dernier commentaire sur ce fil.

Pour ouvrir le fichier au lieu de
Set Wk = Workbooks("Classeur2.xls") 'nom à adapter

Tu écris :
Set Wk = Workbooks.Open("C:Le_cheminClasseur2.xls")
Le_Chemin est justement la location du fichier sur ton disque dur.

MichD
--------------------------------------------
Avatar
steph b
désole mais le code ne marche pas

ca plante a
Worksheets("Feuil1").Copy after:=ThisWorkbook.Worksheets(Worksheets.Count)

et a
With .VBProject.VBComponents("Module1").CodeModule
Code1 = .Lines(1, .CountOfLines)



"MichD" a écrit dans le message de news:
islum0$u5d$
Un dernier commentaire sur ce fil.

Pour ouvrir le fichier au lieu de
Set Wk = Workbooks("Classeur2.xls") 'nom à adapter

Tu écris :
Set Wk = Workbooks.Open("C:Le_cheminClasseur2.xls")
Le_Chemin est justement la location du fichier sur ton disque dur.

MichD
--------------------------------------------

Avatar
MichD
Bien sûr que ça plante !!!!!!!!!!!!!!!!!!!

Si tu prenais le temps de modifier le nom les objets utilisés dans la macro
par le nom des objets dans ton environnement.

Je ne suis pas devin, je ne peux pas savoir comment s'appelle ta "Feuil1"
et quel est le nom de tes 2 modules........................................

Ici, dans ce forum c'est un service d'entraide, il faut quand même faire un minimum d'effort pour comprendre les
solutions proposées.


MichD
--------------------------------------------

"steph b" a écrit dans le message de groupe de discussion : 4def3be4$0$14683$

désole mais le code ne marche pas

ca plante a
Worksheets("Feuil1").Copy after:=ThisWorkbook.Worksheets(Worksheets.Count)

et a
With .VBProject.VBComponents("Module1").CodeModule
Code1 = .Lines(1, .CountOfLines)



"MichD" a écrit dans le message de news:
islum0$u5d$
Un dernier commentaire sur ce fil.

Pour ouvrir le fichier au lieu de
Set Wk = Workbooks("Classeur2.xls") 'nom à adapter

Tu écris :
Set Wk = Workbooks.Open("C:Le_cheminClasseur2.xls")
Le_Chemin est justement la location du fichier sur ton disque dur.

MichD
--------------------------------------------

Avatar
Gloops
Ouaip, dans le principe. Il va bien finir par y avoir un peu d'écho :)

Alors à signaler, quand on veut créer un module par code, il faut coc her
la case qui dit qu'on accorde la confiance au projet VB. C'est comment
déjà, la commande qui l'ouvre ? Outils / Macros / Sécurité ?
Et il faut aller dans le deuxième onglet, si je me rappelle bien ?

Alors à part ça, attention à la syntaxe, bien entendu.

_______________________________________
DanielCo a écrit, le 07/06/2011 14:30 :
Bonjour,
Essaie :
Sub test()
Workbooks.Open "c:porte.xls"
Set SourceWB = ActiveWorkbook
Set CibleWB = ThisWorkbook
Sheets("PARIS").Copy Before:=Workbooks("porte.xls").Sheets(1)
FichTemp = "d:donneesdanielmpfe~tmpexport.bas"
On Error Resume Next
NomModule = "Module21"
SourceWB.VBProject.VBComponents(NomModule).Export FichTemp
CibleWB.VBProject.VBComponents.Import FichTemp
Kill FichTemp
NomModule = "Module41"
SourceWB.VBProject.VBComponents(NomModule).Export FichTemp
CibleWB.VBProject.VBComponents.Import FichTemp
Kill FichTemp
On Error GoTo 0
ActiveWorkbook.Close False
End Sub
Cordialement.
Daniel
Avatar
MichD
Bonjour,

Pour Excel 2003, pour cocher les 2 cases dans la fenêtre "Éditeurs approuvés"
dans le chemin : barre des menus / outils / macro / sécurité / il n'existe pas
de commande VBA pour atteindre ces 2 cases à cocher, mais on peut le faire
en utilisant un vbscript et modifier directement la base de registre.

Un exemple pour Excel 2003 (peut-être aussi 2002)
Copier ce qui suit dans un fichier NotePad et l'enregistrer en lui donnant
l'extension .vbs

Pour les versions plus récentes d'Excel, je n'ai pas fait de vérification!

'-------------------------------------------
On Error Resume Next
Set objXl=GetObject(,"Excel.Application")
If Not IsEmpty(objXl) Then
Msgbox "Fermer excel pour exécuter ce scr1pt...",64,"La direction"
WScript.Quit
else
Set objxl=createobject("Excel.Application")
Ver = objxl.Version
set objxl = nothing
End If
Err.Clear


Set wsh = WScript.CreateObject("WScript.Shell")

'Niveau de sécurité 2 pour 2ième niveau
wsh.RegWrite "HKCUSoftwareMicrosoftOffice" & _
Ver & "ExcelSecurityLevel",2,"REG_DWORD"

if ver >= 10 then
'Faire confiance au projet VBA -> 1 pour que la case soit cochée
' -> 0 pour que la case soit décochée
wsh.RegWrite "HKCUSoftwareMicrosoftOffice" & _
Ver & "ExcelSecurityaccessVBOM",1,"REG_DWORD"

'Faire confiance au modèle -> 0 pour que la case soit cochée
' -> 1 pour que la case soit décochée
wsh.RegWrite "HKCUSoftwareMicrosoftOffice" & _
Ver & "ExcelSecurityDontTrustInstalledFiles",0,"REG_DWORD"
end if
'-------------------------------------------


MichD
--------------------------------------------
"Gloops" a écrit dans le message de groupe de discussion : isoh1n$vm$

Ouaip, dans le principe. Il va bien finir par y avoir un peu d'écho :)

Alors à signaler, quand on veut créer un module par code, il faut cocher
la case qui dit qu'on accorde la confiance au projet VB. C'est comment
déjà, la commande qui l'ouvre ? Outils / Macros / Sécurité ?
Et il faut aller dans le deuxième onglet, si je me rappelle bien ?

Alors à part ça, attention à la syntaxe, bien entendu.

_______________________________________
DanielCo a écrit, le 07/06/2011 14:30 :
Bonjour,
Essaie :
Sub test()
Workbooks.Open "c:porte.xls"
Set SourceWB = ActiveWorkbook
Set CibleWB = ThisWorkbook
Sheets("PARIS").Copy Before:=Workbooks("porte.xls").Sheets(1)
FichTemp = "d:donneesdanielmpfe~tmpexport.bas"
On Error Resume Next
NomModule = "Module21"
SourceWB.VBProject.VBComponents(NomModule).Export FichTemp
CibleWB.VBProject.VBComponents.Import FichTemp
Kill FichTemp
NomModule = "Module41"
SourceWB.VBProject.VBComponents(NomModule).Export FichTemp
CibleWB.VBProject.VBComponents.Import FichTemp
Kill FichTemp
On Error GoTo 0
ActiveWorkbook.Close False
End Sub
Cordialement.
Daniel
Avatar
DanielCo
Alors à part ça, attention à la syntaxe, bien entendu.



???
Daniel
1 2