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.
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 '------------------------------------
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" <michdenis@hotmail.com> a écrit dans le message de news:
islk31$21k$1@speranza.aioe.org...
| 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$ba4acef3@reader.news.orange.fr...
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" <michdenis@hotmail.com> a écrit dans le message de news:
islc3v$ago$1@speranza.aioe.org...
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
'------------------------------------
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 '------------------------------------
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
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
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
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
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$1@speranza.aioe.org...
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
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
DanielCo
Alors à part ça, attention à la syntaxe, bien entendu.
??? Daniel
Alors à part ça, attention à la syntaxe, bien entendu.