Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Création de feuille en vba et accès à son code (numéro variable dans VB Editor)

alnilam

XLDnaute Nouveau
Bonjour,

J'ai créé une ComboBox sur une feuille, et j'aimerais lui associer une procédure si sa valeur change. J'ai trouvé ce qu'il me fallait en cherchant sur différents forums (voir code ci-dessous) et ça fonctionne.
Mon problème vient de l'argument de la procédure. Le code ne marche pas si je mets Call.EcrireCode("Nom de la feuille"), ça marche seulement si je mets Call.EcrireCode("Feuil2") si Feuil2 (Nom de la feuille) est la feuille correspondante dans l'arborescence du VBAProject.
Comme ces feuilles sont des formulaires d'impression qui sont créés à partir d'autres feuilles de calcul et supprimés à la réinitialisation du fichier, suivant l'ordre dans lequel ils sont créés, le numéro de la feuille va varier et je ne peux donc plus y accéder.

Existe-t-il une syntaxe pour accéder au code d'une feuille en utilisant son nom, ou éventuellement pour fixer le numéro de la feuille créée dans VBComponents?

Code:
Sub EcrireCode(Feuil As String)

Dim LeCode(1 To 5)
Dim NomClasseur As String
Dim Wb As Workbook

NomClasseur = ActiveWorkbook.Name

LeCode(1) = "Private Sub ComboBox1_Change()"
LeCode(2) = "Dim Choix As String"
LeCode(3) = "Choix = Me.ComboBox1.Value"
LeCode(4) = "Call Module1.Liste_deroulante(Choix)"
LeCode(5) = "End Sub"

Set Wb = Workbooks(NomClasseur)
      
For i = 1 To 5
  Wb.VBProject.VBComponents(Feuil).CodeModule.InsertLines i, LeCode(i)
Next
End Sub

Merci d'avance

alnilam
 

Paf

XLDnaute Barbatruc
Re : Création de feuille en vba et accès à son code (numéro variable dans VB Editor)

Bonjour,

a priori en passant par le codename de la feuille:

Code:
Sub EcrireCode(Feuil1 As String)
 Dim LeCode(1 To 5), NomClasseur As String, Wb As Workbook, WS As String
 NomClasseur = ActiveWorkbook.Name
 LeCode(1) = "Private Sub ComboBox1_Change()"
 LeCode(2) = "Dim Choix As String"
 LeCode(3) = "Choix = Me.ComboBox1.Value"
 LeCode(4) = "Call Module1.Liste_deroulante(Choix)"
 LeCode(5) = "End Sub"
 Set Wb = Workbooks(NomClasseur)
 WS = Worksheets(Feuil1).CodeName
 For i = 1 To 5
  Wb.VBProject.VBComponents(WS).CodeModule.InsertLines i, LeCode(i)
 Next
End Sub

A+
 

Discussions similaires

Réponses
7
Affichages
686
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…