irwiner
Messages postés5Date d'inscriptionmardi 31 août 2004StatutMembreDernière intervention26 avril 2012
-
6 sept. 2006 à 10:15
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 2011
-
6 sept. 2006 à 23:46
Bonjour à tous,
J'aurais voulu savoir s'il était possible avec VB dans Excel d'écrire un code qui génère lui même un code. Pour être plus précis, j'aimerai que ma macro génère un nouveau classeur, crée un bouton et écrive le code à appliquer quand on appuie sur le bouton. Il faudra bien sûr que le code se trouve sur ce nouveau classeur. Le but n'est pas d'avoir le code tout prêt sur le fichier d'origine et de faire appel à ce dernier car il y aura des modifications à faire en fonctions de paramètres propre à chaque fichier généré.
Si c'est possible comment faire et quelles fonctions utiliser?
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 6 sept. 2006 à 10:54
Salut,
Un petit exemple pour illustrer les propos de 647037 mortalino (salut)
Il faut ajouter la référence Microsoft Visual Basic For Application Extensibility 5.3 (ou équivalent)
Le code suivant :
- Creer un nouveau classeur depuis Excel
- Creer un Bouton nommer CommandButton1 dans la feuille Feuil1 du nouveau classeur
- insere dans le code de Feuil1 la procedure relative au nouveau bouton
'Nouvel objet Classeur
Dim Wb As Workbook
'Code du bouton
Dim BoutonCode As String
'Ouvre un nouveau classeur et l'affet a WB
Set Wb = Application.Workbooks.Add
'Ajoute un Bouton dans la feuil1 (Worksheets(1))
Wb.Worksheets(1).OLEObjects.Add(ClassType:="Forms.CommandButton.1", Link:=False _
, DisplayAsIcon:=False, Left:=81, Top:=60, Width:=85.5, Height:=22.5) _
.Select
'Code du bouton
BoutonCode = "Private Sub CommandButton1_Click()" & vbCrLf & _
"'Ajouter le code a executer" & vbCrLf & _
"End Sub"
'Insere la procedure du bouton dans le code de Feuil1
Call Wb.VBProject.VBComponents("Feuil1").CodeModule.InsertLines(1, BoutonCode)
'Sauvegarde le nouveau classeur
Call Wb.SaveAs("C:\TestBouton.xls")
'Fermeture du classeur
Call Wb.Close
'Destruction de l'objet
Set Wb = Nothing
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 6 sept. 2006 à 11:01
Salut Julien,
merci d'avoir complété (bizarrement, je ne reçois pas les alertes mails...)
@++ et certainement qu'on se recroisera ;)
irwiner : j'ai une source qui traite les objets composants d'un projet, par contre je ne gère que la suppression de code ou composants (au cas où ça t'interesserai..)
++
Vous n’avez pas trouvé la réponse que vous recherchez ?
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 6 sept. 2006 à 23:46
Oui,
il faut tourner autour de VBAProject et ses composants (vbcomponents).
La librairie Microsoft Visual Basic For Application Extensibility 5.3 est la même en word et excel, et utilisable par vb6.
Je ne touche pas vraiment le code dans ma source (juste des suppressions ou comptage de ligne) mais regarde ma source, bien qu'elle traite les classeurs excel, elle est facilement adaptable pour les documents word.
Une fois que tu as chargé la bibliothèque vbide (avec la librairie VBA extensibility), pense à faire F2 (explorateur d'objets) et recherche CodeModule. Tu auras les méthodes et propriétés.
@++
<hr size="2" width="100%" />
--Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--