VBComponents(?) et CodeModule

  • Initiateur de la discussion Initiateur de la discussion flamel
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

F

flamel

Guest
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
 
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
 
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
 
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+
 
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
 
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

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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Retour