VBComponents(?) et CodeModule

flamel

XLDnaute Nouveau
Bonjour;

Où pourrais-je trouver des renseignements sur:
VBComponents(?). A quoi correspond le chiffre entre parenthèses ?

et sur :
CodeModule ?

Je n'ai rien trouvé dans l'aide, non plus d'ailleurs pour InsertLines et CountOfLines ?
Où trouver ces enseignements ou des exemples ?

Merci.

flamel
 

Luki

XLDnaute Accro
bonsoir flamel,

Dans l'aide, recherche : VBE

tu trouveras des infos

A+

EDITION!!

Mais c'est vrai que l'aide n'est pas riche à ce sujet. J'ai trouvé des infos dans un bouquin. Il est au boulot, il faudra attendre lundi si tu veux plus de précisions... Désolé, je ne me souviens pas de tout ça précisément...

Message édité par: luki, à: 12/11/2005 22:25
 

MichelXld

XLDnaute Barbatruc
bonsoir

VBComponents renvoie la collection de composants contenue dans un projet

1 pour ThisWorkbook
2 à x en fonction du nombre de feuilles
ensuite x+1 pour chaque module


par exemple

Sub boucleVBComponents()
Dim i As Integer
For i = 1 To ActiveWorkbook.VBProject.VBComponents.Count
MsgBox ActiveWorkbook.VBProject.VBComponents(i).Name
Next
End Sub



CodeModule permet de modifier , ajouter , supprimer , ou renvoyer des informations sur le texte du code , pour chaque composant

par exemple pour compter le nombre de lignes de chaque composant

Dim Mdl As CodeModule
Dim i As Integer
For i = 1 To ActiveWorkbook.VBProject.VBComponents.Count
Set Mdl = ActiveWorkbook.VBProject.VBComponents(i).CodeModule
MsgBox Mdl.CountOfLines
Next




quelques exemples d'utilisation dans ces 2 liens

https://www.excel-downloads.com/threads/effacement-d-une-macro.4689/

https://www.excel-downloads.com/threads/ref-wiki-page-8-de-michelxld.92376/
(voir le chapitre Visual Basic Editor )


bonne soirée
MichelXld
 

flamel

XLDnaute Nouveau
Merci pour l'aide.

Ci-joint un fichier simplifié, pour essais.
En cliquant sur ' cmd1 ', on devrait créer 2 boutons et y inscrire du code.
Un seul fonctionne, pourquoi ? La routine s'arrête en cours de route.
Le code créé est très simple, c'est pour me permettre de voir si le bouton réagit.

Merci si tu as des renseignements.

A+
 

flamel

XLDnaute Nouveau
Ci-joint le fichier que j'ai oublié ...! [file name=Classeur2_20051112225837.zip size=22143]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Classeur2_20051112225837.zip[/file]
 

Pièces jointes

  • Classeur2_20051112225837.zip
    21.6 KB · Affichages: 220

MichelXld

XLDnaute Barbatruc
bonjour

tu peux essayer cette adaptation


Sub FaireBouton()
Dim Code As String
Dim myDocument As Worksheet
Dim Obj As OLEObject

Set myDocument = Worksheets(2)

For i = 1 To 2

Set Obj = myDocument.OLEObjects.Add('Forms.CommandButton.1')
With Obj
.Name = 'CommandButton' & i
.Left = 100 * i - 20
.Top = 30
.Width = 100
.Height = 10
.Object.BackColor = 123456 * i
End With

Code = 'Sub CommandButton' & i & '_Click()' & vbCrLf
Code = Code & 'Msgbox ' & myDocument.Cells(4 + i, 4) & vbCrLf
Code = Code & 'End Sub'

With ThisWorkbook.VBProject.VBComponents(myDocument.Name).CodeModule
NextLine = .CountOfLines + 1
.InsertLines NextLine, Code
End With

Next i
End Sub



bonne journée
MichelXld
 
F

flamel

Guest
Merci MichelXLd.

Tu m'as bien aidé.
J'ai utilisé ton adaptation et ça marche.
J'ai aussi essayé la procédure ' boucleVBComponents ', mais je n'arrive pas à charger le nom d'onglets des feuilles.
Quelles est l'instruction pour appeler le 'Name' au lieu du '(Name)' ?
Je cherche à me faire une liste, commode quand on a beaucoup de feuilles en cours.
Ci-joint un petit fichier d'essai.

Merci encore pour ton aide très précieuse.

A+ [file name=ComponentsEssai.zip size=11047]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/ComponentsEssai.zip[/file]
 

Pièces jointes

  • ComponentsEssai.zip
    10.8 KB · Affichages: 126

MichelXld

XLDnaute Barbatruc
bonsoir

ci joint une autre version de ta procedure , à tester


Sub boucleVBComponents_V02()
Dim i As Integer
Dim Ws As Worksheet

For i = 1 To ActiveWorkbook.VBProject.VBComponents.Count
Sheets('Base').Cells(i + 5, 3) = i
Sheets('Base').Cells(i + 5, 4) = ActiveWorkbook.VBProject.VBComponents(i).Name

For Each Ws In ActiveWorkbook.Sheets
If Ws.CodeName = ActiveWorkbook.VBProject.VBComponents(i).Name Then
Sheets('Base').Cells(i + 5, 5) = Ws.Name
Exit For
End If
Next

Sheets('Base').Cells(i + 5, 6) = _
ActiveWorkbook.VBProject.VBComponents(i).CodeModule.CountOfLines
Next
End Sub



bonne soiree
MichelXld
 

Discussions similaires

Réponses
4
Affichages
272

Statistiques des forums

Discussions
312 211
Messages
2 086 300
Membres
103 173
dernier inscrit
Cerba95