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

exporter/importer le code de feuille et les modules VBA

9 réponses
Avatar
J
Bonjour
Je cherche à exporter le code, en particulier de feuille, d'un fichier
et importer ce code dans un autre fichier plus tard.

J'ai essayé le code suivant (je n'en connais plus l'auteur) qui plante
dès la déclaration de VBComp, et qui de toutes façons ne me donne rien.
'********
Sub ExportAllVBA()
Dim VBComp As VBIDE.VBComponent
'erreur de compil :Type défini par l'utilisateur non défini
Dim Sfx As String

For Each VBComp In ActiveWorkbook.VBProject.VBComponents
Select Case VBComp.Type
Case vbext_ct_ClassModule, vbext_ct_Document
Sfx = ".cls"
Case vbext_ct_MSForm
Sfx = ".frm"
Case vbext_ct_StdModule
Sfx = ".bas"
Case Else
Sfx = ""
End Select
If Sfx <> "" Then
VBComp.Export _
Filename:=ActiveWorkbook.Path & "\" & VBComp.Name & Sfx
End If
Next VBComp
End Sub
'********

Sinon j'ai un code pour supprimer tout le code qui fonctionne bien,
malgé le fait que j'ai du mettre les 2 lignes Dim en commentaire.
'********
Sub DeleteAllVBA()
Dim VBComp As VBIDE.VBComponent '
Dim VBComps As VBIDE.VBComponents '

Set VBComps = ActiveWorkbook.VBProject.VBComponents

For Each VBComp In VBComps
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
Next VBComp
End Sub
'********
Qui aurait une idée, svp
Merci
@+
J@@

9 réponses

Avatar
MichDenis
Pour pouvoir déclarer une variable As Vbide.Vbcomponent,
tu dois ajouter la bibliothèque suivante à partir du menu de la
fenêtre de l'éditeur de code : menu / outils / références :

Nom description de la bibliothèque :
Microsoft Visual Basic for Applications Extensibility 5.3

Le fichier responsable sous windows xp pro:
C:Program FilesFichiers communsMicrosoft SharedVBAVBA6VBE6EXT.OLB

Le nom de la bibliothèque : VBIDE

Il y a un "hic" à propos de cette bibliothèque... Microsoft a modifié son nom
en passant de la version Excel 97 à la version 2000. Conséquence, si tu charges
la bibliothèques Version 97, elle ne fonctionne pas avec les versions plus récentes
et l'inverse est aussi vrai.

Solution, au lieu d'utiliser des liaisons précoces (faire référence directement
au nom de la bibliothèque et des constantes "textes" se référant à la bibliothèque)
tu peux utiliser les mêmes macros avec des liaisons tardives...en déclararant les
variables AS OBJECT

Dim VBComp As OBJECT

Et si tu utilises dans la fenêtre de l'éditeur de code, le raccourci clavier F2,
une fenêtre "Explorateur d'objets" s'ouvrira et là, en recherchant chacune
des constantes textes, tu pourras les remplacer par leur constante numérique

Exemple :
vbext_ct_ClassModule = 2
Const vbext_ct_Document = 100

Les constantes numériques apparaissent dans le bas de la fenêtre après
avoir fait la recherche de la constante dans l'explorateur d'objets.

Et ça, devrait te permettre de ne pas avoir à charger la bibliothèque et
laisser le programme se débrouiller ....!




"J@@" a écrit dans le message de news:
%
Bonjour
Je cherche à exporter le code, en particulier de feuille, d'un fichier
et importer ce code dans un autre fichier plus tard.

J'ai essayé le code suivant (je n'en connais plus l'auteur) qui plante
dès la déclaration de VBComp, et qui de toutes façons ne me donne rien.
'********
Sub ExportAllVBA()
Dim VBComp As VBIDE.VBComponent
'erreur de compil :Type défini par l'utilisateur non défini
Dim Sfx As String

For Each VBComp In ActiveWorkbook.VBProject.VBComponents
Select Case VBComp.Type
Case vbext_ct_ClassModule, vbext_ct_Document
Sfx = ".cls"
Case vbext_ct_MSForm
Sfx = ".frm"
Case vbext_ct_StdModule
Sfx = ".bas"
Case Else
Sfx = ""
End Select
If Sfx <> "" Then
VBComp.Export _
Filename:¬tiveWorkbook.Path & "" & VBComp.Name & Sfx
End If
Next VBComp
End Sub
'********

Sinon j'ai un code pour supprimer tout le code qui fonctionne bien,
malgé le fait que j'ai du mettre les 2 lignes Dim en commentaire.
'********
Sub DeleteAllVBA()
Dim VBComp As VBIDE.VBComponent '
Dim VBComps As VBIDE.VBComponents '

Set VBComps = ActiveWorkbook.VBProject.VBComponents

For Each VBComp In VBComps
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
Next VBComp
End Sub
'********
Qui aurait une idée, svp
Merci
@+
J@@
Avatar
J
Bonjour MichDenis
et merci
Je suis sous XL2K et Win XP Pro (maison) Win 2K (travail)
Je vais suivre ton conseil et déclarant "as object"
Je teste et je reviens si j'ai des difficultés (c'est l'heure de la
soupe):-)
@+
J@@


Pour pouvoir déclarer une variable As Vbide.Vbcomponent,
tu dois ajouter la bibliothèque suivante à partir du menu de la
fenêtre de l'éditeur de code : menu / outils / références :

Nom description de la bibliothèque :
Microsoft Visual Basic for Applications Extensibility 5.3

Le fichier responsable sous windows xp pro:
C:Program FilesFichiers communsMicrosoft SharedVBAVBA6VBE6EXT.OLB

Le nom de la bibliothèque : VBIDE

Il y a un "hic" à propos de cette bibliothèque... Microsoft a modifié son nom
en passant de la version Excel 97 à la version 2000. Conséquence, si tu charges
la bibliothèques Version 97, elle ne fonctionne pas avec les versions plus récentes
et l'inverse est aussi vrai.

Solution, au lieu d'utiliser des liaisons précoces (faire référence directement
au nom de la bibliothèque et des constantes "textes" se référant à la bibliothèque)
tu peux utiliser les mêmes macros avec des liaisons tardives...en déclararant les
variables AS OBJECT

Dim VBComp As OBJECT

Et si tu utilises dans la fenêtre de l'éditeur de code, le raccourci clavier F2,
une fenêtre "Explorateur d'objets" s'ouvrira et là, en recherchant chacune
des constantes textes, tu pourras les remplacer par leur constante numérique

Exemple :
vbext_ct_ClassModule = 2
Const vbext_ct_Document = 100

Les constantes numériques apparaissent dans le bas de la fenêtre après
avoir fait la recherche de la constante dans l'explorateur d'objets.

Et ça, devrait te permettre de ne pas avoir à charger la bibliothèque et
laisser le programme se débrouiller ....!




"J@@" a écrit dans le message de news:
%
Bonjour
Je cherche à exporter le code, en particulier de feuille, d'un fichier
et importer ce code dans un autre fichier plus tard.

J'ai essayé le code suivant (je n'en connais plus l'auteur) qui plante
dès la déclaration de VBComp, et qui de toutes façons ne me donne rien.
'********
Sub ExportAllVBA()
Dim VBComp As VBIDE.VBComponent
'erreur de compil :Type défini par l'utilisateur non défini
Dim Sfx As String

For Each VBComp In ActiveWorkbook.VBProject.VBComponents
Select Case VBComp.Type
Case vbext_ct_ClassModule, vbext_ct_Document
Sfx = ".cls"
Case vbext_ct_MSForm
Sfx = ".frm"
Case vbext_ct_StdModule
Sfx = ".bas"
Case Else
Sfx = ""
End Select
If Sfx <> "" Then
VBComp.Export _
Filename:¬tiveWorkbook.Path & "" & VBComp.Name & Sfx
End If
Next VBComp
End Sub
'********

Sinon j'ai un code pour supprimer tout le code qui fonctionne bien,
malgé le fait que j'ai du mettre les 2 lignes Dim en commentaire.
'********
Sub DeleteAllVBA()
Dim VBComp As VBIDE.VBComponent '
Dim VBComps As VBIDE.VBComponents '

Set VBComps = ActiveWorkbook.VBProject.VBComponents

For Each VBComp In VBComps
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
Next VBComp
End Sub
'********
Qui aurait une idée, svp
Merci
@+
J@@




Avatar
JLuc
*Bonjour J@@*,
Il ne serait pas plus simple de copier le code dans un fichier texte
puis de l'importer/coller dans le classeur ?

Bonjour MichDenis
et merci
Je suis sous XL2K et Win XP Pro (maison) Win 2K (travail)
Je vais suivre ton conseil et déclarant "as object"
Je teste et je reviens si j'ai des difficultés (c'est l'heure de la soupe):-)
@+
J@@


Pour pouvoir déclarer une variable As Vbide.Vbcomponent,
tu dois ajouter la bibliothèque suivante à partir du menu de la
fenêtre de l'éditeur de code : menu / outils / références :

Nom description de la bibliothèque :
Microsoft Visual Basic for Applications Extensibility 5.3

Le fichier responsable sous windows xp pro:
C:Program FilesFichiers communsMicrosoft SharedVBAVBA6VBE6EXT.OLB

Le nom de la bibliothèque : VBIDE

Il y a un "hic" à propos de cette bibliothèque... Microsoft a modifié son
nom
en passant de la version Excel 97 à la version 2000. Conséquence, si tu
charges
la bibliothèques Version 97, elle ne fonctionne pas avec les versions plus
récentes
et l'inverse est aussi vrai.

Solution, au lieu d'utiliser des liaisons précoces (faire référence
directement
au nom de la bibliothèque et des constantes "textes" se référant à la
bibliothèque)
tu peux utiliser les mêmes macros avec des liaisons tardives...en
déclararant les
variables AS OBJECT

Dim VBComp As OBJECT

Et si tu utilises dans la fenêtre de l'éditeur de code, le raccourci
clavier F2,
une fenêtre "Explorateur d'objets" s'ouvrira et là, en recherchant chacune
des constantes textes, tu pourras les remplacer par leur constante
numérique

Exemple :
vbext_ct_ClassModule = 2
Const vbext_ct_Document = 100

Les constantes numériques apparaissent dans le bas de la fenêtre après
avoir fait la recherche de la constante dans l'explorateur d'objets.

Et ça, devrait te permettre de ne pas avoir à charger la bibliothèque et
laisser le programme se débrouiller ....!




"J@@" a écrit dans le message de news:
%
Bonjour
Je cherche à exporter le code, en particulier de feuille, d'un fichier
et importer ce code dans un autre fichier plus tard.

J'ai essayé le code suivant (je n'en connais plus l'auteur) qui plante
dès la déclaration de VBComp, et qui de toutes façons ne me donne rien.
'********
Sub ExportAllVBA()
Dim VBComp As VBIDE.VBComponent
'erreur de compil :Type défini par l'utilisateur non défini
Dim Sfx As String

For Each VBComp In ActiveWorkbook.VBProject.VBComponents
Select Case VBComp.Type
Case vbext_ct_ClassModule, vbext_ct_Document
Sfx = ".cls"
Case vbext_ct_MSForm
Sfx = ".frm"
Case vbext_ct_StdModule
Sfx = ".bas"
Case Else
Sfx = ""
End Select
If Sfx <> "" Then
VBComp.Export _
Filename:¬tiveWorkbook.Path & "" & VBComp.Name & Sfx
End If
Next VBComp
End Sub
'********

Sinon j'ai un code pour supprimer tout le code qui fonctionne bien,
malgé le fait que j'ai du mettre les 2 lignes Dim en commentaire.
'********
Sub DeleteAllVBA()
Dim VBComp As VBIDE.VBComponent '
Dim VBComps As VBIDE.VBComponents '

Set VBComps = ActiveWorkbook.VBProject.VBComponents

For Each VBComp In VBComps
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
Next VBComp
End Sub
'********
Qui aurait une idée, svp
Merci
@+
J@@





--
____
( O | O )
--
_oooO_ JLuc _Oooo_

O-O


Avatar
J
Bonjour Jluc
Tout à fait d'accord.
Mais l'opération doit se passer sur la machine d'un utilisateur
basique++ qui récupère un fichier abominablement mal fichu, doit bosser
dessus puis le réexpédier aussi mal fichu.

Mon idée :
de façon transparente, lui importer un peu de code, en particulier dans
le code de feuille (en effet à partir de là où le code sera, format
texte ou autre)puis à la fin remettre le fichier dans son aspect
initial, sans code et le renvoyer.

Pour le moment, j'exporte bien avec l'idée de MichDenis, mais mon code
feuille apparait sous un format .cls, un peu bizarre où il n'y a pas que
le code de feuille.

Et je n'ai rien trouvé dans l'éditeur pour exporter le code feuille,
comme on exporte un module.
Si tu as une idée, :-)
Merci+@+
J@@



*Bonjour J@@*,
Il ne serait pas plus simple de copier le code dans un fichier texte
puis de l'importer/coller dans le classeur ?

Bonjour MichDenis
et merci
Je suis sous XL2K et Win XP Pro (maison) Win 2K (travail)
Je vais suivre ton conseil et déclarant "as object"
Je teste et je reviens si j'ai des difficultés (c'est l'heure de la
soupe):-)
@+
J@@


Pour pouvoir déclarer une variable As Vbide.Vbcomponent,
tu dois ajouter la bibliothèque suivante à partir du menu de la
fenêtre de l'éditeur de code : menu / outils / références :

Nom description de la bibliothèque :
Microsoft Visual Basic for Applications Extensibility 5.3

Le fichier responsable sous windows xp pro:
C:Program FilesFichiers communsMicrosoft SharedVBAVBA6VBE6EXT.OLB

Le nom de la bibliothèque : VBIDE

Il y a un "hic" à propos de cette bibliothèque... Microsoft a modifié
son nom
en passant de la version Excel 97 à la version 2000. Conséquence, si
tu charges
la bibliothèques Version 97, elle ne fonctionne pas avec les versions
plus récentes
et l'inverse est aussi vrai.

Solution, au lieu d'utiliser des liaisons précoces (faire référence
directement
au nom de la bibliothèque et des constantes "textes" se référant à la
bibliothèque)
tu peux utiliser les mêmes macros avec des liaisons tardives...en
déclararant les
variables AS OBJECT

Dim VBComp As OBJECT

Et si tu utilises dans la fenêtre de l'éditeur de code, le raccourci
clavier F2,
une fenêtre "Explorateur d'objets" s'ouvrira et là, en recherchant
chacune
des constantes textes, tu pourras les remplacer par leur constante
numérique

Exemple :
vbext_ct_ClassModule = 2
Const vbext_ct_Document = 100

Les constantes numériques apparaissent dans le bas de la fenêtre après
avoir fait la recherche de la constante dans l'explorateur d'objets.

Et ça, devrait te permettre de ne pas avoir à charger la bibliothèque et
laisser le programme se débrouiller ....!




"J@@" a écrit dans le message de news:
%
Bonjour
Je cherche à exporter le code, en particulier de feuille, d'un fichier
et importer ce code dans un autre fichier plus tard.

J'ai essayé le code suivant (je n'en connais plus l'auteur) qui plante
dès la déclaration de VBComp, et qui de toutes façons ne me donne rien.
'********
Sub ExportAllVBA()
Dim VBComp As VBIDE.VBComponent
'erreur de compil :Type défini par l'utilisateur non défini
Dim Sfx As String

For Each VBComp In ActiveWorkbook.VBProject.VBComponents
Select Case VBComp.Type
Case vbext_ct_ClassModule, vbext_ct_Document
Sfx = ".cls"
Case vbext_ct_MSForm
Sfx = ".frm"
Case vbext_ct_StdModule
Sfx = ".bas"
Case Else
Sfx = ""
End Select
If Sfx <> "" Then
VBComp.Export _
Filename:¬tiveWorkbook.Path & "" & VBComp.Name & Sfx
End If
Next VBComp
End Sub
'********

Sinon j'ai un code pour supprimer tout le code qui fonctionne bien,
malgé le fait que j'ai du mettre les 2 lignes Dim en commentaire.
'********
Sub DeleteAllVBA()
Dim VBComp As VBIDE.VBComponent '
Dim VBComps As VBIDE.VBComponents '

Set VBComps = ActiveWorkbook.VBProject.VBComponents

For Each VBComp In VBComps
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
Next VBComp
End Sub
'********
Qui aurait une idée, svp
Merci
@+
J@@








Avatar
J
Re-bonjour
le code obtenu suite à tes indications fonctionne bien.
Le code de feuille qui m'intéresse le plus se trouve en Feuil11.cls.
On n'obtient pas un fichier texte pur genre .bas.
Sinon, comment faire pour réimporter ce code dans un autre fichier, stp?
merci
@+
J@@

'********
Sub ExportAllVBA()
Dim VBComp As Object
For Each VBComp In ActiveWorkbook.VBProject.VBComponents
Select Case VBComp.Type
Case 2, 100
Sfx = ".cls"
Case 3
Sfx = ".frm"
Case 1
Sfx = ".bas"
Case Else
Sfx = ""
End Select
If Sfx <> "" Then
VBComp.Export _
Filename:¬tiveWorkbook.Path & "" & VBComp.Name & Sfx
End If
Next VBComp
End Sub
'********

Pour pouvoir déclarer une variable As Vbide.Vbcomponent,
tu dois ajouter la bibliothèque suivante à partir du menu de la
fenêtre de l'éditeur de code : menu / outils / références :

Nom description de la bibliothèque :
Microsoft Visual Basic for Applications Extensibility 5.3

Le fichier responsable sous windows xp pro:
C:Program FilesFichiers communsMicrosoft SharedVBAVBA6VBE6EXT.OLB

Le nom de la bibliothèque : VBIDE

Il y a un "hic" à propos de cette bibliothèque... Microsoft a modifié son nom
en passant de la version Excel 97 à la version 2000. Conséquence, si tu charges
la bibliothèques Version 97, elle ne fonctionne pas avec les versions plus récentes
et l'inverse est aussi vrai.

Solution, au lieu d'utiliser des liaisons précoces (faire référence directement
au nom de la bibliothèque et des constantes "textes" se référant à la bibliothèque)
tu peux utiliser les mêmes macros avec des liaisons tardives...en déclararant les
variables AS OBJECT

Dim VBComp As OBJECT

Et si tu utilises dans la fenêtre de l'éditeur de code, le raccourci clavier F2,
une fenêtre "Explorateur d'objets" s'ouvrira et là, en recherchant chacune
des constantes textes, tu pourras les remplacer par leur constante numérique

Exemple :
vbext_ct_ClassModule = 2
Const vbext_ct_Document = 100

Les constantes numériques apparaissent dans le bas de la fenêtre après
avoir fait la recherche de la constante dans l'explorateur d'objets.

Et ça, devrait te permettre de ne pas avoir à charger la bibliothèque et
laisser le programme se débrouiller ....!




"J@@" a écrit dans le message de news:
%
Bonjour
Je cherche à exporter le code, en particulier de feuille, d'un fichier
et importer ce code dans un autre fichier plus tard.

J'ai essayé le code suivant (je n'en connais plus l'auteur) qui plante
dès la déclaration de VBComp, et qui de toutes façons ne me donne rien.
'********
Sub ExportAllVBA()
Dim VBComp As VBIDE.VBComponent
'erreur de compil :Type défini par l'utilisateur non défini
Dim Sfx As String

For Each VBComp In ActiveWorkbook.VBProject.VBComponents
Select Case VBComp.Type
Case vbext_ct_ClassModule, vbext_ct_Document
Sfx = ".cls"
Case vbext_ct_MSForm
Sfx = ".frm"
Case vbext_ct_StdModule
Sfx = ".bas"
Case Else
Sfx = ""
End Select
If Sfx <> "" Then
VBComp.Export _
Filename:¬tiveWorkbook.Path & "" & VBComp.Name & Sfx
End If
Next VBComp
End Sub
'********

Sinon j'ai un code pour supprimer tout le code qui fonctionne bien,
malgé le fait que j'ai du mettre les 2 lignes Dim en commentaire.
'********
Sub DeleteAllVBA()
Dim VBComp As VBIDE.VBComponent '
Dim VBComps As VBIDE.VBComponents '

Set VBComps = ActiveWorkbook.VBProject.VBComponents

For Each VBComp In VBComps
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
Next VBComp
End Sub
'********
Qui aurait une idée, svp
Merci
@+
J@@




Avatar
MichDenis
Lorsque tu exportes le code d'un module "Feuil", "ThisWorkbook"
comme ce sont des modules de classes, l'extension du fichier est ".cls"

Si c'est un module standard, l'extension du fichier est .bas

Voici une autre façon d'exporter le contenu d'un module dans un fichier texte
'-------------------------------
Sub test()
Dim LeTexte As String
Dim X As Long, FichierDestination As String

'à déterminer -> le chemin doit exister... le fichier
'sera cféé à l'exécution.
FichierDestination = "c:ATravailMonFichierMacro.txt"

'ThisWorkbook = Classeur où la macro est écrite
'Peut être remplacé par ActiveWorkbook ou
'Workbooks("NomDuclasseur.xls") (doit être ouvert)
With ThisWorkbook.VBProject.VBComponents
'Nom de l'objet "Feuille de la fenêtre de
'l'éditeur de code "Feuil1") à déterminer
With .Item("Feuil1").CodeModule
LeTexte = .Lines(1, .CountOfLines)
End With
End With

If LeTexte <> "" Then
X = FreeFile
Open FichierDestination For Output As #X
Print #X, LeTexte
Close #X
End If
End Sub
'-------------------------------

Et voici comment récupérer le contenu texte pour le copier
dans le module appelé "Feuil3" du classeur où la macro est écrite

'-----------------------------------------
Sub test()
Dim Fs As Object, LeTexte As String
Dim F As Object, FichierDestination As String
FichierDestination = "c:ATravailMonFichierMacro.txt"

Set Fs = CreateObject("Scripting.FileSystemObject")
Set F = Fs.OpenTextFile(FichierDestination, 1)
LeTexte = F.readall
F.Close

With ThisWorkbook.VBProject.VBComponents
'Nom de l'objet "Feuille de la fenêtre de
'l'éditeur de code "Feuil1") à déterminer
With .Item("Feuil3").CodeModule
.AddFromString LeTexte
End With
End With
End Sub
'-----------------------------------------



"J@@" a écrit dans le message de news:
%23nQ8b%
Re-bonjour
le code obtenu suite à tes indications fonctionne bien.
Le code de feuille qui m'intéresse le plus se trouve en Feuil11.cls.
On n'obtient pas un fichier texte pur genre .bas.
Sinon, comment faire pour réimporter ce code dans un autre fichier, stp?
merci
@+
J@@

'********
Sub ExportAllVBA()
Dim VBComp As Object
For Each VBComp In ActiveWorkbook.VBProject.VBComponents
Select Case VBComp.Type
Case 2, 100
Sfx = ".cls"
Case 3
Sfx = ".frm"
Case 1
Sfx = ".bas"
Case Else
Sfx = ""
End Select
If Sfx <> "" Then
VBComp.Export _
Filename:¬tiveWorkbook.Path & "" & VBComp.Name & Sfx
End If
Next VBComp
End Sub
'********

Pour pouvoir déclarer une variable As Vbide.Vbcomponent,
tu dois ajouter la bibliothèque suivante à partir du menu de la
fenêtre de l'éditeur de code : menu / outils / références :

Nom description de la bibliothèque :
Microsoft Visual Basic for Applications Extensibility 5.3

Le fichier responsable sous windows xp pro:
C:Program FilesFichiers communsMicrosoft SharedVBAVBA6VBE6EXT.OLB

Le nom de la bibliothèque : VBIDE

Il y a un "hic" à propos de cette bibliothèque... Microsoft a modifié son nom
en passant de la version Excel 97 à la version 2000. Conséquence, si tu charges
la bibliothèques Version 97, elle ne fonctionne pas avec les versions plus récentes
et l'inverse est aussi vrai.

Solution, au lieu d'utiliser des liaisons précoces (faire référence directement
au nom de la bibliothèque et des constantes "textes" se référant à la bibliothèque)
tu peux utiliser les mêmes macros avec des liaisons tardives...en déclararant les
variables AS OBJECT

Dim VBComp As OBJECT

Et si tu utilises dans la fenêtre de l'éditeur de code, le raccourci clavier F2,
une fenêtre "Explorateur d'objets" s'ouvrira et là, en recherchant chacune
des constantes textes, tu pourras les remplacer par leur constante numérique

Exemple :
vbext_ct_ClassModule = 2
Const vbext_ct_Document = 100

Les constantes numériques apparaissent dans le bas de la fenêtre après
avoir fait la recherche de la constante dans l'explorateur d'objets.

Et ça, devrait te permettre de ne pas avoir à charger la bibliothèque et
laisser le programme se débrouiller ....!




"J@@" a écrit dans le message de news:
%
Bonjour
Je cherche à exporter le code, en particulier de feuille, d'un fichier
et importer ce code dans un autre fichier plus tard.

J'ai essayé le code suivant (je n'en connais plus l'auteur) qui plante
dès la déclaration de VBComp, et qui de toutes façons ne me donne rien.
'********
Sub ExportAllVBA()
Dim VBComp As VBIDE.VBComponent
'erreur de compil :Type défini par l'utilisateur non défini
Dim Sfx As String

For Each VBComp In ActiveWorkbook.VBProject.VBComponents
Select Case VBComp.Type
Case vbext_ct_ClassModule, vbext_ct_Document
Sfx = ".cls"
Case vbext_ct_MSForm
Sfx = ".frm"
Case vbext_ct_StdModule
Sfx = ".bas"
Case Else
Sfx = ""
End Select
If Sfx <> "" Then
VBComp.Export _
Filename:¬tiveWorkbook.Path & "" & VBComp.Name & Sfx
End If
Next VBComp
End Sub
'********

Sinon j'ai un code pour supprimer tout le code qui fonctionne bien,
malgé le fait que j'ai du mettre les 2 lignes Dim en commentaire.
'********
Sub DeleteAllVBA()
Dim VBComp As VBIDE.VBComponent '
Dim VBComps As VBIDE.VBComponents '

Set VBComps = ActiveWorkbook.VBProject.VBComponents

For Each VBComp In VBComps
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
Next VBComp
End Sub
'********
Qui aurait une idée, svp
Merci
@+
J@@




Avatar
JLuc
*Bonjour J@@*,
Une autre idée serait de faire un classeur x qui contiendrait les
macros à utiliser mais qui travaillerais sur le fichier "mal touffu...
heu...foutu". De cette façon, tu n'ajoute rien et tu n'enleve rien à la
fin
:D
Si ça peut aider...

JLuc

Bonjour Jluc
Tout à fait d'accord.
Mais l'opération doit se passer sur la machine d'un utilisateur basique++ qui
récupère un fichier abominablement mal fichu, doit bosser dessus puis le
réexpédier aussi mal fichu.

Mon idée :
de façon transparente, lui importer un peu de code, en particulier dans le
code de feuille (en effet à partir de là où le code sera, format texte ou
autre)puis à la fin remettre le fichier dans son aspect initial, sans code et
le renvoyer.

Pour le moment, j'exporte bien avec l'idée de MichDenis, mais mon code
feuille apparait sous un format .cls, un peu bizarre où il n'y a pas que le
code de feuille.

Et je n'ai rien trouvé dans l'éditeur pour exporter le code feuille, comme on
exporte un module.
Si tu as une idée, :-)
Merci+@+
J@@



*Bonjour J@@*,
Il ne serait pas plus simple de copier le code dans un fichier texte puis
de l'importer/coller dans le classeur ?

Bonjour MichDenis
et merci
Je suis sous XL2K et Win XP Pro (maison) Win 2K (travail)
Je vais suivre ton conseil et déclarant "as object"
Je teste et je reviens si j'ai des difficultés (c'est l'heure de la
soupe):-)
@+
J@@


Pour pouvoir déclarer une variable As Vbide.Vbcomponent,
tu dois ajouter la bibliothèque suivante à partir du menu de la
fenêtre de l'éditeur de code : menu / outils / références :

Nom description de la bibliothèque :
Microsoft Visual Basic for Applications Extensibility 5.3

Le fichier responsable sous windows xp pro:
C:Program FilesFichiers communsMicrosoft SharedVBAVBA6VBE6EXT.OLB

Le nom de la bibliothèque : VBIDE

Il y a un "hic" à propos de cette bibliothèque... Microsoft a modifié son
nom
en passant de la version Excel 97 à la version 2000. Conséquence, si tu
charges
la bibliothèques Version 97, elle ne fonctionne pas avec les versions
plus récentes
et l'inverse est aussi vrai.

Solution, au lieu d'utiliser des liaisons précoces (faire référence
directement
au nom de la bibliothèque et des constantes "textes" se référant à la
bibliothèque)
tu peux utiliser les mêmes macros avec des liaisons tardives...en
déclararant les
variables AS OBJECT

Dim VBComp As OBJECT

Et si tu utilises dans la fenêtre de l'éditeur de code, le raccourci
clavier F2,
une fenêtre "Explorateur d'objets" s'ouvrira et là, en recherchant
chacune
des constantes textes, tu pourras les remplacer par leur constante
numérique

Exemple :
vbext_ct_ClassModule = 2
Const vbext_ct_Document = 100

Les constantes numériques apparaissent dans le bas de la fenêtre après
avoir fait la recherche de la constante dans l'explorateur d'objets.

Et ça, devrait te permettre de ne pas avoir à charger la bibliothèque et
laisser le programme se débrouiller ....!




"J@@" a écrit dans le message de news:
%
Bonjour
Je cherche à exporter le code, en particulier de feuille, d'un fichier
et importer ce code dans un autre fichier plus tard.

J'ai essayé le code suivant (je n'en connais plus l'auteur) qui plante
dès la déclaration de VBComp, et qui de toutes façons ne me donne rien.
'********
Sub ExportAllVBA()
Dim VBComp As VBIDE.VBComponent
'erreur de compil :Type défini par l'utilisateur non défini
Dim Sfx As String

For Each VBComp In ActiveWorkbook.VBProject.VBComponents
Select Case VBComp.Type
Case vbext_ct_ClassModule, vbext_ct_Document
Sfx = ".cls"
Case vbext_ct_MSForm
Sfx = ".frm"
Case vbext_ct_StdModule
Sfx = ".bas"
Case Else
Sfx = ""
End Select
If Sfx <> "" Then
VBComp.Export _
Filename:¬tiveWorkbook.Path & "" & VBComp.Name & Sfx
End If
Next VBComp
End Sub
'********

Sinon j'ai un code pour supprimer tout le code qui fonctionne bien,
malgé le fait que j'ai du mettre les 2 lignes Dim en commentaire.
'********
Sub DeleteAllVBA()
Dim VBComp As VBIDE.VBComponent '
Dim VBComps As VBIDE.VBComponents '

Set VBComps = ActiveWorkbook.VBProject.VBComponents

For Each VBComp In VBComps
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
Next VBComp
End Sub
'********
Qui aurait une idée, svp
Merci
@+
J@@







--
____
( O | O )
--
_oooO_ JLuc _Oooo_

O-O




Avatar
J
Bonjour Denis
Super : exactement ce que je souhaitais.
Merci :-)
@+
J@@


Lorsque tu exportes le code d'un module "Feuil", "ThisWorkbook"
comme ce sont des modules de classes, l'extension du fichier est ".cls"

Si c'est un module standard, l'extension du fichier est .bas

Voici une autre façon d'exporter le contenu d'un module dans un fichier texte
'-------------------------------
Sub test()
Dim LeTexte As String
Dim X As Long, FichierDestination As String

'à déterminer -> le chemin doit exister... le fichier
'sera cféé à l'exécution.
FichierDestination = "c:ATravailMonFichierMacro.txt"

'ThisWorkbook = Classeur où la macro est écrite
'Peut être remplacé par ActiveWorkbook ou
'Workbooks("NomDuclasseur.xls") (doit être ouvert)
With ThisWorkbook.VBProject.VBComponents
'Nom de l'objet "Feuille de la fenêtre de
'l'éditeur de code "Feuil1") à déterminer
With .Item("Feuil1").CodeModule
LeTexte = .Lines(1, .CountOfLines)
End With
End With

If LeTexte <> "" Then
X = FreeFile
Open FichierDestination For Output As #X
Print #X, LeTexte
Close #X
End If
End Sub
'-------------------------------

Et voici comment récupérer le contenu texte pour le copier
dans le module appelé "Feuil3" du classeur où la macro est écrite

'-----------------------------------------
Sub test()
Dim Fs As Object, LeTexte As String
Dim F As Object, FichierDestination As String
FichierDestination = "c:ATravailMonFichierMacro.txt"

Set Fs = CreateObject("Scripting.FileSystemObject")
Set F = Fs.OpenTextFile(FichierDestination, 1)
LeTexte = F.readall
F.Close

With ThisWorkbook.VBProject.VBComponents
'Nom de l'objet "Feuille de la fenêtre de
'l'éditeur de code "Feuil1") à déterminer
With .Item("Feuil3").CodeModule
.AddFromString LeTexte
End With
End With
End Sub
'-----------------------------------------



"J@@" a écrit dans le message de news:
%23nQ8b%
Re-bonjour
le code obtenu suite à tes indications fonctionne bien.
Le code de feuille qui m'intéresse le plus se trouve en Feuil11.cls.
On n'obtient pas un fichier texte pur genre .bas.
Sinon, comment faire pour réimporter ce code dans un autre fichier, stp?
merci
@+
J@@

'********
Sub ExportAllVBA()
Dim VBComp As Object
For Each VBComp In ActiveWorkbook.VBProject.VBComponents
Select Case VBComp.Type
Case 2, 100
Sfx = ".cls"
Case 3
Sfx = ".frm"
Case 1
Sfx = ".bas"
Case Else
Sfx = ""
End Select
If Sfx <> "" Then
VBComp.Export _
Filename:¬tiveWorkbook.Path & "" & VBComp.Name & Sfx
End If
Next VBComp
End Sub
'********

Pour pouvoir déclarer une variable As Vbide.Vbcomponent,
tu dois ajouter la bibliothèque suivante à partir du menu de la
fenêtre de l'éditeur de code : menu / outils / références :

Nom description de la bibliothèque :
Microsoft Visual Basic for Applications Extensibility 5.3

Le fichier responsable sous windows xp pro:
C:Program FilesFichiers communsMicrosoft SharedVBAVBA6VBE6EXT.OLB

Le nom de la bibliothèque : VBIDE

Il y a un "hic" à propos de cette bibliothèque... Microsoft a modifié son nom
en passant de la version Excel 97 à la version 2000. Conséquence, si tu charges
la bibliothèques Version 97, elle ne fonctionne pas avec les versions plus récentes
et l'inverse est aussi vrai.

Solution, au lieu d'utiliser des liaisons précoces (faire référence directement
au nom de la bibliothèque et des constantes "textes" se référant à la bibliothèque)
tu peux utiliser les mêmes macros avec des liaisons tardives...en déclararant les
variables AS OBJECT

Dim VBComp As OBJECT

Et si tu utilises dans la fenêtre de l'éditeur de code, le raccourci clavier F2,
une fenêtre "Explorateur d'objets" s'ouvrira et là, en recherchant chacune
des constantes textes, tu pourras les remplacer par leur constante numérique

Exemple :
vbext_ct_ClassModule = 2
Const vbext_ct_Document = 100

Les constantes numériques apparaissent dans le bas de la fenêtre après
avoir fait la recherche de la constante dans l'explorateur d'objets.

Et ça, devrait te permettre de ne pas avoir à charger la bibliothèque et
laisser le programme se débrouiller ....!




"J@@" a écrit dans le message de news:
%
Bonjour
Je cherche à exporter le code, en particulier de feuille, d'un fichier
et importer ce code dans un autre fichier plus tard.

J'ai essayé le code suivant (je n'en connais plus l'auteur) qui plante
dès la déclaration de VBComp, et qui de toutes façons ne me donne rien.
'********
Sub ExportAllVBA()
Dim VBComp As VBIDE.VBComponent
'erreur de compil :Type défini par l'utilisateur non défini
Dim Sfx As String

For Each VBComp In ActiveWorkbook.VBProject.VBComponents
Select Case VBComp.Type
Case vbext_ct_ClassModule, vbext_ct_Document
Sfx = ".cls"
Case vbext_ct_MSForm
Sfx = ".frm"
Case vbext_ct_StdModule
Sfx = ".bas"
Case Else
Sfx = ""
End Select
If Sfx <> "" Then
VBComp.Export _
Filename:¬tiveWorkbook.Path & "" & VBComp.Name & Sfx
End If
Next VBComp
End Sub
'********

Sinon j'ai un code pour supprimer tout le code qui fonctionne bien,
malgé le fait que j'ai du mettre les 2 lignes Dim en commentaire.
'********
Sub DeleteAllVBA()
Dim VBComp As VBIDE.VBComponent '
Dim VBComps As VBIDE.VBComponents '

Set VBComps = ActiveWorkbook.VBProject.VBComponents

For Each VBComp In VBComps
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
Next VBComp
End Sub
'********
Qui aurait une idée, svp
Merci
@+
J@@








Avatar
J
Bonjour JLuc
Excellente idée, mais ce sont des proc évènementielle que je cherche à
incorporer dans le code de feuille.
La proposition de MichDenis plus bas correspond bien à ce que je
souhaite faire.
Merci beaucoup, les idées sont toujours utiles :-)
@+
J@@


*Bonjour J@@*,
Une autre idée serait de faire un classeur x qui contiendrait les macros
à utiliser mais qui travaillerais sur le fichier "mal touffu...
heu...foutu". De cette façon, tu n'ajoute rien et tu n'enleve rien à la fin
:D
Si ça peut aider...

JLuc

Bonjour Jluc
Tout à fait d'accord.
Mais l'opération doit se passer sur la machine d'un utilisateur
basique++ qui récupère un fichier abominablement mal fichu, doit
bosser dessus puis le réexpédier aussi mal fichu.

Mon idée :
de façon transparente, lui importer un peu de code, en particulier
dans le code de feuille (en effet à partir de là où le code sera,
format texte ou autre)puis à la fin remettre le fichier dans son
aspect initial, sans code et le renvoyer.

Pour le moment, j'exporte bien avec l'idée de MichDenis, mais mon code
feuille apparait sous un format .cls, un peu bizarre où il n'y a pas
que le code de feuille.

Et je n'ai rien trouvé dans l'éditeur pour exporter le code feuille,
comme on exporte un module.
Si tu as une idée, :-)
Merci+@+
J@@



*Bonjour J@@*,
Il ne serait pas plus simple de copier le code dans un fichier texte
puis de l'importer/coller dans le classeur ?

Bonjour MichDenis
et merci
Je suis sous XL2K et Win XP Pro (maison) Win 2K (travail)
Je vais suivre ton conseil et déclarant "as object"
Je teste et je reviens si j'ai des difficultés (c'est l'heure de la
soupe):-)
@+
J@@


Pour pouvoir déclarer une variable As Vbide.Vbcomponent,
tu dois ajouter la bibliothèque suivante à partir du menu de la
fenêtre de l'éditeur de code : menu / outils / références :

Nom description de la bibliothèque :
Microsoft Visual Basic for Applications Extensibility 5.3

Le fichier responsable sous windows xp pro:
C:Program FilesFichiers communsMicrosoft
SharedVBAVBA6VBE6EXT.OLB

Le nom de la bibliothèque : VBIDE

Il y a un "hic" à propos de cette bibliothèque... Microsoft a
modifié son nom
en passant de la version Excel 97 à la version 2000. Conséquence,
si tu charges
la bibliothèques Version 97, elle ne fonctionne pas avec les
versions plus récentes
et l'inverse est aussi vrai.

Solution, au lieu d'utiliser des liaisons précoces (faire référence
directement
au nom de la bibliothèque et des constantes "textes" se référant à
la bibliothèque)
tu peux utiliser les mêmes macros avec des liaisons tardives...en
déclararant les
variables AS OBJECT

Dim VBComp As OBJECT

Et si tu utilises dans la fenêtre de l'éditeur de code, le
raccourci clavier F2,
une fenêtre "Explorateur d'objets" s'ouvrira et là, en recherchant
chacune
des constantes textes, tu pourras les remplacer par leur constante
numérique

Exemple :
vbext_ct_ClassModule = 2
Const vbext_ct_Document = 100

Les constantes numériques apparaissent dans le bas de la fenêtre après
avoir fait la recherche de la constante dans l'explorateur d'objets.

Et ça, devrait te permettre de ne pas avoir à charger la
bibliothèque et
laisser le programme se débrouiller ....!




"J@@" a écrit dans le message de news:
%
Bonjour
Je cherche à exporter le code, en particulier de feuille, d'un fichier
et importer ce code dans un autre fichier plus tard.

J'ai essayé le code suivant (je n'en connais plus l'auteur) qui plante
dès la déclaration de VBComp, et qui de toutes façons ne me donne
rien.
'********
Sub ExportAllVBA()
Dim VBComp As VBIDE.VBComponent
'erreur de compil :Type défini par l'utilisateur non défini
Dim Sfx As String

For Each VBComp In ActiveWorkbook.VBProject.VBComponents
Select Case VBComp.Type
Case vbext_ct_ClassModule, vbext_ct_Document
Sfx = ".cls"
Case vbext_ct_MSForm
Sfx = ".frm"
Case vbext_ct_StdModule
Sfx = ".bas"
Case Else
Sfx = ""
End Select
If Sfx <> "" Then
VBComp.Export _
Filename:¬tiveWorkbook.Path & "" & VBComp.Name & Sfx
End If
Next VBComp
End Sub
'********

Sinon j'ai un code pour supprimer tout le code qui fonctionne bien,
malgé le fait que j'ai du mettre les 2 lignes Dim en commentaire.
'********
Sub DeleteAllVBA()
Dim VBComp As VBIDE.VBComponent '
Dim VBComps As VBIDE.VBComponents '

Set VBComps = ActiveWorkbook.VBProject.VBComponents

For Each VBComp In VBComps
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
Next VBComp
End Sub
'********
Qui aurait une idée, svp
Merci
@+
J@@