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
Jean-François Aubert
Salut Jean-Paul ,
chez moi, Excel 2000, c'est aussi un ThisWorkbook1 qui s'ajoute,
mais dans la catégorie Modules de classe, et les proc de ce ThisWorkbook1
sont allégrement ignorées...

affaire à suivre....


--
Amicalement

Jean-François Aubert
{Vaudois de la Côte Lémanique}


"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
Alain CROS
Bonjour.

Le module ThisWorkbook est un module de classe qui ne peut être supprimé.
Lorsqu'on importe le fichier ThisWorkbook.cls, il va se ranger dans les modules de classe et se renomme en ThisWorkbook1 pour ne pas
faire doublon au niveau du nom avec le vrai, le seul, l'unique ThisWorkbook du classeur qui ne peut pas être supprimé.
Ce module de classe ThisWorkbook1 représente un objet avec des évènements qui pour être utilisé doit être instancié.
Dans la partie déclaration de ThisWorkbook1 il faut rajouter cette ligne :
Public WithEvents Workbook As Workbook
Et dans un module standard :
Public WbK As New ThisWorkbook1
Sub Auto_Open()
Set WbK.Workbook = ThisWorkbook
End Sub

Alain CROS

"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
michdenis
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
michdenis
Bonjour Alain,

" l'unique ThisWorkbook du classeur qui ne peut pas être supprimé"

Je peux t'envoyer un classeur qui n'a pas de "ThisWorkbook". Évidemment, je ne l'ai pas supprimé par les commandes du menu de
la fenêtre vbe .... mais je l'ai remplacé par un autre module de classe ...

Pour ce faire :
A ) créer un fichier .cls lors de l'exportation d'un module de classe

B ) Utiliser ce type de ligne de commande :

With ThisWorkbook
.VBProject.VBComponents("ThisWorkbook").CodeModule.AddFromFile "c:excelDenis.cls"
End With

Je n'ai pas poussé plus loin l'intérêt de la chose si il y en a ...!!!

;-))


Salutations!



"Alain CROS" a écrit dans le message de news:%
Bonjour.

Le module ThisWorkbook est un module de classe qui ne peut être supprimé.
Lorsqu'on importe le fichier ThisWorkbook.cls, il va se ranger dans les modules de classe et se renomme en ThisWorkbook1 pour
ne pas
faire doublon au niveau du nom avec le vrai, le seul, l'unique ThisWorkbook du classeur qui ne peut pas être supprimé.
Ce module de classe ThisWorkbook1 représente un objet avec des évènements qui pour être utilisé doit être instancié.
Dans la partie déclaration de ThisWorkbook1 il faut rajouter cette ligne :
Public WithEvents Workbook As Workbook
Et dans un module standard :
Public WbK As New ThisWorkbook1
Sub Auto_Open()
Set WbK.Workbook = ThisWorkbook
End Sub

Alain CROS

"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
michdenis
Ne pas tenir compte du message précédent... il y avait seulement une coquille dans ma façon de procéder ...le ThisWorkbook
avait bien changer de nom ... mais était toujours présent ...

Désolé Alain ..


Salutations!
Avatar
sabatier
merci, alain, pour ces esseuplications....compte tenu de tout cela, je vais
importer à la mimine....c'est plus sûr
jps

"Alain CROS" a écrit dans le message de
news:%
Bonjour.

Le module ThisWorkbook est un module de classe qui ne peut être supprimé.
Lorsqu'on importe le fichier ThisWorkbook.cls, il va se ranger dans les
modules de classe et se renomme en ThisWorkbook1 pour ne pas

faire doublon au niveau du nom avec le vrai, le seul, l'unique
ThisWorkbook du classeur qui ne peut pas être supprimé.

Ce module de classe ThisWorkbook1 représente un objet avec des évènements
qui pour être utilisé doit être instancié.

Dans la partie déclaration de ThisWorkbook1 il faut rajouter cette ligne :
Public WithEvents Workbook As Workbook
Et dans un module standard :
Public WbK As New ThisWorkbook1
Sub Auto_Open()
Set WbK.Workbook = ThisWorkbook
End Sub

Alain CROS

"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
Jacquouille
Bonsoir
Question à 5 balles : Et si Jean-Paul recommence la manoeuvre, le this
machin-le Vrai devient This machin2 et annule ou pas le 1 ?
Vous pouvez répondre lundi, mon WE n'en découle pas....bien qu'il pleuve à
seau ici -)

--
Jacquouille conseille : http://www.excelabo.net


"Alain CROS" a écrit dans le message de
news:%
Bonjour.

Le module ThisWorkbook est un module de classe qui ne peut être supprimé.
Lorsqu'on importe le fichier ThisWorkbook.cls, il va se ranger dans les
modules de classe et se renomme en ThisWorkbook1 pour ne pas

faire doublon au niveau du nom avec le vrai, le seul, l'unique
ThisWorkbook du classeur qui ne peut pas être supprimé.

Ce module de classe ThisWorkbook1 représente un objet avec des évènements
qui pour être utilisé doit être instancié.

Dans la partie déclaration de ThisWorkbook1 il faut rajouter cette ligne :
Public WithEvents Workbook As Workbook
Et dans un module standard :
Public WbK As New ThisWorkbook1
Sub Auto_Open()
Set WbK.Workbook = ThisWorkbook
End Sub

Alain CROS

"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
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
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
michdenis
Bonsoir docm,

" Si je n'ai pas la berlue ..."
**** attention ça ne devrait pas tarder ... ;-)

Pour l'ami JPS qui a passé une partie de la nuit dans sa cave à arroser les bons moments d'une réminiscence précoce, tu
aurais pu spécifier que ces procédures requièrent la bibliothèque suivante :

"Microsoft Visual basic for applications Extensibility 5.3"

Pour ce qui est du reste, je te laisse expliquer à JPS ce que font ces procédures ....en espérant que JPS n'a pas trop la
gueule de bois ce matin !!! ;-))


Salutations!





"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