OVH Cloud OVH Cloud

export/import

30 réponses
Avatar
sabatier
bonjour,
je me livre aux douces joies de l'importationnement de modules après
exportationnage d'iceux....
pour un module standard, *Fichier/Exporter un fichier* crée un .bas et no
problemo pour l'importer
par contre, pour le module ThisWorkbook, c'est moins sympa car
*Fichier/Exporter un fichier* crée un .cls et à l'importation dans l'autre
classeur, c'est un ThisWorkbook1 qui va s'ajouter et non le ThisWorkbook, le
seul, le vrai, l'authentique, qui va recevoir la procédure importer...du
coup, c'est moi qui fais une drôle de tête de clone car je me pose la
question de savoir ce qui va se passer ensuite...
si quelque bonne volonté aoûtienne peut m'en dire plus sur ce phénomène...un
grand merci par avance
jps

10 réponses

1 2 3
Avatar
sabatier
te absolvo, docm
vade in pace...
jps

"docm" a écrit dans le message de
news:%

Mea culpa...jps.



Avatar
sabatier
ah! verstanden, docm...merci et tu as bien fait d'enfoncer le clou car je
n'avais pas compris ce qu'avait voulu dire michel P (P de Pierron, pas de
Péroche, l'homme qui s'accroche mais bien Pierron, l'homme qui vaut des
ronds) à ce sujet...
jps

"docm" a écrit dans le message de
news:
Bonjour jps.

Il ne faut nommer "CopyCode" que le module contenant le code de cpearson
afin de protéger les procédures qu'il contient et qui sont en cours
d'exécution.



"jps" wrote in message
news:#
merci, michel (pas denis) mais bouhhhhhhhhhhh que tout cela est bien
trop


ardu pour moi....
tu dis renommer "le" module dans lequel se trouve les procs à copier (si
je

comprends bien) mais s'il y en a plusieurs à copier (importer?), ils
auront

tous le même nom dans la nouvelle arborescence de VBE?
mais tu es d'accord avec moi que celui qui a le malheur de lancer cette
proc

"kill" tous les modules existant dans son VBE ou non?
j'en frémis encore telle l'eau dans laquelle cuit la saucisse de
moreteau


jps

"Michel Pierron" a écrit dans le message de
news:
Bonjour JPS;
En effet, il ne faut pas avoir oublier de renommer le module dans
lequel



se
trouve les procédures de copie en CopyCode sinon, ce module sera
effacé



au
même titre que tout le reste. La référence à "Microsoft Visual basic
for



applications Extensibility 5.3" n'est pas nécessaire si tu modifies
ainsi


les procédures:
Sub Copies()
If ActiveWorkbook.Path = "" Then
MsgBox "Veuillez sauvegarder le présent classeur "
Application.Dialogs(xlDialogSaveWorkbook).Show
End If
TargetF = ActiveWorkbook.Name
If Right(TargetF, 4) <> ".xls" Then TargetF = TargetF & ".xls"
SourceP = InputBox("Répertoire de la source", ,
Application.DefaultFilePath)

If SourceP = "" Then Exit Sub
1: SourceF = InputBox("Nom du fichier source", , "Classeur1.xls")
If SourceF = "" Then Exit Sub
If Dir(SourceP & "" & SourceF) = "" Then
MsgBox "Fichier " & SourceF & " non trouvé !", 64
GoTo 1
End If
On Error Resume Next
Workbooks(SourceF).Activate
If Err Then Workbooks.Open SourceP & "" & SourceF
On Error GoTo 0
If ActiveWorkbook.VBProject.Protection Then
MsgBox "Le projet de " & ActiveWorkbook.Name & " est protégé !", 64
Exit Sub
End If
Workbooks(TargetF).Activate
CopyModules TargetF, SourceF, SourceP
End Sub

Sub CopyModules(TargetF, SourceF, SourceP)
DeleteAllVBA
CopyAllModules SourceF, TargetF
CopySheetCode SourceF, TargetF, "ThisWorkbook"
With Workbooks(SourceF)
For i = 1 To .Worksheets.Count
CopySheetCode SourceF, TargetF, .Worksheets(i).CodeName
Next i
End With
End Sub

Private Sub DeleteAllVBA()
Dim VBComp As Object
With ActiveWorkbook.VBProject
For Each VBComp In .VBComponents
' Skip module containing copycode
If Not VBComp.Name = "CopyCode" Then
Select Case VBComp.Type
Case 1 To 3: .VBComponents.Remove VBComp
Case Else
With VBComp.CodeModule
.DeleteLines 1, .CountOfLines
End With
End Select
End If
Next VBComp
End With
End Sub

Sub CopyAllModules(SourceF, TargetF)
Dim FName As String
Dim VBComp As Object
With Workbooks(SourceF)
FName = .Path & "code.txt"
If Dir(FName) <> "" Then Kill FName
For Each VBComp In .VBProject.VBComponents
If VBComp.Type <> 100 Then
VBComp.Export FName
Workbooks(TargetF).VBProject.VBComponents.Import FName
Kill FName
End If
Next VBComp
End With
End Sub

Sub CopySheetCode(SourceF, TargetF, ShName)
Set C = Workbooks(SourceF).VBProject.VBComponents.Item(ShName)
NumLines = C.CodeModule.CountOfLines
For i = 1 To NumLines
strcode = strcode & C.CodeModule.Lines(i, 1) & vbCr
Next
Set C = Workbooks(TargetF).VBProject.VBComponents.Item(ShName)
On Error Resume Next
C.CodeModule.AddFromString (strcode)
End Sub

MP

"sabatier" a écrit dans le
message

de news:
bonjour docm, bonjour denis, allez debout les québécois (vous
pourriez




bien
vous lever à une heure où chrisV n'est pas encore couché, non?)
merci d'avoir su trouver cette proc de CPearson qui, soit dit au
passage,


doit être un monsieur hyper-méticuleux : il envisage, avec son

If ActiveWorkbook.Path = "" Then
MsgBox "Veuillez sauvegarder le présent classeur "
Application.Dialogs(xlDialogSaveWorkbook).Show
End If

le cas, fort rare AMHA, où quelque fou aurait pondu des modules dans
un



classeur NON enregistré ("mais imaginons" comme dirait Bigard dans
son




sketch de la chauve-souris dont la morsure est mortelle dans un cas
sur



10
millions)...
merci aussi à...michel dont vous noterez, toujours au passage, le
sens




inné
de la médisance, d'avoir rappeler la référence de la bibliothèque à
ajouter...
malgré ma g...d.b..., je me suis beaucoup intéressé à ces
procs...jusqu'au


moment où j'ai lu avec effroi "DeleteAllVBA" : il n'est pas encore





celui
qui, à l'insu de mon plein gré, voudrait faire péter mon usine à
gaz,




fût-il
l'honorable CPearson ; je ne m'appelle pas michel P, moi et à mes
boutons,


je m'y attache, comme disait ma grand'mère avant qu'elle ne
connaisse




la
restauration des systèmes...
ceci mis à part, je me demande pourquoi ce même CPearson skippe les
modules

dont le nom serait (ou incluerait?) "CopyCode" : je ne vois nulle
part




que
la proc donne ce nom aux modules copiés dont on peut comprendre
qu'il




ne
soit pas utile de les copier une nouvelle fois....
après tout, je suis peut-être complètement à côté de la plaque mais
j'ai



confiance dans le québec d'où jaillira certainement une nouvelle
fois




la
lumière...quand le jour aura baigné de la sienne la belle province
('tain,


pour un épilogue, ça c'est un épilogue mais cessez d'applaudir quand
même)


jps

"docm" a écrit dans le message de
news:uhm$
Bonjour jps.

Si je n'ai pas la berlue, le code suivant (de cpearson) permet
d'importer


le
code de tous les modules ainsi que celui de ThisWorkbook et des
feuilles



choisies.
Est-ce possible?

Sub Copies()
If ActiveWorkbook.Path = "" Then
MsgBox "Veuillez sauvegarder le présent classeur "
Application.Dialogs(xlDialogSaveWorkbook).Show
End If
TargetF = ActiveWorkbook.Name
If Right(TargetF, 4) <> ".xls" Then TargetF = TargetF & ".xls"
SourceP = InputBox("Répertoire de la source", , "C:mes
documents")



SourceF = InputBox("Nom du fichier source", , "classeur1.xls")
Workbooks.Open SourceP & "" & SourceF
Workbooks(TargetF).Activate
CopyModules TargetF, SourceF, SourceP

End Sub



Sub CopyModules(TargetF, SourceF, SourceP)

DeleteAllVBA
CopyAllModules SourceF, TargetF
CopySheetCode SourceF, TargetF, "ThisWorkbook"
CopySheetCode SourceF, TargetF, "Feuil3"

End Sub
Sub DeleteAllVBA()
Dim VBComp As VBIDE.VBComponent
Dim VBComps As VBIDE.VBComponents

Set VBComps = ActiveWorkbook.VBProject.VBComponents
For Each VBComp In VBComps

'Skip module containing copycode
If VBComp.Name = "CopyCode" Then GoTo NextOne
Select Case VBComp.Type
Case vbext_ct_StdModule, vbext_ct_MSForm, _
vbext_ct_ClassModule
VBComps.Remove VBComp
Case Else
With VBComp.CodeModule
.DeleteLines 1, .CountOfLines
End With
End Select
NextOne:
Next VBComp

End Sub

Sub CopyAllModules(SourceF, TargetF)
Dim FName As String
Dim VBComp As VBIDE.VBComponent

With Workbooks(SourceF)
FName = .Path & "code.txt"
If Dir(FName) <> "" Then
Kill FName
End If
For Each VBComp In .VBProject.VBComponents
If VBComp.Type <> vbext_ct_Document Then
VBComp.Export FName
Workbooks(TargetF).VBProject.VBComponents.Import FName
Kill FName
End If
Next VBComp
End With

End Sub

Sub CopySheetCode(SourceF, TargetF, ShName)
Set C = Workbooks(SourceF).VBProject.VBComponents.Item(ShName)
NumLines = C.CodeModule.CountOfLines
For i = 1 To NumLines
strcode = strcode & C.CodeModule.Lines(i, 1) & vbCr
Next

Set C = Workbooks(TargetF).VBProject.VBComponents.Item(ShName)
On Error Resume Next
C.CodeModule.AddFromString (strcode)
End Sub



"sabatier" wrote in
message




news:#
waouh....et j'ai lu jusqu'au bout puisque c'est quand même moi
qui






avais
posé la question : je n'aurais jamais du...où avais-je encore la
tête




à
ce
moment-là?
enfin, merci, denis, pour ces autres esseuplications...ça sent
la






.cls
et
le
titre de MVP, non?... j'ai failli suggérer à misange qu'elle
mette






ton
texte
sur excelabo, mais j'ai peur qu'elle ne fasse pas recette...
bon samedi à toi aussi, denis
jps

"michdenis" a écrit dans le message de
news:
Bonjour JPS,

Ce n'est pas une quetion pour un samedi... ni pour un autre
jour







de
la
semaine ! ;-)

CLS = Extension de fichier signifiant : Code Language
Specification





Cette extension de fichier est apparu avec la version 4 de
Visual






basic
(Le Programme) pour désigner un module de classe.

Ce que tu as observé avec Le "ThisWorkbook" est aussi présent
dans






le
cas
d'un import-export du code des "Feuil". Et la
raison, ce sont des modules de classes contrairement au module
standard



(fichier .bas) Concernant les formulaires,
l'extension du fichier export est .Frm (abréviation pour
formulaire).




Dans
ce cas, c'est un peu différent car il y a l'objet
lui-même(formulaire) qui est exporté et importé par la suite
...avec





tout
son contenu ! )

Dans excel, un module de classe sert à définir les propriétés,
les






méthodes et les événements d'une classe spécifique
d'objets. Par exemple, si tu désires définir un comportement
particulier



pour un groupe de boutons de commande, le nom que tu
donnes au module de classe représente en même temps, un nouvel
objet





et
une nouvelle classe d'objet. Dans ce module,, tu
insèrera le code particulier à cette nouvelle classe d'objet.
Le







nom
du
module de classe désigne à la fois le nouvel objet et
la nouvelle classe de l'objet. Mais attention, le module de
classe





ne
crée pas de "nouveaux boutons de commande" mais une
nouvelle classe d'objet ayant ses propres spécifications
contenu







dans
son
module. Le nouvel objet créé sera présent seulement
au moment de l'instantiation de ce dernier avec le mot clé
"New"








dans
le
code.
Dim JPS As New Toto (toto étant le nom du module de classe)

L'exportation et l'importation d'un module de classe (fichier
.cls)





par
les commandes du menu de la fenêtre VBE, correspond
essentiellement au code de l'objet "Feuil" ou de l'objet
"ThisWorkbook"



qui eux, sont créés par l'application Excel. Dans
excel, le module de classe ne crée lui-même l'objet "Feuil" ou
"ThisWorkbook" au sens où on les voit dans la fenêtre du

projet VBE. Il ne peut pas en conséquence, exporter ou
importer







un
"objet
physique" mais seulement le code associé à cet
objet.

Pour conserver le code d'un module de classe, l'ami Frédéric
Sigonneau




a
créé ceci : Une procédure qui copie le texte du
module de classe dans un fichier texte.

'========================= > > > > > > > Sub test()
WriteModuleToTextFile "ThisWorkbook"
End Sub
'========================= > > > > > > > Sub WriteModuleToTextFile(NomModule$)
Dim FSO As Object
Dim Obj As Object
Dim Txt As Object
Dim Contenu$

Set Obj > > > ThisWorkbook.VBProject.VBComponents(NomModule).CodeModule
Contenu = Obj.Lines(1, Obj.CountOfLines)

Set FSO = CreateObject("Scripting.FileSystemObject")

Set Txt = FSO.OpenTextFile("d:" & NomModule & ".txt", 2,
True)






Txt.Write Contenu
Txt.Close
End Sub 'fs
'========================= > > > > > > >

Et si tu veux récupérer le code du fichier créer et l'insérer
dans






un
module particulier, tu peux utiliser ceci :

'----------------------
With ThisWorkbook
.VBProject.VBComponents("Feuil1").CodeModule.AddFromFile
"c:Feuil1.txt"

End With
'----------------------

Tu remplaces "Feuil1" par le nom du module désiré entre
guillemets






"c:excelFeuil1.txt" est le chemin et le nom du fichier créé
par






la
procédure de Frédéric.


Si tu as procédé manuellement à l'exportation, l'extension de
ton






fichier
est .Cls, et si tu désires récupérer le code du
fichier .cls, avec la procédure (3 lignes) soumise de
récupération,





le
module de classe ("l'objet physique") de destination
devra être déjà présent et il devra aussi avoir même nom que
le







module
de
classe d'origine, sinon, il remplacera le module de
classe ("l'objet physique") de destination par le module de
classe






d'origine (code seulement) et ce n'est pas habituellement
ce qui est désiré... dans excel. De plus, il se permettra
d'ajouter





ces
lignes de code en début du module de destination
qu'il faudrait enlever par quelques lignes de code
supplémentaire.






VERSION 1.0 CLASS
BEGIN
MultiUse = -1 'True
End


Salutations !

P.S. Bon samedi quand même !!!




"sabatier" a écrit
dans






le
message de
news:ue%
bonjour,
je me livre aux douces joies de l'importationnement de modules
après





exportationnage d'iceux....
pour un module standard, *Fichier/Exporter un fichier* crée un
.bas





et
no
problemo pour l'importer
par contre, pour le module ThisWorkbook, c'est moins sympa car
*Fichier/Exporter un fichier* crée un .cls et à l'importation
dans






l'autre
classeur, c'est un ThisWorkbook1 qui va s'ajouter et non le
ThisWorkbook,


le
seul, le vrai, l'authentique, qui va recevoir la procédure
importer...du



coup, c'est moi qui fais une drôle de tête de clone car je me
pose






la
question de savoir ce qui va se passer ensuite...
si quelque bonne volonté aoûtienne peut m'en dire plus sur ce
phénomène...un

grand merci par avance
jps




























Avatar
sabatier
bonjour michel Pi, bonjour docm
ben moi, j'ai testé et viens de me donner la trouille de ma vie : pas moyen
d'enregistrer un fichier modèle avec la proc Pearson 39 modifiée Pierron
45....alerte virale...bloodhoundmacro, que ça disait...document non
enregistré...et mon pote alsacien qui ne cessait de me dire "tous nos
brochets sont détruites"...mais je m'appelle pas michel Pé, moi ; je ne me
suis pas précipité sur le forum en poussant des cries d'orfraie, voire de
misange...ah que non, je suis allé rendre visite à mes autres potes de
symantec et hop, niveau de sécurité au plus bas....sacré C Pearson,
va...tout ça parce qu'il y a un "kill" dans sa macro, je suppose...
enfin, michel, pour ton info, je te précise que si on met en comments le
DeleteAllVBA et qu'on superpose divers classeurs source dans le même
classeur destination, s'il y a plusieurs Module1, le second qui sera copié
deviendra Module11 mais je ne suis pas allé plus loin pour voir ce qu'il en
était d'un troisième...
il n'empêche que je te remercie, docm, d'avoir donné cette proc qui peut
être d'un grand secours en cas de transhumance...
merci encore
jps

"Michel Pierron" a écrit dans le message de
news:
Bonjour docm;
Oui, tu as raison, j'ai loupé celle la; il suffit de remonter d'une ligne
On

Error Resume Next, sinon il faut créer ou copier la feuille.
Comme quoi, j'aurais du tester...
MP

"docm" a écrit dans le message de
news:
Bonjour Michel Pierron.

Avant d'éxécuter
Set C = Workbooks(TargetF).VBProject.VBComponents.Item(ShName)
je crois qu'il serait judicieux de vérifier qu'une feuille ShName existe
dans le classeur destination.



"Michel Pierron" wrote in message
news:#
Re Jean-Paul;
Autre chose importante, rajouter une instruction pour sauver le
fichier



après importation des modules car si l'on ferme Excel et qu'une
instruction

astucieuse telle que:
ThisWorkbook.Saved = True ou ThisWorkbook.Close False se trouve dans
la



procédure importé ThisWorkbook_BeforeClose, basta le boulot.
MP

"sabatier" a écrit dans le
message

de news:
bonjour docm, bonjour denis, allez debout les québécois (vous
pourriez




bien
vous lever à une heure où chrisV n'est pas encore couché, non?)
merci d'avoir su trouver cette proc de CPearson qui, soit dit au
passage,


doit être un monsieur hyper-méticuleux : il envisage, avec son

If ActiveWorkbook.Path = "" Then
MsgBox "Veuillez sauvegarder le présent classeur "
Application.Dialogs(xlDialogSaveWorkbook).Show
End If

le cas, fort rare AMHA, où quelque fou aurait pondu des modules dans
un



classeur NON enregistré ("mais imaginons" comme dirait Bigard dans
son




sketch de la chauve-souris dont la morsure est mortelle dans un cas
sur



10
millions)...
merci aussi à...michel dont vous noterez, toujours au passage, le
sens




inné
de la médisance, d'avoir rappeler la référence de la bibliothèque à
ajouter...
malgré ma g...d.b..., je me suis beaucoup intéressé à ces
procs...jusqu'au


moment où j'ai lu avec effroi "DeleteAllVBA" : il n'est pas encore





celui
qui, à l'insu de mon plein gré, voudrait faire péter mon usine à
gaz,




fût-il
l'honorable CPearson ; je ne m'appelle pas michel P, moi et à mes
boutons,


je m'y attache, comme disait ma grand'mère avant qu'elle ne
connaisse




la
restauration des systèmes...
ceci mis à part, je me demande pourquoi ce même CPearson skippe les
modules

dont le nom serait (ou incluerait?) "CopyCode" : je ne vois nulle
part




que
la proc donne ce nom aux modules copiés dont on peut comprendre
qu'il




ne
soit pas utile de les copier une nouvelle fois....
après tout, je suis peut-être complètement à côté de la plaque mais
j'ai



confiance dans le québec d'où jaillira certainement une nouvelle
fois




la
lumière...quand le jour aura baigné de la sienne la belle province
('tain,


pour un épilogue, ça c'est un épilogue mais cessez d'applaudir quand
même)


jps

"docm" a écrit dans le message de
news:uhm$
Bonjour jps.

Si je n'ai pas la berlue, le code suivant (de cpearson) permet
d'importer


le
code de tous les modules ainsi que celui de ThisWorkbook et des
feuilles



choisies.
Est-ce possible?

Sub Copies()
If ActiveWorkbook.Path = "" Then
MsgBox "Veuillez sauvegarder le présent classeur "
Application.Dialogs(xlDialogSaveWorkbook).Show
End If
TargetF = ActiveWorkbook.Name
If Right(TargetF, 4) <> ".xls" Then TargetF = TargetF & ".xls"
SourceP = InputBox("Répertoire de la source", , "C:mes
documents")



SourceF = InputBox("Nom du fichier source", , "classeur1.xls")
Workbooks.Open SourceP & "" & SourceF
Workbooks(TargetF).Activate
CopyModules TargetF, SourceF, SourceP

End Sub



Sub CopyModules(TargetF, SourceF, SourceP)

DeleteAllVBA
CopyAllModules SourceF, TargetF
CopySheetCode SourceF, TargetF, "ThisWorkbook"
CopySheetCode SourceF, TargetF, "Feuil3"

End Sub
Sub DeleteAllVBA()
Dim VBComp As VBIDE.VBComponent
Dim VBComps As VBIDE.VBComponents

Set VBComps = ActiveWorkbook.VBProject.VBComponents
For Each VBComp In VBComps

'Skip module containing copycode
If VBComp.Name = "CopyCode" Then GoTo NextOne
Select Case VBComp.Type
Case vbext_ct_StdModule, vbext_ct_MSForm, _
vbext_ct_ClassModule
VBComps.Remove VBComp
Case Else
With VBComp.CodeModule
.DeleteLines 1, .CountOfLines
End With
End Select
NextOne:
Next VBComp

End Sub

Sub CopyAllModules(SourceF, TargetF)
Dim FName As String
Dim VBComp As VBIDE.VBComponent

With Workbooks(SourceF)
FName = .Path & "code.txt"
If Dir(FName) <> "" Then
Kill FName
End If
For Each VBComp In .VBProject.VBComponents
If VBComp.Type <> vbext_ct_Document Then
VBComp.Export FName
Workbooks(TargetF).VBProject.VBComponents.Import FName
Kill FName
End If
Next VBComp
End With

End Sub

Sub CopySheetCode(SourceF, TargetF, ShName)
Set C = Workbooks(SourceF).VBProject.VBComponents.Item(ShName)
NumLines = C.CodeModule.CountOfLines
For i = 1 To NumLines
strcode = strcode & C.CodeModule.Lines(i, 1) & vbCr
Next

Set C = Workbooks(TargetF).VBProject.VBComponents.Item(ShName)
On Error Resume Next
C.CodeModule.AddFromString (strcode)
End Sub



"sabatier" wrote in
message




news:#
waouh....et j'ai lu jusqu'au bout puisque c'est quand même moi
qui






avais
posé la question : je n'aurais jamais du...où avais-je encore la
tête




à
ce
moment-là?
enfin, merci, denis, pour ces autres esseuplications...ça sent
la






.cls
et
le
titre de MVP, non?... j'ai failli suggérer à misange qu'elle
mette






ton
texte
sur excelabo, mais j'ai peur qu'elle ne fasse pas recette...
bon samedi à toi aussi, denis
jps

"michdenis" a écrit dans le message de
news:
Bonjour JPS,

Ce n'est pas une quetion pour un samedi... ni pour un autre
jour







de
la
semaine ! ;-)

CLS = Extension de fichier signifiant : Code Language
Specification





Cette extension de fichier est apparu avec la version 4 de
Visual






basic
(Le Programme) pour désigner un module de classe.

Ce que tu as observé avec Le "ThisWorkbook" est aussi présent
dans






le
cas
d'un import-export du code des "Feuil". Et la
raison, ce sont des modules de classes contrairement au module
standard



(fichier .bas) Concernant les formulaires,
l'extension du fichier export est .Frm (abréviation pour
formulaire).




Dans
ce cas, c'est un peu différent car il y a l'objet
lui-même(formulaire) qui est exporté et importé par la suite
...avec





tout
son contenu ! )

Dans excel, un module de classe sert à définir les propriétés,
les






méthodes et les événements d'une classe spécifique
d'objets. Par exemple, si tu désires définir un comportement
particulier



pour un groupe de boutons de commande, le nom que tu
donnes au module de classe représente en même temps, un nouvel
objet





et
une nouvelle classe d'objet. Dans ce module,, tu
insèrera le code particulier à cette nouvelle classe d'objet.
Le







nom
du
module de classe désigne à la fois le nouvel objet et
la nouvelle classe de l'objet. Mais attention, le module de
classe





ne
crée pas de "nouveaux boutons de commande" mais une
nouvelle classe d'objet ayant ses propres spécifications
contenu







dans
son
module. Le nouvel objet créé sera présent seulement
au moment de l'instantiation de ce dernier avec le mot clé
"New"







dans
le
code.
Dim JPS As New Toto (toto étant le nom du module de classe)

L'exportation et l'importation d'un module de classe (fichier
.cls)





par
les commandes du menu de la fenêtre VBE, correspond
essentiellement au code de l'objet "Feuil" ou de l'objet
"ThisWorkbook"



qui eux, sont créés par l'application Excel. Dans
excel, le module de classe ne crée lui-même l'objet "Feuil" ou
"ThisWorkbook" au sens où on les voit dans la fenêtre du

projet VBE. Il ne peut pas en conséquence, exporter ou
importer







un
"objet
physique" mais seulement le code associé à cet
objet.

Pour conserver le code d'un module de classe, l'ami Frédéric
Sigonneau




a
créé ceci : Une procédure qui copie le texte du
module de classe dans un fichier texte.

'========================= > > > > > > > Sub test()
WriteModuleToTextFile "ThisWorkbook"
End Sub
'========================= > > > > > > > Sub WriteModuleToTextFile(NomModule$)
Dim FSO As Object
Dim Obj As Object
Dim Txt As Object
Dim Contenu$

Set Obj > > > ThisWorkbook.VBProject.VBComponents(NomModule).CodeModule
Contenu = Obj.Lines(1, Obj.CountOfLines)

Set FSO = CreateObject("Scripting.FileSystemObject")

Set Txt = FSO.OpenTextFile("d:" & NomModule & ".txt", 2,
True)






Txt.Write Contenu
Txt.Close
End Sub 'fs
'========================= > > > > > > >

Et si tu veux récupérer le code du fichier créer et l'insérer
dans






un
module particulier, tu peux utiliser ceci :

'----------------------
With ThisWorkbook
.VBProject.VBComponents("Feuil1").CodeModule.AddFromFile
"c:Feuil1.txt"

End With
'----------------------

Tu remplaces "Feuil1" par le nom du module désiré entre
guillemets






"c:excelFeuil1.txt" est le chemin et le nom du fichier créé
par






la
procédure de Frédéric.


Si tu as procédé manuellement à l'exportation, l'extension de
ton






fichier
est .Cls, et si tu désires récupérer le code du
fichier .cls, avec la procédure (3 lignes) soumise de
récupération,





le
module de classe ("l'objet physique") de destination
devra être déjà présent et il devra aussi avoir même nom que
le







module
de
classe d'origine, sinon, il remplacera le module de
classe ("l'objet physique") de destination par le module de
classe






d'origine (code seulement) et ce n'est pas habituellement
ce qui est désiré... dans excel. De plus, il se permettra
d'ajouter





ces
lignes de code en début du module de destination
qu'il faudrait enlever par quelques lignes de code
supplémentaire.






VERSION 1.0 CLASS
BEGIN
MultiUse = -1 'True
End


Salutations !

P.S. Bon samedi quand même !!!




"sabatier" a écrit
dans






le
message de
news:ue%
bonjour,
je me livre aux douces joies de l'importationnement de modules
après





exportationnage d'iceux....
pour un module standard, *Fichier/Exporter un fichier* crée un
.bas





et
no
problemo pour l'importer
par contre, pour le module ThisWorkbook, c'est moins sympa car
*Fichier/Exporter un fichier* crée un .cls et à l'importation
dans






l'autre
classeur, c'est un ThisWorkbook1 qui va s'ajouter et non le
ThisWorkbook,


le
seul, le vrai, l'authentique, qui va recevoir la procédure
importer...du



coup, c'est moi qui fais une drôle de tête de clone car je me
pose






la
question de savoir ce qui va se passer ensuite...
si quelque bonne volonté aoûtienne peut m'en dire plus sur ce
phénomène...un

grand merci par avance
jps




























Avatar
docm
in nomine Patris et Filii et Spiritus jpSancti

"sabatier" wrote in message
news:u$#
te absolvo, docm
vade in pace...
jps

"docm" a écrit dans le message de
news:%

Mea culpa...jps.







Avatar
docm
mit Vergnügen, jps

"sabatier" wrote in message
news:
ah! verstanden, docm...merci et tu as bien fait d'enfoncer le clou car je
n'avais pas compris ce qu'avait voulu dire michel P (P de Pierron, pas de
Péroche, l'homme qui s'accroche mais bien Pierron, l'homme qui vaut des
ronds) à ce sujet...
jps

"docm" a écrit dans le message de
news:
Bonjour jps.

Il ne faut nommer "CopyCode" que le module contenant le code de
cpearson


afin de protéger les procédures qu'il contient et qui sont en cours
d'exécution.



"jps" wrote in message
news:#
merci, michel (pas denis) mais bouhhhhhhhhhhh que tout cela est bien
trop


ardu pour moi....
tu dis renommer "le" module dans lequel se trouve les procs à copier
(si



je
comprends bien) mais s'il y en a plusieurs à copier (importer?), ils
auront

tous le même nom dans la nouvelle arborescence de VBE?
mais tu es d'accord avec moi que celui qui a le malheur de lancer
cette



proc
"kill" tous les modules existant dans son VBE ou non?
j'en frémis encore telle l'eau dans laquelle cuit la saucisse de
moreteau


jps

"Michel Pierron" a écrit dans le message de
news:
Bonjour JPS;
En effet, il ne faut pas avoir oublier de renommer le module dans
lequel



se
trouve les procédures de copie en CopyCode sinon, ce module sera
effacé



au
même titre que tout le reste. La référence à "Microsoft Visual basic
for



applications Extensibility 5.3" n'est pas nécessaire si tu modifies
ainsi


les procédures:
Sub Copies()
If ActiveWorkbook.Path = "" Then
MsgBox "Veuillez sauvegarder le présent classeur "
Application.Dialogs(xlDialogSaveWorkbook).Show
End If
TargetF = ActiveWorkbook.Name
If Right(TargetF, 4) <> ".xls" Then TargetF = TargetF & ".xls"
SourceP = InputBox("Répertoire de la source", ,
Application.DefaultFilePath)

If SourceP = "" Then Exit Sub
1: SourceF = InputBox("Nom du fichier source", , "Classeur1.xls")
If SourceF = "" Then Exit Sub
If Dir(SourceP & "" & SourceF) = "" Then
MsgBox "Fichier " & SourceF & " non trouvé !", 64
GoTo 1
End If
On Error Resume Next
Workbooks(SourceF).Activate
If Err Then Workbooks.Open SourceP & "" & SourceF
On Error GoTo 0
If ActiveWorkbook.VBProject.Protection Then
MsgBox "Le projet de " & ActiveWorkbook.Name & " est protégé !", 64
Exit Sub
End If
Workbooks(TargetF).Activate
CopyModules TargetF, SourceF, SourceP
End Sub

Sub CopyModules(TargetF, SourceF, SourceP)
DeleteAllVBA
CopyAllModules SourceF, TargetF
CopySheetCode SourceF, TargetF, "ThisWorkbook"
With Workbooks(SourceF)
For i = 1 To .Worksheets.Count
CopySheetCode SourceF, TargetF, .Worksheets(i).CodeName
Next i
End With
End Sub

Private Sub DeleteAllVBA()
Dim VBComp As Object
With ActiveWorkbook.VBProject
For Each VBComp In .VBComponents
' Skip module containing copycode
If Not VBComp.Name = "CopyCode" Then
Select Case VBComp.Type
Case 1 To 3: .VBComponents.Remove VBComp
Case Else
With VBComp.CodeModule
.DeleteLines 1, .CountOfLines
End With
End Select
End If
Next VBComp
End With
End Sub

Sub CopyAllModules(SourceF, TargetF)
Dim FName As String
Dim VBComp As Object
With Workbooks(SourceF)
FName = .Path & "code.txt"
If Dir(FName) <> "" Then Kill FName
For Each VBComp In .VBProject.VBComponents
If VBComp.Type <> 100 Then
VBComp.Export FName
Workbooks(TargetF).VBProject.VBComponents.Import FName
Kill FName
End If
Next VBComp
End With
End Sub

Sub CopySheetCode(SourceF, TargetF, ShName)
Set C = Workbooks(SourceF).VBProject.VBComponents.Item(ShName)
NumLines = C.CodeModule.CountOfLines
For i = 1 To NumLines
strcode = strcode & C.CodeModule.Lines(i, 1) & vbCr
Next
Set C = Workbooks(TargetF).VBProject.VBComponents.Item(ShName)
On Error Resume Next
C.CodeModule.AddFromString (strcode)
End Sub

MP

"sabatier" a écrit dans le
message

de news:
bonjour docm, bonjour denis, allez debout les québécois (vous
pourriez




bien
vous lever à une heure où chrisV n'est pas encore couché, non?)
merci d'avoir su trouver cette proc de CPearson qui, soit dit au
passage,


doit être un monsieur hyper-méticuleux : il envisage, avec son

If ActiveWorkbook.Path = "" Then
MsgBox "Veuillez sauvegarder le présent classeur "
Application.Dialogs(xlDialogSaveWorkbook).Show
End If

le cas, fort rare AMHA, où quelque fou aurait pondu des modules
dans





un
classeur NON enregistré ("mais imaginons" comme dirait Bigard dans
son




sketch de la chauve-souris dont la morsure est mortelle dans un
cas





sur
10
millions)...
merci aussi à...michel dont vous noterez, toujours au passage, le
sens




inné
de la médisance, d'avoir rappeler la référence de la bibliothèque
à





ajouter...
malgré ma g...d.b..., je me suis beaucoup intéressé à ces
procs...jusqu'au


moment où j'ai lu avec effroi "DeleteAllVBA" : il n'est pas encore





celui
qui, à l'insu de mon plein gré, voudrait faire péter mon usine à
gaz,




fût-il
l'honorable CPearson ; je ne m'appelle pas michel P, moi et à mes
boutons,


je m'y attache, comme disait ma grand'mère avant qu'elle ne
connaisse




la
restauration des systèmes...
ceci mis à part, je me demande pourquoi ce même CPearson skippe
les





modules
dont le nom serait (ou incluerait?) "CopyCode" : je ne vois nulle
part




que
la proc donne ce nom aux modules copiés dont on peut comprendre
qu'il




ne
soit pas utile de les copier une nouvelle fois....
après tout, je suis peut-être complètement à côté de la plaque
mais





j'ai
confiance dans le québec d'où jaillira certainement une nouvelle
fois




la
lumière...quand le jour aura baigné de la sienne la belle province
('tain,


pour un épilogue, ça c'est un épilogue mais cessez d'applaudir
quand





même)
jps

"docm" a écrit dans le message de
news:uhm$
Bonjour jps.

Si je n'ai pas la berlue, le code suivant (de cpearson) permet
d'importer


le
code de tous les modules ainsi que celui de ThisWorkbook et des
feuilles



choisies.
Est-ce possible?

Sub Copies()
If ActiveWorkbook.Path = "" Then
MsgBox "Veuillez sauvegarder le présent classeur "
Application.Dialogs(xlDialogSaveWorkbook).Show
End If
TargetF = ActiveWorkbook.Name
If Right(TargetF, 4) <> ".xls" Then TargetF = TargetF &
".xls"






SourceP = InputBox("Répertoire de la source", , "C:mes
documents")



SourceF = InputBox("Nom du fichier source", ,
"classeur1.xls")






Workbooks.Open SourceP & "" & SourceF
Workbooks(TargetF).Activate
CopyModules TargetF, SourceF, SourceP

End Sub



Sub CopyModules(TargetF, SourceF, SourceP)

DeleteAllVBA
CopyAllModules SourceF, TargetF
CopySheetCode SourceF, TargetF, "ThisWorkbook"
CopySheetCode SourceF, TargetF, "Feuil3"

End Sub
Sub DeleteAllVBA()
Dim VBComp As VBIDE.VBComponent
Dim VBComps As VBIDE.VBComponents

Set VBComps = ActiveWorkbook.VBProject.VBComponents
For Each VBComp In VBComps

'Skip module containing copycode
If VBComp.Name = "CopyCode" Then GoTo NextOne
Select Case VBComp.Type
Case vbext_ct_StdModule, vbext_ct_MSForm, _
vbext_ct_ClassModule
VBComps.Remove VBComp
Case Else
With VBComp.CodeModule
.DeleteLines 1, .CountOfLines
End With
End Select
NextOne:
Next VBComp

End Sub

Sub CopyAllModules(SourceF, TargetF)
Dim FName As String
Dim VBComp As VBIDE.VBComponent

With Workbooks(SourceF)
FName = .Path & "code.txt"
If Dir(FName) <> "" Then
Kill FName
End If
For Each VBComp In .VBProject.VBComponents
If VBComp.Type <> vbext_ct_Document Then
VBComp.Export FName
Workbooks(TargetF).VBProject.VBComponents.Import
FName






Kill FName
End If
Next VBComp
End With

End Sub

Sub CopySheetCode(SourceF, TargetF, ShName)
Set C = Workbooks(SourceF).VBProject.VBComponents.Item(ShName)
NumLines = C.CodeModule.CountOfLines
For i = 1 To NumLines
strcode = strcode & C.CodeModule.Lines(i, 1) & vbCr
Next

Set C Workbooks(TargetF).VBProject.VBComponents.Item(ShName)
On Error Resume Next
C.CodeModule.AddFromString (strcode)
End Sub



"sabatier" wrote in
message




news:#
waouh....et j'ai lu jusqu'au bout puisque c'est quand même moi
qui






avais
posé la question : je n'aurais jamais du...où avais-je encore
la







tête
à
ce
moment-là?
enfin, merci, denis, pour ces autres esseuplications...ça sent
la






.cls
et
le
titre de MVP, non?... j'ai failli suggérer à misange qu'elle
mette






ton
texte
sur excelabo, mais j'ai peur qu'elle ne fasse pas recette...
bon samedi à toi aussi, denis
jps

"michdenis" a écrit dans le message de
news:
Bonjour JPS,

Ce n'est pas une quetion pour un samedi... ni pour un autre
jour







de
la
semaine ! ;-)

CLS = Extension de fichier signifiant : Code Language
Specification





Cette extension de fichier est apparu avec la version 4 de
Visual






basic
(Le Programme) pour désigner un module de classe.

Ce que tu as observé avec Le "ThisWorkbook" est aussi
présent








dans
le
cas
d'un import-export du code des "Feuil". Et la
raison, ce sont des modules de classes contrairement au
module








standard
(fichier .bas) Concernant les formulaires,
l'extension du fichier export est .Frm (abréviation pour
formulaire).




Dans
ce cas, c'est un peu différent car il y a l'objet
lui-même(formulaire) qui est exporté et importé par la suite
...avec





tout
son contenu ! )

Dans excel, un module de classe sert à définir les
propriétés,








les
méthodes et les événements d'une classe spécifique
d'objets. Par exemple, si tu désires définir un comportement
particulier



pour un groupe de boutons de commande, le nom que tu
donnes au module de classe représente en même temps, un
nouvel








objet
et
une nouvelle classe d'objet. Dans ce module,, tu
insèrera le code particulier à cette nouvelle classe
d'objet.








Le
nom
du
module de classe désigne à la fois le nouvel objet et
la nouvelle classe de l'objet. Mais attention, le module de
classe





ne
crée pas de "nouveaux boutons de commande" mais une
nouvelle classe d'objet ayant ses propres spécifications
contenu







dans
son
module. Le nouvel objet créé sera présent seulement
au moment de l'instantiation de ce dernier avec le mot clé
"New"








dans
le
code.
Dim JPS As New Toto (toto étant le nom du module de classe)

L'exportation et l'importation d'un module de classe
(fichier








.cls)
par
les commandes du menu de la fenêtre VBE, correspond
essentiellement au code de l'objet "Feuil" ou de l'objet
"ThisWorkbook"



qui eux, sont créés par l'application Excel. Dans
excel, le module de classe ne crée lui-même l'objet "Feuil"
ou








"ThisWorkbook" au sens où on les voit dans la fenêtre du
projet VBE. Il ne peut pas en conséquence, exporter ou
importer







un
"objet
physique" mais seulement le code associé à cet
objet.

Pour conserver le code d'un module de classe, l'ami Frédéric
Sigonneau




a
créé ceci : Une procédure qui copie le texte du
module de classe dans un fichier texte.

'========================= > > > > > > > > Sub test()
WriteModuleToTextFile "ThisWorkbook"
End Sub
'========================= > > > > > > > > Sub WriteModuleToTextFile(NomModule$)
Dim FSO As Object
Dim Obj As Object
Dim Txt As Object
Dim Contenu$

Set Obj > > > > ThisWorkbook.VBProject.VBComponents(NomModule).CodeModule
Contenu = Obj.Lines(1, Obj.CountOfLines)

Set FSO = CreateObject("Scripting.FileSystemObject")

Set Txt = FSO.OpenTextFile("d:" & NomModule & ".txt", 2,
True)






Txt.Write Contenu
Txt.Close
End Sub 'fs
'========================= > > > > > > > >

Et si tu veux récupérer le code du fichier créer et
l'insérer








dans
un
module particulier, tu peux utiliser ceci :

'----------------------
With ThisWorkbook
.VBProject.VBComponents("Feuil1").CodeModule.AddFromFile
"c:Feuil1.txt"

End With
'----------------------

Tu remplaces "Feuil1" par le nom du module désiré entre
guillemets






"c:excelFeuil1.txt" est le chemin et le nom du fichier
créé








par
la
procédure de Frédéric.


Si tu as procédé manuellement à l'exportation, l'extension
de








ton
fichier
est .Cls, et si tu désires récupérer le code du
fichier .cls, avec la procédure (3 lignes) soumise de
récupération,





le
module de classe ("l'objet physique") de destination
devra être déjà présent et il devra aussi avoir même nom que
le







module
de
classe d'origine, sinon, il remplacera le module de
classe ("l'objet physique") de destination par le module de
classe






d'origine (code seulement) et ce n'est pas habituellement
ce qui est désiré... dans excel. De plus, il se permettra
d'ajouter





ces
lignes de code en début du module de destination
qu'il faudrait enlever par quelques lignes de code
supplémentaire.






VERSION 1.0 CLASS
BEGIN
MultiUse = -1 'True
End


Salutations !

P.S. Bon samedi quand même !!!




"sabatier" a écrit
dans






le
message de
news:ue%
bonjour,
je me livre aux douces joies de l'importationnement de
modules








après
exportationnage d'iceux....
pour un module standard, *Fichier/Exporter un fichier* crée
un








.bas
et
no
problemo pour l'importer
par contre, pour le module ThisWorkbook, c'est moins sympa
car








*Fichier/Exporter un fichier* crée un .cls et à
l'importation








dans
l'autre
classeur, c'est un ThisWorkbook1 qui va s'ajouter et non le
ThisWorkbook,


le
seul, le vrai, l'authentique, qui va recevoir la procédure
importer...du



coup, c'est moi qui fais une drôle de tête de clone car je
me








pose
la
question de savoir ce qui va se passer ensuite...
si quelque bonne volonté aoûtienne peut m'en dire plus sur
ce








phénomène...un
grand merci par avance
jps
































Avatar
docm
;)))))))))))))

"sabatier" wrote in message
news:#
bonjour michel Pi, bonjour docm
ben moi, j'ai testé et viens de me donner la trouille de ma vie : pas
moyen

d'enregistrer un fichier modèle avec la proc Pearson 39 modifiée Pierron
45....alerte virale...bloodhoundmacro, que ça disait...document non
enregistré...et mon pote alsacien qui ne cessait de me dire "tous nos
brochets sont détruites"...mais je m'appelle pas michel Pé, moi ; je ne me
suis pas précipité sur le forum en poussant des cries d'orfraie, voire de
misange...ah que non, je suis allé rendre visite à mes autres potes de
symantec et hop, niveau de sécurité au plus bas....sacré C Pearson,
va...tout ça parce qu'il y a un "kill" dans sa macro, je suppose...
enfin, michel, pour ton info, je te précise que si on met en comments le
DeleteAllVBA et qu'on superpose divers classeurs source dans le même
classeur destination, s'il y a plusieurs Module1, le second qui sera copié
deviendra Module11 mais je ne suis pas allé plus loin pour voir ce qu'il
en

était d'un troisième...
il n'empêche que je te remercie, docm, d'avoir donné cette proc qui peut
être d'un grand secours en cas de transhumance...
merci encore
jps

"Michel Pierron" a écrit dans le message de
news:
Bonjour docm;
Oui, tu as raison, j'ai loupé celle la; il suffit de remonter d'une
ligne


On
Error Resume Next, sinon il faut créer ou copier la feuille.
Comme quoi, j'aurais du tester...
MP

"docm" a écrit dans le message de
news:
Bonjour Michel Pierron.

Avant d'éxécuter
Set C = Workbooks(TargetF).VBProject.VBComponents.Item(ShName)
je crois qu'il serait judicieux de vérifier qu'une feuille ShName
existe



dans le classeur destination.



"Michel Pierron" wrote in message
news:#
Re Jean-Paul;
Autre chose importante, rajouter une instruction pour sauver le
fichier



après importation des modules car si l'on ferme Excel et qu'une
instruction

astucieuse telle que:
ThisWorkbook.Saved = True ou ThisWorkbook.Close False se trouve dans
la



procédure importé ThisWorkbook_BeforeClose, basta le boulot.
MP

"sabatier" a écrit dans le
message

de news:
bonjour docm, bonjour denis, allez debout les québécois (vous
pourriez




bien
vous lever à une heure où chrisV n'est pas encore couché, non?)
merci d'avoir su trouver cette proc de CPearson qui, soit dit au
passage,


doit être un monsieur hyper-méticuleux : il envisage, avec son

If ActiveWorkbook.Path = "" Then
MsgBox "Veuillez sauvegarder le présent classeur "
Application.Dialogs(xlDialogSaveWorkbook).Show
End If

le cas, fort rare AMHA, où quelque fou aurait pondu des modules
dans





un
classeur NON enregistré ("mais imaginons" comme dirait Bigard dans
son




sketch de la chauve-souris dont la morsure est mortelle dans un
cas





sur
10
millions)...
merci aussi à...michel dont vous noterez, toujours au passage, le
sens




inné
de la médisance, d'avoir rappeler la référence de la bibliothèque
à





ajouter...
malgré ma g...d.b..., je me suis beaucoup intéressé à ces
procs...jusqu'au


moment où j'ai lu avec effroi "DeleteAllVBA" : il n'est pas encore





celui
qui, à l'insu de mon plein gré, voudrait faire péter mon usine à
gaz,




fût-il
l'honorable CPearson ; je ne m'appelle pas michel P, moi et à mes
boutons,


je m'y attache, comme disait ma grand'mère avant qu'elle ne
connaisse




la
restauration des systèmes...
ceci mis à part, je me demande pourquoi ce même CPearson skippe
les





modules
dont le nom serait (ou incluerait?) "CopyCode" : je ne vois nulle
part




que
la proc donne ce nom aux modules copiés dont on peut comprendre
qu'il




ne
soit pas utile de les copier une nouvelle fois....
après tout, je suis peut-être complètement à côté de la plaque
mais





j'ai
confiance dans le québec d'où jaillira certainement une nouvelle
fois




la
lumière...quand le jour aura baigné de la sienne la belle province
('tain,


pour un épilogue, ça c'est un épilogue mais cessez d'applaudir
quand





même)
jps

"docm" a écrit dans le message de
news:uhm$
Bonjour jps.

Si je n'ai pas la berlue, le code suivant (de cpearson) permet
d'importer


le
code de tous les modules ainsi que celui de ThisWorkbook et des
feuilles



choisies.
Est-ce possible?

Sub Copies()
If ActiveWorkbook.Path = "" Then
MsgBox "Veuillez sauvegarder le présent classeur "
Application.Dialogs(xlDialogSaveWorkbook).Show
End If
TargetF = ActiveWorkbook.Name
If Right(TargetF, 4) <> ".xls" Then TargetF = TargetF &
".xls"






SourceP = InputBox("Répertoire de la source", , "C:mes
documents")



SourceF = InputBox("Nom du fichier source", ,
"classeur1.xls")






Workbooks.Open SourceP & "" & SourceF
Workbooks(TargetF).Activate
CopyModules TargetF, SourceF, SourceP

End Sub



Sub CopyModules(TargetF, SourceF, SourceP)

DeleteAllVBA
CopyAllModules SourceF, TargetF
CopySheetCode SourceF, TargetF, "ThisWorkbook"
CopySheetCode SourceF, TargetF, "Feuil3"

End Sub
Sub DeleteAllVBA()
Dim VBComp As VBIDE.VBComponent
Dim VBComps As VBIDE.VBComponents

Set VBComps = ActiveWorkbook.VBProject.VBComponents
For Each VBComp In VBComps

'Skip module containing copycode
If VBComp.Name = "CopyCode" Then GoTo NextOne
Select Case VBComp.Type
Case vbext_ct_StdModule, vbext_ct_MSForm, _
vbext_ct_ClassModule
VBComps.Remove VBComp
Case Else
With VBComp.CodeModule
.DeleteLines 1, .CountOfLines
End With
End Select
NextOne:
Next VBComp

End Sub

Sub CopyAllModules(SourceF, TargetF)
Dim FName As String
Dim VBComp As VBIDE.VBComponent

With Workbooks(SourceF)
FName = .Path & "code.txt"
If Dir(FName) <> "" Then
Kill FName
End If
For Each VBComp In .VBProject.VBComponents
If VBComp.Type <> vbext_ct_Document Then
VBComp.Export FName
Workbooks(TargetF).VBProject.VBComponents.Import
FName






Kill FName
End If
Next VBComp
End With

End Sub

Sub CopySheetCode(SourceF, TargetF, ShName)
Set C = Workbooks(SourceF).VBProject.VBComponents.Item(ShName)
NumLines = C.CodeModule.CountOfLines
For i = 1 To NumLines
strcode = strcode & C.CodeModule.Lines(i, 1) & vbCr
Next

Set C Workbooks(TargetF).VBProject.VBComponents.Item(ShName)
On Error Resume Next
C.CodeModule.AddFromString (strcode)
End Sub



"sabatier" wrote in
message




news:#
waouh....et j'ai lu jusqu'au bout puisque c'est quand même moi
qui






avais
posé la question : je n'aurais jamais du...où avais-je encore
la







tête
à
ce
moment-là?
enfin, merci, denis, pour ces autres esseuplications...ça sent
la






.cls
et
le
titre de MVP, non?... j'ai failli suggérer à misange qu'elle
mette






ton
texte
sur excelabo, mais j'ai peur qu'elle ne fasse pas recette...
bon samedi à toi aussi, denis
jps

"michdenis" a écrit dans le message de
news:
Bonjour JPS,

Ce n'est pas une quetion pour un samedi... ni pour un autre
jour







de
la
semaine ! ;-)

CLS = Extension de fichier signifiant : Code Language
Specification





Cette extension de fichier est apparu avec la version 4 de
Visual






basic
(Le Programme) pour désigner un module de classe.

Ce que tu as observé avec Le "ThisWorkbook" est aussi
présent








dans
le
cas
d'un import-export du code des "Feuil". Et la
raison, ce sont des modules de classes contrairement au
module








standard
(fichier .bas) Concernant les formulaires,
l'extension du fichier export est .Frm (abréviation pour
formulaire).




Dans
ce cas, c'est un peu différent car il y a l'objet
lui-même(formulaire) qui est exporté et importé par la suite
...avec





tout
son contenu ! )

Dans excel, un module de classe sert à définir les
propriétés,








les
méthodes et les événements d'une classe spécifique
d'objets. Par exemple, si tu désires définir un comportement
particulier



pour un groupe de boutons de commande, le nom que tu
donnes au module de classe représente en même temps, un
nouvel








objet
et
une nouvelle classe d'objet. Dans ce module,, tu
insèrera le code particulier à cette nouvelle classe
d'objet.








Le
nom
du
module de classe désigne à la fois le nouvel objet et
la nouvelle classe de l'objet. Mais attention, le module de
classe





ne
crée pas de "nouveaux boutons de commande" mais une
nouvelle classe d'objet ayant ses propres spécifications
contenu







dans
son
module. Le nouvel objet créé sera présent seulement
au moment de l'instantiation de ce dernier avec le mot clé
"New"







dans
le
code.
Dim JPS As New Toto (toto étant le nom du module de classe)

L'exportation et l'importation d'un module de classe
(fichier








.cls)
par
les commandes du menu de la fenêtre VBE, correspond
essentiellement au code de l'objet "Feuil" ou de l'objet
"ThisWorkbook"



qui eux, sont créés par l'application Excel. Dans
excel, le module de classe ne crée lui-même l'objet "Feuil"
ou








"ThisWorkbook" au sens où on les voit dans la fenêtre du
projet VBE. Il ne peut pas en conséquence, exporter ou
importer







un
"objet
physique" mais seulement le code associé à cet
objet.

Pour conserver le code d'un module de classe, l'ami Frédéric
Sigonneau




a
créé ceci : Une procédure qui copie le texte du
module de classe dans un fichier texte.

'========================= > > > > > > > > Sub test()
WriteModuleToTextFile "ThisWorkbook"
End Sub
'========================= > > > > > > > > Sub WriteModuleToTextFile(NomModule$)
Dim FSO As Object
Dim Obj As Object
Dim Txt As Object
Dim Contenu$

Set Obj > > > > ThisWorkbook.VBProject.VBComponents(NomModule).CodeModule
Contenu = Obj.Lines(1, Obj.CountOfLines)

Set FSO = CreateObject("Scripting.FileSystemObject")

Set Txt = FSO.OpenTextFile("d:" & NomModule & ".txt", 2,
True)






Txt.Write Contenu
Txt.Close
End Sub 'fs
'========================= > > > > > > > >

Et si tu veux récupérer le code du fichier créer et
l'insérer








dans
un
module particulier, tu peux utiliser ceci :

'----------------------
With ThisWorkbook
.VBProject.VBComponents("Feuil1").CodeModule.AddFromFile
"c:Feuil1.txt"

End With
'----------------------

Tu remplaces "Feuil1" par le nom du module désiré entre
guillemets






"c:excelFeuil1.txt" est le chemin et le nom du fichier
créé








par
la
procédure de Frédéric.


Si tu as procédé manuellement à l'exportation, l'extension
de








ton
fichier
est .Cls, et si tu désires récupérer le code du
fichier .cls, avec la procédure (3 lignes) soumise de
récupération,





le
module de classe ("l'objet physique") de destination
devra être déjà présent et il devra aussi avoir même nom que
le







module
de
classe d'origine, sinon, il remplacera le module de
classe ("l'objet physique") de destination par le module de
classe






d'origine (code seulement) et ce n'est pas habituellement
ce qui est désiré... dans excel. De plus, il se permettra
d'ajouter





ces
lignes de code en début du module de destination
qu'il faudrait enlever par quelques lignes de code
supplémentaire.






VERSION 1.0 CLASS
BEGIN
MultiUse = -1 'True
End


Salutations !

P.S. Bon samedi quand même !!!




"sabatier" a écrit
dans






le
message de
news:ue%
bonjour,
je me livre aux douces joies de l'importationnement de
modules








après
exportationnage d'iceux....
pour un module standard, *Fichier/Exporter un fichier* crée
un








.bas
et
no
problemo pour l'importer
par contre, pour le module ThisWorkbook, c'est moins sympa
car








*Fichier/Exporter un fichier* crée un .cls et à
l'importation








dans
l'autre
classeur, c'est un ThisWorkbook1 qui va s'ajouter et non le
ThisWorkbook,


le
seul, le vrai, l'authentique, qui va recevoir la procédure
importer...du



coup, c'est moi qui fais une drôle de tête de clone car je
me








pose
la
question de savoir ce qui va se passer ensuite...
si quelque bonne volonté aoûtienne peut m'en dire plus sur
ce








phénomène...un
grand merci par avance
jps
































Avatar
sabatier
:-))))))))))))
après test, je me rends compte, la honte au coeur et prêt à me faire botter
l'autre "c", que ce qui suit était une belle c....ie de ma part puisque je
n'avais pas compris qu'il s'agissait d'enregistrer le classeur destination
et non le source....bouh qui avait dit que j'avais la g...d..b... ce
matin-là?

cette proc de CPearson qui, soit dit au passage,
doit être un monsieur hyper-méticuleux : il envisage, avec son

If ActiveWorkbook.Path = "" Then
MsgBox "Veuillez sauvegarder le présent classeur "
Application.Dialogs(xlDialogSaveWorkbook).Show
End If

le cas, fort rare AMHA, où quelque fou aurait pondu des modules dans un
classeur NON enregistré ("mais imaginons" comme dirait Bigard dans son
sketch de la chauve-souris dont la morsure est mortelle dans un cas sur 10
millions)...

jps
"docm" a écrit dans le message de
news:
in nomine Patris et Filii et Spiritus jpSancti

"sabatier" wrote in message
news:u$#
te absolvo, docm
vade in pace...
jps

"docm" a écrit dans le message de
news:%

Mea culpa...jps.











Avatar
sabatier
ich bin Ihr hümblisch Servitor, mein Oberstürmführer
jps (qui a peu fréquenté Goethe et qui invente donc)

"docm" a écrit dans le message de
news:OA1u$
mit Vergnügen, jps

"sabatier" wrote in message
news:
ah! verstanden, docm...merci et tu as bien fait d'enfoncer le clou car
je


n'avais pas compris ce qu'avait voulu dire michel P (P de Pierron, pas
de


Péroche, l'homme qui s'accroche mais bien Pierron, l'homme qui vaut des
ronds) à ce sujet...
jps

"docm" a écrit dans le message de
news:
Bonjour jps.

Il ne faut nommer "CopyCode" que le module contenant le code de
cpearson


afin de protéger les procédures qu'il contient et qui sont en cours
d'exécution.



"jps" wrote in message
news:#
merci, michel (pas denis) mais bouhhhhhhhhhhh que tout cela est bien
trop


ardu pour moi....
tu dis renommer "le" module dans lequel se trouve les procs à copier
(si



je
comprends bien) mais s'il y en a plusieurs à copier (importer?), ils
auront

tous le même nom dans la nouvelle arborescence de VBE?
mais tu es d'accord avec moi que celui qui a le malheur de lancer
cette



proc
"kill" tous les modules existant dans son VBE ou non?
j'en frémis encore telle l'eau dans laquelle cuit la saucisse de
moreteau


jps

"Michel Pierron" a écrit dans le message de
news:
Bonjour JPS;
En effet, il ne faut pas avoir oublier de renommer le module dans
lequel



se
trouve les procédures de copie en CopyCode sinon, ce module sera
effacé



au
même titre que tout le reste. La référence à "Microsoft Visual
basic





for
applications Extensibility 5.3" n'est pas nécessaire si tu
modifies





ainsi
les procédures:
Sub Copies()
If ActiveWorkbook.Path = "" Then
MsgBox "Veuillez sauvegarder le présent classeur "
Application.Dialogs(xlDialogSaveWorkbook).Show
End If
TargetF = ActiveWorkbook.Name
If Right(TargetF, 4) <> ".xls" Then TargetF = TargetF & ".xls"
SourceP = InputBox("Répertoire de la source", ,
Application.DefaultFilePath)

If SourceP = "" Then Exit Sub
1: SourceF = InputBox("Nom du fichier source", , "Classeur1.xls")
If SourceF = "" Then Exit Sub
If Dir(SourceP & "" & SourceF) = "" Then
MsgBox "Fichier " & SourceF & " non trouvé !", 64
GoTo 1
End If
On Error Resume Next
Workbooks(SourceF).Activate
If Err Then Workbooks.Open SourceP & "" & SourceF
On Error GoTo 0
If ActiveWorkbook.VBProject.Protection Then
MsgBox "Le projet de " & ActiveWorkbook.Name & " est protégé !",
64





Exit Sub
End If
Workbooks(TargetF).Activate
CopyModules TargetF, SourceF, SourceP
End Sub

Sub CopyModules(TargetF, SourceF, SourceP)
DeleteAllVBA
CopyAllModules SourceF, TargetF
CopySheetCode SourceF, TargetF, "ThisWorkbook"
With Workbooks(SourceF)
For i = 1 To .Worksheets.Count
CopySheetCode SourceF, TargetF, .Worksheets(i).CodeName
Next i
End With
End Sub

Private Sub DeleteAllVBA()
Dim VBComp As Object
With ActiveWorkbook.VBProject
For Each VBComp In .VBComponents
' Skip module containing copycode
If Not VBComp.Name = "CopyCode" Then
Select Case VBComp.Type
Case 1 To 3: .VBComponents.Remove VBComp
Case Else
With VBComp.CodeModule
.DeleteLines 1, .CountOfLines
End With
End Select
End If
Next VBComp
End With
End Sub

Sub CopyAllModules(SourceF, TargetF)
Dim FName As String
Dim VBComp As Object
With Workbooks(SourceF)
FName = .Path & "code.txt"
If Dir(FName) <> "" Then Kill FName
For Each VBComp In .VBProject.VBComponents
If VBComp.Type <> 100 Then
VBComp.Export FName
Workbooks(TargetF).VBProject.VBComponents.Import FName
Kill FName
End If
Next VBComp
End With
End Sub

Sub CopySheetCode(SourceF, TargetF, ShName)
Set C = Workbooks(SourceF).VBProject.VBComponents.Item(ShName)
NumLines = C.CodeModule.CountOfLines
For i = 1 To NumLines
strcode = strcode & C.CodeModule.Lines(i, 1) & vbCr
Next
Set C = Workbooks(TargetF).VBProject.VBComponents.Item(ShName)
On Error Resume Next
C.CodeModule.AddFromString (strcode)
End Sub

MP

"sabatier" a écrit dans
le





message
de news:
bonjour docm, bonjour denis, allez debout les québécois (vous
pourriez




bien
vous lever à une heure où chrisV n'est pas encore couché, non?)
merci d'avoir su trouver cette proc de CPearson qui, soit dit au
passage,


doit être un monsieur hyper-méticuleux : il envisage, avec son

If ActiveWorkbook.Path = "" Then
MsgBox "Veuillez sauvegarder le présent classeur "
Application.Dialogs(xlDialogSaveWorkbook).Show
End If

le cas, fort rare AMHA, où quelque fou aurait pondu des modules
dans





un
classeur NON enregistré ("mais imaginons" comme dirait Bigard
dans






son
sketch de la chauve-souris dont la morsure est mortelle dans un
cas





sur
10
millions)...
merci aussi à...michel dont vous noterez, toujours au passage,
le






sens
inné
de la médisance, d'avoir rappeler la référence de la
bibliothèque






à
ajouter...
malgré ma g...d.b..., je me suis beaucoup intéressé à ces
procs...jusqu'au


moment où j'ai lu avec effroi "DeleteAllVBA" : il n'est pas
encore







celui
qui, à l'insu de mon plein gré, voudrait faire péter mon usine à
gaz,




fût-il
l'honorable CPearson ; je ne m'appelle pas michel P, moi et à
mes






boutons,
je m'y attache, comme disait ma grand'mère avant qu'elle ne
connaisse




la
restauration des systèmes...
ceci mis à part, je me demande pourquoi ce même CPearson skippe
les





modules
dont le nom serait (ou incluerait?) "CopyCode" : je ne vois
nulle






part
que
la proc donne ce nom aux modules copiés dont on peut comprendre
qu'il




ne
soit pas utile de les copier une nouvelle fois....
après tout, je suis peut-être complètement à côté de la plaque
mais





j'ai
confiance dans le québec d'où jaillira certainement une nouvelle
fois




la
lumière...quand le jour aura baigné de la sienne la belle
province






('tain,
pour un épilogue, ça c'est un épilogue mais cessez d'applaudir
quand





même)
jps

"docm" a écrit dans le message de
news:uhm$
Bonjour jps.

Si je n'ai pas la berlue, le code suivant (de cpearson) permet
d'importer


le
code de tous les modules ainsi que celui de ThisWorkbook et
des







feuilles
choisies.
Est-ce possible?

Sub Copies()
If ActiveWorkbook.Path = "" Then
MsgBox "Veuillez sauvegarder le présent classeur "
Application.Dialogs(xlDialogSaveWorkbook).Show
End If
TargetF = ActiveWorkbook.Name
If Right(TargetF, 4) <> ".xls" Then TargetF = TargetF &
".xls"






SourceP = InputBox("Répertoire de la source", , "C:mes
documents")



SourceF = InputBox("Nom du fichier source", ,
"classeur1.xls")






Workbooks.Open SourceP & "" & SourceF
Workbooks(TargetF).Activate
CopyModules TargetF, SourceF, SourceP

End Sub



Sub CopyModules(TargetF, SourceF, SourceP)

DeleteAllVBA
CopyAllModules SourceF, TargetF
CopySheetCode SourceF, TargetF, "ThisWorkbook"
CopySheetCode SourceF, TargetF, "Feuil3"

End Sub
Sub DeleteAllVBA()
Dim VBComp As VBIDE.VBComponent
Dim VBComps As VBIDE.VBComponents

Set VBComps = ActiveWorkbook.VBProject.VBComponents
For Each VBComp In VBComps

'Skip module containing copycode
If VBComp.Name = "CopyCode" Then GoTo NextOne
Select Case VBComp.Type
Case vbext_ct_StdModule, vbext_ct_MSForm, _
vbext_ct_ClassModule
VBComps.Remove VBComp
Case Else
With VBComp.CodeModule
.DeleteLines 1, .CountOfLines
End With
End Select
NextOne:
Next VBComp

End Sub

Sub CopyAllModules(SourceF, TargetF)
Dim FName As String
Dim VBComp As VBIDE.VBComponent

With Workbooks(SourceF)
FName = .Path & "code.txt"
If Dir(FName) <> "" Then
Kill FName
End If
For Each VBComp In .VBProject.VBComponents
If VBComp.Type <> vbext_ct_Document Then
VBComp.Export FName
Workbooks(TargetF).VBProject.VBComponents.Import
FName






Kill FName
End If
Next VBComp
End With

End Sub

Sub CopySheetCode(SourceF, TargetF, ShName)
Set C = Workbooks(SourceF).VBProject.VBComponents.Item(ShName)
NumLines = C.CodeModule.CountOfLines
For i = 1 To NumLines
strcode = strcode & C.CodeModule.Lines(i, 1) & vbCr
Next

Set C > Workbooks(TargetF).VBProject.VBComponents.Item(ShName)
On Error Resume Next
C.CodeModule.AddFromString (strcode)
End Sub



"sabatier" wrote in
message




news:#
waouh....et j'ai lu jusqu'au bout puisque c'est quand même
moi








qui
avais
posé la question : je n'aurais jamais du...où avais-je
encore








la
tête
à
ce
moment-là?
enfin, merci, denis, pour ces autres esseuplications...ça
sent








la
.cls
et
le
titre de MVP, non?... j'ai failli suggérer à misange qu'elle
mette






ton
texte
sur excelabo, mais j'ai peur qu'elle ne fasse pas recette...
bon samedi à toi aussi, denis
jps

"michdenis" a écrit dans le message
de








news:
Bonjour JPS,

Ce n'est pas une quetion pour un samedi... ni pour un
autre









jour
de
la
semaine ! ;-)

CLS = Extension de fichier signifiant : Code Language
Specification





Cette extension de fichier est apparu avec la version 4 de
Visual






basic
(Le Programme) pour désigner un module de classe.

Ce que tu as observé avec Le "ThisWorkbook" est aussi
présent








dans
le
cas
d'un import-export du code des "Feuil". Et la
raison, ce sont des modules de classes contrairement au
module








standard
(fichier .bas) Concernant les formulaires,
l'extension du fichier export est .Frm (abréviation pour
formulaire).




Dans
ce cas, c'est un peu différent car il y a l'objet
lui-même(formulaire) qui est exporté et importé par la
suite









...avec
tout
son contenu ! )

Dans excel, un module de classe sert à définir les
propriétés,








les
méthodes et les événements d'une classe spécifique
d'objets. Par exemple, si tu désires définir un
comportement









particulier
pour un groupe de boutons de commande, le nom que tu
donnes au module de classe représente en même temps, un
nouvel








objet
et
une nouvelle classe d'objet. Dans ce module,, tu
insèrera le code particulier à cette nouvelle classe
d'objet.








Le
nom
du
module de classe désigne à la fois le nouvel objet et
la nouvelle classe de l'objet. Mais attention, le module
de









classe
ne
crée pas de "nouveaux boutons de commande" mais une
nouvelle classe d'objet ayant ses propres spécifications
contenu







dans
son
module. Le nouvel objet créé sera présent seulement
au moment de l'instantiation de ce dernier avec le mot clé
"New"








dans
le
code.
Dim JPS As New Toto (toto étant le nom du module de
classe)










L'exportation et l'importation d'un module de classe
(fichier








.cls)
par
les commandes du menu de la fenêtre VBE, correspond
essentiellement au code de l'objet "Feuil" ou de l'objet
"ThisWorkbook"



qui eux, sont créés par l'application Excel. Dans
excel, le module de classe ne crée lui-même l'objet
"Feuil"









ou
"ThisWorkbook" au sens où on les voit dans la fenêtre du
projet VBE. Il ne peut pas en conséquence, exporter ou
importer







un
"objet
physique" mais seulement le code associé à cet
objet.

Pour conserver le code d'un module de classe, l'ami
Frédéric









Sigonneau
a
créé ceci : Une procédure qui copie le texte du
module de classe dans un fichier texte.

'========================= > > > > > > > > > Sub test()
WriteModuleToTextFile "ThisWorkbook"
End Sub
'========================= > > > > > > > > > Sub WriteModuleToTextFile(NomModule$)
Dim FSO As Object
Dim Obj As Object
Dim Txt As Object
Dim Contenu$

Set Obj > > > > > ThisWorkbook.VBProject.VBComponents(NomModule).CodeModule
Contenu = Obj.Lines(1, Obj.CountOfLines)

Set FSO = CreateObject("Scripting.FileSystemObject")

Set Txt = FSO.OpenTextFile("d:" & NomModule & ".txt",
2,









True)
Txt.Write Contenu
Txt.Close
End Sub 'fs
'========================= > > > > > > > > >

Et si tu veux récupérer le code du fichier créer et
l'insérer








dans
un
module particulier, tu peux utiliser ceci :

'----------------------
With ThisWorkbook

.VBProject.VBComponents("Feuil1").CodeModule.AddFromFile









"c:Feuil1.txt"
End With
'----------------------

Tu remplaces "Feuil1" par le nom du module désiré entre
guillemets






"c:excelFeuil1.txt" est le chemin et le nom du fichier
créé








par
la
procédure de Frédéric.


Si tu as procédé manuellement à l'exportation, l'extension
de








ton
fichier
est .Cls, et si tu désires récupérer le code du
fichier .cls, avec la procédure (3 lignes) soumise de
récupération,





le
module de classe ("l'objet physique") de destination
devra être déjà présent et il devra aussi avoir même nom
que









le
module
de
classe d'origine, sinon, il remplacera le module de
classe ("l'objet physique") de destination par le module
de









classe
d'origine (code seulement) et ce n'est pas habituellement
ce qui est désiré... dans excel. De plus, il se permettra
d'ajouter





ces
lignes de code en début du module de destination
qu'il faudrait enlever par quelques lignes de code
supplémentaire.






VERSION 1.0 CLASS
BEGIN
MultiUse = -1 'True
End


Salutations !

P.S. Bon samedi quand même !!!




"sabatier" a
écrit









dans
le
message de
news:ue%
bonjour,
je me livre aux douces joies de l'importationnement de
modules








après
exportationnage d'iceux....
pour un module standard, *Fichier/Exporter un fichier*
crée









un
.bas
et
no
problemo pour l'importer
par contre, pour le module ThisWorkbook, c'est moins sympa
car








*Fichier/Exporter un fichier* crée un .cls et à
l'importation








dans
l'autre
classeur, c'est un ThisWorkbook1 qui va s'ajouter et non
le









ThisWorkbook,
le
seul, le vrai, l'authentique, qui va recevoir la procédure
importer...du



coup, c'est moi qui fais une drôle de tête de clone car je
me








pose
la
question de savoir ce qui va se passer ensuite...
si quelque bonne volonté aoûtienne peut m'en dire plus sur
ce








phénomène...un
grand merci par avance
jps




































Avatar
Michel Pierron
Bonsoir Jean-paul;
Sans compter que tout ça revient simplement à ouvrir le classeur Source et
faire Enregistrer sous pour avoir le même résultat, c'est à dire un classeur
contenant toutes les procédures du classeur source; comme quoi, il ne faut
pas hésiter à perdre 1/2 heure pour gagner 5 mn.
;-) MP

"sabatier" a écrit dans le message
de news:%
bonjour michel Pi, bonjour docm
ben moi, j'ai testé et viens de me donner la trouille de ma vie : pas
moyen

d'enregistrer un fichier modèle avec la proc Pearson 39 modifiée Pierron
45....alerte virale...bloodhoundmacro, que ça disait...document non
enregistré...et mon pote alsacien qui ne cessait de me dire "tous nos
brochets sont détruites"...mais je m'appelle pas michel Pé, moi ; je ne me
suis pas précipité sur le forum en poussant des cries d'orfraie, voire de
misange...ah que non, je suis allé rendre visite à mes autres potes de
symantec et hop, niveau de sécurité au plus bas....sacré C Pearson,
va...tout ça parce qu'il y a un "kill" dans sa macro, je suppose...
enfin, michel, pour ton info, je te précise que si on met en comments le
DeleteAllVBA et qu'on superpose divers classeurs source dans le même
classeur destination, s'il y a plusieurs Module1, le second qui sera copié
deviendra Module11 mais je ne suis pas allé plus loin pour voir ce qu'il
en

était d'un troisième...
il n'empêche que je te remercie, docm, d'avoir donné cette proc qui peut
être d'un grand secours en cas de transhumance...
merci encore
jps

"Michel Pierron" a écrit dans le message de
news:
Bonjour docm;
Oui, tu as raison, j'ai loupé celle la; il suffit de remonter d'une
ligne


On
Error Resume Next, sinon il faut créer ou copier la feuille.
Comme quoi, j'aurais du tester...
MP

"docm" a écrit dans le message de
news:
Bonjour Michel Pierron.

Avant d'éxécuter
Set C = Workbooks(TargetF).VBProject.VBComponents.Item(ShName)
je crois qu'il serait judicieux de vérifier qu'une feuille ShName
existe



dans le classeur destination.



"Michel Pierron" wrote in message
news:#
Re Jean-Paul;
Autre chose importante, rajouter une instruction pour sauver le
fichier



après importation des modules car si l'on ferme Excel et qu'une
instruction

astucieuse telle que:
ThisWorkbook.Saved = True ou ThisWorkbook.Close False se trouve dans
la



procédure importé ThisWorkbook_BeforeClose, basta le boulot.
MP

"sabatier" a écrit dans le
message

de news:
bonjour docm, bonjour denis, allez debout les québécois (vous
pourriez




bien
vous lever à une heure où chrisV n'est pas encore couché, non?)
merci d'avoir su trouver cette proc de CPearson qui, soit dit au
passage,


doit être un monsieur hyper-méticuleux : il envisage, avec son

If ActiveWorkbook.Path = "" Then
MsgBox "Veuillez sauvegarder le présent classeur "
Application.Dialogs(xlDialogSaveWorkbook).Show
End If

le cas, fort rare AMHA, où quelque fou aurait pondu des modules
dans





un
classeur NON enregistré ("mais imaginons" comme dirait Bigard dans
son




sketch de la chauve-souris dont la morsure est mortelle dans un
cas





sur
10
millions)...
merci aussi à...michel dont vous noterez, toujours au passage, le
sens




inné
de la médisance, d'avoir rappeler la référence de la bibliothèque
à





ajouter...
malgré ma g...d.b..., je me suis beaucoup intéressé à ces
procs...jusqu'au


moment où j'ai lu avec effroi "DeleteAllVBA" : il n'est pas encore





celui
qui, à l'insu de mon plein gré, voudrait faire péter mon usine à
gaz,




fût-il
l'honorable CPearson ; je ne m'appelle pas michel P, moi et à mes
boutons,


je m'y attache, comme disait ma grand'mère avant qu'elle ne
connaisse




la
restauration des systèmes...
ceci mis à part, je me demande pourquoi ce même CPearson skippe
les





modules
dont le nom serait (ou incluerait?) "CopyCode" : je ne vois nulle
part




que
la proc donne ce nom aux modules copiés dont on peut comprendre
qu'il




ne
soit pas utile de les copier une nouvelle fois....
après tout, je suis peut-être complètement à côté de la plaque
mais





j'ai
confiance dans le québec d'où jaillira certainement une nouvelle
fois




la
lumière...quand le jour aura baigné de la sienne la belle province
('tain,


pour un épilogue, ça c'est un épilogue mais cessez d'applaudir
quand





même)
jps

"docm" a écrit dans le message de
news:uhm$
Bonjour jps.

Si je n'ai pas la berlue, le code suivant (de cpearson) permet
d'importer


le
code de tous les modules ainsi que celui de ThisWorkbook et des
feuilles



choisies.
Est-ce possible?

Sub Copies()
If ActiveWorkbook.Path = "" Then
MsgBox "Veuillez sauvegarder le présent classeur "
Application.Dialogs(xlDialogSaveWorkbook).Show
End If
TargetF = ActiveWorkbook.Name
If Right(TargetF, 4) <> ".xls" Then TargetF = TargetF &
".xls"






SourceP = InputBox("Répertoire de la source", , "C:mes
documents")



SourceF = InputBox("Nom du fichier source", ,
"classeur1.xls")






Workbooks.Open SourceP & "" & SourceF
Workbooks(TargetF).Activate
CopyModules TargetF, SourceF, SourceP

End Sub



Sub CopyModules(TargetF, SourceF, SourceP)

DeleteAllVBA
CopyAllModules SourceF, TargetF
CopySheetCode SourceF, TargetF, "ThisWorkbook"
CopySheetCode SourceF, TargetF, "Feuil3"

End Sub
Sub DeleteAllVBA()
Dim VBComp As VBIDE.VBComponent
Dim VBComps As VBIDE.VBComponents

Set VBComps = ActiveWorkbook.VBProject.VBComponents
For Each VBComp In VBComps

'Skip module containing copycode
If VBComp.Name = "CopyCode" Then GoTo NextOne
Select Case VBComp.Type
Case vbext_ct_StdModule, vbext_ct_MSForm, _
vbext_ct_ClassModule
VBComps.Remove VBComp
Case Else
With VBComp.CodeModule
.DeleteLines 1, .CountOfLines
End With
End Select
NextOne:
Next VBComp

End Sub

Sub CopyAllModules(SourceF, TargetF)
Dim FName As String
Dim VBComp As VBIDE.VBComponent

With Workbooks(SourceF)
FName = .Path & "code.txt"
If Dir(FName) <> "" Then
Kill FName
End If
For Each VBComp In .VBProject.VBComponents
If VBComp.Type <> vbext_ct_Document Then
VBComp.Export FName
Workbooks(TargetF).VBProject.VBComponents.Import
FName






Kill FName
End If
Next VBComp
End With

End Sub

Sub CopySheetCode(SourceF, TargetF, ShName)
Set C = Workbooks(SourceF).VBProject.VBComponents.Item(ShName)
NumLines = C.CodeModule.CountOfLines
For i = 1 To NumLines
strcode = strcode & C.CodeModule.Lines(i, 1) & vbCr
Next

Set C Workbooks(TargetF).VBProject.VBComponents.Item(ShName)
On Error Resume Next
C.CodeModule.AddFromString (strcode)
End Sub



"sabatier" wrote in
message




news:#
waouh....et j'ai lu jusqu'au bout puisque c'est quand même moi
qui






avais
posé la question : je n'aurais jamais du...où avais-je encore
la







tête
à
ce
moment-là?
enfin, merci, denis, pour ces autres esseuplications...ça sent
la






.cls
et
le
titre de MVP, non?... j'ai failli suggérer à misange qu'elle
mette






ton
texte
sur excelabo, mais j'ai peur qu'elle ne fasse pas recette...
bon samedi à toi aussi, denis
jps

"michdenis" a écrit dans le message de
news:
Bonjour JPS,

Ce n'est pas une quetion pour un samedi... ni pour un autre
jour







de
la
semaine ! ;-)

CLS = Extension de fichier signifiant : Code Language
Specification





Cette extension de fichier est apparu avec la version 4 de
Visual






basic
(Le Programme) pour désigner un module de classe.

Ce que tu as observé avec Le "ThisWorkbook" est aussi
présent








dans
le
cas
d'un import-export du code des "Feuil". Et la
raison, ce sont des modules de classes contrairement au
module








standard
(fichier .bas) Concernant les formulaires,
l'extension du fichier export est .Frm (abréviation pour
formulaire).




Dans
ce cas, c'est un peu différent car il y a l'objet
lui-même(formulaire) qui est exporté et importé par la suite
...avec





tout
son contenu ! )

Dans excel, un module de classe sert à définir les
propriétés,








les
méthodes et les événements d'une classe spécifique
d'objets. Par exemple, si tu désires définir un comportement
particulier



pour un groupe de boutons de commande, le nom que tu
donnes au module de classe représente en même temps, un
nouvel








objet
et
une nouvelle classe d'objet. Dans ce module,, tu
insèrera le code particulier à cette nouvelle classe
d'objet.








Le
nom
du
module de classe désigne à la fois le nouvel objet et
la nouvelle classe de l'objet. Mais attention, le module de
classe





ne
crée pas de "nouveaux boutons de commande" mais une
nouvelle classe d'objet ayant ses propres spécifications
contenu







dans
son
module. Le nouvel objet créé sera présent seulement
au moment de l'instantiation de ce dernier avec le mot clé
"New"







dans
le
code.
Dim JPS As New Toto (toto étant le nom du module de classe)

L'exportation et l'importation d'un module de classe
(fichier








.cls)
par
les commandes du menu de la fenêtre VBE, correspond
essentiellement au code de l'objet "Feuil" ou de l'objet
"ThisWorkbook"



qui eux, sont créés par l'application Excel. Dans
excel, le module de classe ne crée lui-même l'objet "Feuil"
ou








"ThisWorkbook" au sens où on les voit dans la fenêtre du
projet VBE. Il ne peut pas en conséquence, exporter ou
importer







un
"objet
physique" mais seulement le code associé à cet
objet.

Pour conserver le code d'un module de classe, l'ami Frédéric
Sigonneau




a
créé ceci : Une procédure qui copie le texte du
module de classe dans un fichier texte.

'========================= > > > > > > > > Sub test()
WriteModuleToTextFile "ThisWorkbook"
End Sub
'========================= > > > > > > > > Sub WriteModuleToTextFile(NomModule$)
Dim FSO As Object
Dim Obj As Object
Dim Txt As Object
Dim Contenu$

Set Obj > > > > ThisWorkbook.VBProject.VBComponents(NomModule).CodeModule
Contenu = Obj.Lines(1, Obj.CountOfLines)

Set FSO = CreateObject("Scripting.FileSystemObject")

Set Txt = FSO.OpenTextFile("d:" & NomModule & ".txt", 2,
True)






Txt.Write Contenu
Txt.Close
End Sub 'fs
'========================= > > > > > > > >

Et si tu veux récupérer le code du fichier créer et
l'insérer








dans
un
module particulier, tu peux utiliser ceci :

'----------------------
With ThisWorkbook
.VBProject.VBComponents("Feuil1").CodeModule.AddFromFile
"c:Feuil1.txt"

End With
'----------------------

Tu remplaces "Feuil1" par le nom du module désiré entre
guillemets






"c:excelFeuil1.txt" est le chemin et le nom du fichier
créé








par
la
procédure de Frédéric.


Si tu as procédé manuellement à l'exportation, l'extension
de








ton
fichier
est .Cls, et si tu désires récupérer le code du
fichier .cls, avec la procédure (3 lignes) soumise de
récupération,





le
module de classe ("l'objet physique") de destination
devra être déjà présent et il devra aussi avoir même nom que
le







module
de
classe d'origine, sinon, il remplacera le module de
classe ("l'objet physique") de destination par le module de
classe






d'origine (code seulement) et ce n'est pas habituellement
ce qui est désiré... dans excel. De plus, il se permettra
d'ajouter





ces
lignes de code en début du module de destination
qu'il faudrait enlever par quelques lignes de code
supplémentaire.






VERSION 1.0 CLASS
BEGIN
MultiUse = -1 'True
End


Salutations !

P.S. Bon samedi quand même !!!




"sabatier" a écrit
dans






le
message de
news:ue%
bonjour,
je me livre aux douces joies de l'importationnement de
modules








après
exportationnage d'iceux....
pour un module standard, *Fichier/Exporter un fichier* crée
un








.bas
et
no
problemo pour l'importer
par contre, pour le module ThisWorkbook, c'est moins sympa
car








*Fichier/Exporter un fichier* crée un .cls et à
l'importation








dans
l'autre
classeur, c'est un ThisWorkbook1 qui va s'ajouter et non le
ThisWorkbook,


le
seul, le vrai, l'authentique, qui va recevoir la procédure
importer...du



coup, c'est moi qui fais une drôle de tête de clone car je
me








pose
la
question de savoir ce qui va se passer ensuite...
si quelque bonne volonté aoûtienne peut m'en dire plus sur
ce








phénomène...un
grand merci par avance
jps
































Avatar
sabatier
mais, mais, c'est totafi vrai, ce que tu dis là, michel....quand je pense
que j'ai failli faire exploser mon PC avec cette proc qui trouve son
équivalent dans une manip' que chacun pratique au quotidien sous la forme
que tu évoques....sacré CPearson (bis)
jps

"Michel Pierron" a écrit dans le message de
news:
Bonsoir Jean-paul;
Sans compter que tout ça revient simplement à ouvrir le classeur Source et
faire Enregistrer sous pour avoir le même résultat, c'est à dire un
classeur

contenant toutes les procédures du classeur source; comme quoi, il ne faut
pas hésiter à perdre 1/2 heure pour gagner 5 mn.
;-) MP

"sabatier" a écrit dans le
message

de news:%
bonjour michel Pi, bonjour docm
ben moi, j'ai testé et viens de me donner la trouille de ma vie : pas
moyen

d'enregistrer un fichier modèle avec la proc Pearson 39 modifiée Pierron
45....alerte virale...bloodhoundmacro, que ça disait...document non
enregistré...et mon pote alsacien qui ne cessait de me dire "tous nos
brochets sont détruites"...mais je m'appelle pas michel Pé, moi ; je ne
me


suis pas précipité sur le forum en poussant des cries d'orfraie, voire
de


misange...ah que non, je suis allé rendre visite à mes autres potes de
symantec et hop, niveau de sécurité au plus bas....sacré C Pearson,
va...tout ça parce qu'il y a un "kill" dans sa macro, je suppose...
enfin, michel, pour ton info, je te précise que si on met en comments le
DeleteAllVBA et qu'on superpose divers classeurs source dans le même
classeur destination, s'il y a plusieurs Module1, le second qui sera
copié


deviendra Module11 mais je ne suis pas allé plus loin pour voir ce qu'il
en

était d'un troisième...
il n'empêche que je te remercie, docm, d'avoir donné cette proc qui peut
être d'un grand secours en cas de transhumance...
merci encore
jps

"Michel Pierron" a écrit dans le message de
news:
Bonjour docm;
Oui, tu as raison, j'ai loupé celle la; il suffit de remonter d'une
ligne


On
Error Resume Next, sinon il faut créer ou copier la feuille.
Comme quoi, j'aurais du tester...
MP

"docm" a écrit dans le message de
news:
Bonjour Michel Pierron.

Avant d'éxécuter
Set C = Workbooks(TargetF).VBProject.VBComponents.Item(ShName)
je crois qu'il serait judicieux de vérifier qu'une feuille ShName
existe



dans le classeur destination.



"Michel Pierron" wrote in message
news:#
Re Jean-Paul;
Autre chose importante, rajouter une instruction pour sauver le
fichier



après importation des modules car si l'on ferme Excel et qu'une
instruction

astucieuse telle que:
ThisWorkbook.Saved = True ou ThisWorkbook.Close False se trouve
dans





la
procédure importé ThisWorkbook_BeforeClose, basta le boulot.
MP

"sabatier" a écrit dans
le





message
de news:
bonjour docm, bonjour denis, allez debout les québécois (vous
pourriez




bien
vous lever à une heure où chrisV n'est pas encore couché, non?)
merci d'avoir su trouver cette proc de CPearson qui, soit dit au
passage,


doit être un monsieur hyper-méticuleux : il envisage, avec son

If ActiveWorkbook.Path = "" Then
MsgBox "Veuillez sauvegarder le présent classeur "
Application.Dialogs(xlDialogSaveWorkbook).Show
End If

le cas, fort rare AMHA, où quelque fou aurait pondu des modules
dans





un
classeur NON enregistré ("mais imaginons" comme dirait Bigard
dans






son
sketch de la chauve-souris dont la morsure est mortelle dans un
cas





sur
10
millions)...
merci aussi à...michel dont vous noterez, toujours au passage,
le






sens
inné
de la médisance, d'avoir rappeler la référence de la
bibliothèque






à
ajouter...
malgré ma g...d.b..., je me suis beaucoup intéressé à ces
procs...jusqu'au


moment où j'ai lu avec effroi "DeleteAllVBA" : il n'est pas
encore







celui
qui, à l'insu de mon plein gré, voudrait faire péter mon usine à
gaz,




fût-il
l'honorable CPearson ; je ne m'appelle pas michel P, moi et à
mes






boutons,
je m'y attache, comme disait ma grand'mère avant qu'elle ne
connaisse




la
restauration des systèmes...
ceci mis à part, je me demande pourquoi ce même CPearson skippe
les





modules
dont le nom serait (ou incluerait?) "CopyCode" : je ne vois
nulle






part
que
la proc donne ce nom aux modules copiés dont on peut comprendre
qu'il




ne
soit pas utile de les copier une nouvelle fois....
après tout, je suis peut-être complètement à côté de la plaque
mais





j'ai
confiance dans le québec d'où jaillira certainement une nouvelle
fois




la
lumière...quand le jour aura baigné de la sienne la belle
province






('tain,
pour un épilogue, ça c'est un épilogue mais cessez d'applaudir
quand





même)
jps

"docm" a écrit dans le message de
news:uhm$
Bonjour jps.

Si je n'ai pas la berlue, le code suivant (de cpearson) permet
d'importer


le
code de tous les modules ainsi que celui de ThisWorkbook et
des







feuilles
choisies.
Est-ce possible?

Sub Copies()
If ActiveWorkbook.Path = "" Then
MsgBox "Veuillez sauvegarder le présent classeur "
Application.Dialogs(xlDialogSaveWorkbook).Show
End If
TargetF = ActiveWorkbook.Name
If Right(TargetF, 4) <> ".xls" Then TargetF = TargetF &
".xls"






SourceP = InputBox("Répertoire de la source", , "C:mes
documents")



SourceF = InputBox("Nom du fichier source", ,
"classeur1.xls")






Workbooks.Open SourceP & "" & SourceF
Workbooks(TargetF).Activate
CopyModules TargetF, SourceF, SourceP

End Sub



Sub CopyModules(TargetF, SourceF, SourceP)

DeleteAllVBA
CopyAllModules SourceF, TargetF
CopySheetCode SourceF, TargetF, "ThisWorkbook"
CopySheetCode SourceF, TargetF, "Feuil3"

End Sub
Sub DeleteAllVBA()
Dim VBComp As VBIDE.VBComponent
Dim VBComps As VBIDE.VBComponents

Set VBComps = ActiveWorkbook.VBProject.VBComponents
For Each VBComp In VBComps

'Skip module containing copycode
If VBComp.Name = "CopyCode" Then GoTo NextOne
Select Case VBComp.Type
Case vbext_ct_StdModule, vbext_ct_MSForm, _
vbext_ct_ClassModule
VBComps.Remove VBComp
Case Else
With VBComp.CodeModule
.DeleteLines 1, .CountOfLines
End With
End Select
NextOne:
Next VBComp

End Sub

Sub CopyAllModules(SourceF, TargetF)
Dim FName As String
Dim VBComp As VBIDE.VBComponent

With Workbooks(SourceF)
FName = .Path & "code.txt"
If Dir(FName) <> "" Then
Kill FName
End If
For Each VBComp In .VBProject.VBComponents
If VBComp.Type <> vbext_ct_Document Then
VBComp.Export FName
Workbooks(TargetF).VBProject.VBComponents.Import
FName






Kill FName
End If
Next VBComp
End With

End Sub

Sub CopySheetCode(SourceF, TargetF, ShName)
Set C = Workbooks(SourceF).VBProject.VBComponents.Item(ShName)
NumLines = C.CodeModule.CountOfLines
For i = 1 To NumLines
strcode = strcode & C.CodeModule.Lines(i, 1) & vbCr
Next

Set C > Workbooks(TargetF).VBProject.VBComponents.Item(ShName)
On Error Resume Next
C.CodeModule.AddFromString (strcode)
End Sub



"sabatier" wrote in
message




news:#
waouh....et j'ai lu jusqu'au bout puisque c'est quand même
moi








qui
avais
posé la question : je n'aurais jamais du...où avais-je
encore








la
tête
à
ce
moment-là?
enfin, merci, denis, pour ces autres esseuplications...ça
sent








la
.cls
et
le
titre de MVP, non?... j'ai failli suggérer à misange qu'elle
mette






ton
texte
sur excelabo, mais j'ai peur qu'elle ne fasse pas recette...
bon samedi à toi aussi, denis
jps

"michdenis" a écrit dans le message
de








news:
Bonjour JPS,

Ce n'est pas une quetion pour un samedi... ni pour un
autre









jour
de
la
semaine ! ;-)

CLS = Extension de fichier signifiant : Code Language
Specification





Cette extension de fichier est apparu avec la version 4 de
Visual






basic
(Le Programme) pour désigner un module de classe.

Ce que tu as observé avec Le "ThisWorkbook" est aussi
présent








dans
le
cas
d'un import-export du code des "Feuil". Et la
raison, ce sont des modules de classes contrairement au
module








standard
(fichier .bas) Concernant les formulaires,
l'extension du fichier export est .Frm (abréviation pour
formulaire).




Dans
ce cas, c'est un peu différent car il y a l'objet
lui-même(formulaire) qui est exporté et importé par la
suite









...avec
tout
son contenu ! )

Dans excel, un module de classe sert à définir les
propriétés,








les
méthodes et les événements d'une classe spécifique
d'objets. Par exemple, si tu désires définir un
comportement









particulier
pour un groupe de boutons de commande, le nom que tu
donnes au module de classe représente en même temps, un
nouvel








objet
et
une nouvelle classe d'objet. Dans ce module,, tu
insèrera le code particulier à cette nouvelle classe
d'objet.








Le
nom
du
module de classe désigne à la fois le nouvel objet et
la nouvelle classe de l'objet. Mais attention, le module
de









classe
ne
crée pas de "nouveaux boutons de commande" mais une
nouvelle classe d'objet ayant ses propres spécifications
contenu







dans
son
module. Le nouvel objet créé sera présent seulement
au moment de l'instantiation de ce dernier avec le mot clé
"New"







dans
le
code.
Dim JPS As New Toto (toto étant le nom du module de
classe)










L'exportation et l'importation d'un module de classe
(fichier








.cls)
par
les commandes du menu de la fenêtre VBE, correspond
essentiellement au code de l'objet "Feuil" ou de l'objet
"ThisWorkbook"



qui eux, sont créés par l'application Excel. Dans
excel, le module de classe ne crée lui-même l'objet
"Feuil"









ou
"ThisWorkbook" au sens où on les voit dans la fenêtre du
projet VBE. Il ne peut pas en conséquence, exporter ou
importer







un
"objet
physique" mais seulement le code associé à cet
objet.

Pour conserver le code d'un module de classe, l'ami
Frédéric









Sigonneau
a
créé ceci : Une procédure qui copie le texte du
module de classe dans un fichier texte.

'========================= > > > > > > > > > Sub test()
WriteModuleToTextFile "ThisWorkbook"
End Sub
'========================= > > > > > > > > > Sub WriteModuleToTextFile(NomModule$)
Dim FSO As Object
Dim Obj As Object
Dim Txt As Object
Dim Contenu$

Set Obj > > > > > ThisWorkbook.VBProject.VBComponents(NomModule).CodeModule
Contenu = Obj.Lines(1, Obj.CountOfLines)

Set FSO = CreateObject("Scripting.FileSystemObject")

Set Txt = FSO.OpenTextFile("d:" & NomModule & ".txt",
2,









True)
Txt.Write Contenu
Txt.Close
End Sub 'fs
'========================= > > > > > > > > >

Et si tu veux récupérer le code du fichier créer et
l'insérer








dans
un
module particulier, tu peux utiliser ceci :

'----------------------
With ThisWorkbook

.VBProject.VBComponents("Feuil1").CodeModule.AddFromFile









"c:Feuil1.txt"
End With
'----------------------

Tu remplaces "Feuil1" par le nom du module désiré entre
guillemets






"c:excelFeuil1.txt" est le chemin et le nom du fichier
créé








par
la
procédure de Frédéric.


Si tu as procédé manuellement à l'exportation, l'extension
de








ton
fichier
est .Cls, et si tu désires récupérer le code du
fichier .cls, avec la procédure (3 lignes) soumise de
récupération,





le
module de classe ("l'objet physique") de destination
devra être déjà présent et il devra aussi avoir même nom
que









le
module
de
classe d'origine, sinon, il remplacera le module de
classe ("l'objet physique") de destination par le module
de









classe
d'origine (code seulement) et ce n'est pas habituellement
ce qui est désiré... dans excel. De plus, il se permettra
d'ajouter





ces
lignes de code en début du module de destination
qu'il faudrait enlever par quelques lignes de code
supplémentaire.






VERSION 1.0 CLASS
BEGIN
MultiUse = -1 'True
End


Salutations !

P.S. Bon samedi quand même !!!




"sabatier" a
écrit









dans
le
message de
news:ue%
bonjour,
je me livre aux douces joies de l'importationnement de
modules








après
exportationnage d'iceux....
pour un module standard, *Fichier/Exporter un fichier*
crée









un
.bas
et
no
problemo pour l'importer
par contre, pour le module ThisWorkbook, c'est moins sympa
car








*Fichier/Exporter un fichier* crée un .cls et à
l'importation








dans
l'autre
classeur, c'est un ThisWorkbook1 qui va s'ajouter et non
le









ThisWorkbook,
le
seul, le vrai, l'authentique, qui va recevoir la procédure
importer...du



coup, c'est moi qui fais une drôle de tête de clone car je
me








pose
la
question de savoir ce qui va se passer ensuite...
si quelque bonne volonté aoûtienne peut m'en dire plus sur
ce








phénomène...un
grand merci par avance
jps




































1 2 3