Faire écrire du code par le code

mécano41

XLDnaute Accro
Bonjour à tous,

Dans le livre de J. Walkenbach pour EXCEL 2003, j'avais trouvé cet exemple de code écrivant du code (ici pour ajouter une feuille et un bouton avec son code). Je ne sais pas s'il fonctionnait bien en XL2003 mais en XL2010, à la ligne :

Code:
With ActiveWorkbook.VBProject.VBComponents(NewSheet.Name).Codemodule
j'ai le message :

" Erreur d'exécution 1004 - L'accès par programme au Visual Basic n'est pas fiable"

Code:
Sub AddSheetAndButton()
Dim NewSheet As Worksheet
Dim NewButton As OLEObject

Set NewSheet = Sheets.Add
Set NewButton = NewSheet.OLEObjects.Add("Forms.CommandButton.1")
With NewButton
    .Left = 4
    .Top = 4
    .Width = 100
    .Height = 24
    .Object.Caption = "Retour à Feuil1"
End With

Code = "Sub CommandButton_Click()" & vbCrLf
Code = Code & "     On Error Resume Next" & vbCrLf
Code = Code & "     Sheets(""Feuil1"").Activate" & vbCrLf
Code = Code & "      If Err <> 0 Then " & vbCrLf
Code = Code & "      Msgbox ""Impossible d'activer Feuil1.""" & vbCrLf
Code = Code & "      End If " & vbCrLf
Code = Code & "      End Sub"

With ActiveWorkbook.VBProject.VBComponents(NewSheet.Name).Codemodule
    Nextline = .CountOfLines + 1
    .InsertLines Nextline, Code
End With
End Sub
Quelqu'un a-t-il une explication?

Merci d'avance

Cordialement
 

mécano41

XLDnaute Accro
Re : Faire écrire du code par le code

Re,

pas de problème à l'ouverture du fichier, quand je click sur le bouton et lorsque je modifie la formule..... le module est supprimé puis recréé... maintenant, le résultat attendu...

Merci ... mais alors si ça fonctionne, je crains que cela soit encore plus difficile de trouver ce qui ne va pas chez moi ...:mad::mad:

Cordialement
 

Pierrot93

XLDnaute Barbatruc
Re : Faire écrire du code par le code

Re,

en fait je pense avoir trouvé le problème, lorsque tu veux renommer ton module, l'ancien bien que "remove" est encore présent dans la liste des composants et ne s'efface réellement qu'à la fin de la procédure... j'ai modifié le code de la sorte, semble fonctionner chez moi... sous 2003..;

Code:
Option Explicit
Sub AjoutModuleEtCode()
Dim NouvMod As Object
Dim Code As String
Dim LigneSuiv As Long
With ThisWorkbook.VBProject
    .VBComponents("ModFonction").Name = "monmodule"
    .VBComponents.Remove .VBComponents("monmodule")
    Set NouvMod = .VBComponents.Add(1)
    NouvMod.Name = "ModFonction"
End With
Code = "Function EcartEnergie(Energie as single, D as single, e as single)" & vbCrLf                                                                    ' Créé le code
Code = Code & "     EcartEnergie=" & Replace(Range("B2").Value, ",", ".") & vbCrLf
Code = Code & "End Function"
With NouvMod.Codemodule                                                                               ' et le met dans le module
    LigneSuiv = .CountOfLines + 1
    .InsertLines LigneSuiv, Code
End With
End Sub

enfin, si je ne me suis pas trompé...
 

mécano41

XLDnaute Accro
Re : Faire écrire du code par le code

Merci Pierrot, cela fonctionne parfaitement. En mettant des affichages de l'existence du nom à différents endroits, j'avais remarqué que celui-ci ne s'effaçait pas après effacement du module (j'aurais dû le dire dans ma demande! :confused: ) mais j'ai cherché pourquoi (sans trouver) et je n'ai pas pensé à renommer le module!

Encore merci.

Cordialement
 

mécano41

XLDnaute Accro
Re : Faire écrire du code par le code

Bonjour à tous,

Pour JNP :

Je remets le fichier entièrement refrappé avec mes petites mains (pas de copier/coller).
Peux-tu me dire si tu as toujours un problème à l'ouverture? Peux-tu également ouvrir celui joint au #3 du fil (fichier qui n'a rien à voir avec le sujet traité ici) :

https://www.excel-downloads.com/threads/equation-dune-droite-non-lineaire-deux-y-axes.167485/

et qui ne semble pas avoir créé de problème au destinataire.

Pour Pierrot (et les autres aussi!):

Le fichier joint fonctionne parfaitement avec tes modifs sauf que ... lorsque la création du module et mise en place du code sont faits, il reste dans le VBE, le curseur étant en fin de nouveau module. J'ai tout essayé (enfin, tout sauf la bonne solution!) ; quoi que l'on fasse après la création (activer, afficher...), il l'exécute et revient là... Une idée sur la question?

Merci d'avance

Cordialement
 

Pièces jointes

  • Code par code2.xlsm
    23.7 KB · Affichages: 53
  • Code par code2.xlsm
    23.7 KB · Affichages: 53
  • Code par code2.xlsm
    23.7 KB · Affichages: 56

JNP

XLDnaute Barbatruc
Re : Faire écrire du code par le code

Re :)
Pour JNP :

Je remets le fichier entièrement refrappé avec mes petites mains (pas de copier/coller).
Peux-tu me dire si tu as toujours un problème à l'ouverture? Peux-tu également ouvrir celui joint au #3 du fil (fichier qui n'a rien à voir avec le sujet traité ici) :

https://www.excel-downloads.com/threads/equation-dune-droite-non-lineaire-deux-y-axes.167485/

et qui ne semble pas avoir créé de problème au destinataire.
Les 2 fichiers fonctionnent sous 2010 64 ;)...
Par contre, aucune idée pour les autres, sauf peut-être des passages d'xlsm en xls puis de nouveau xlsm, il me semble qu'il y a déjà eut des soucis à ce niveau-là (à cause de la modification du codage des modules...) :rolleyes:...
Bonne journée :cool:
 

Pierrot93

XLDnaute Barbatruc
Re : Faire écrire du code par le code

Bonjour Mécano, JNP...

Après conversion en xls... il m'est impossible de sortir du ode de création... je n'avais pas ce souci hier avec le fichier xls que tu avais déposé et que j'avais modifié.... malheureusement, je n'ais plus e fichier... Mais comme le dit JNP, les différentes conversions peuvent être source d'horreur...

bonne journée
@+
 

mécano41

XLDnaute Accro
Re : Faire écrire du code par le code

Bonjour Mécano, JNP...

Après conversion en xls... il m'est impossible de sortir du ode de création... je n'avais pas ce souci hier avec le fichier xls que tu avais déposé et que j'avais modifié.... malheureusement, je n'ais plus e fichier... Mais comme le dit JNP, les différentes conversions peuvent être source d'horreur...


bonne journée
@+

Une dernière tentative en t'envoyant un fichier enregistré en XLS de mon côté (peut-être mieux qu'une conversion à l'arrivée?). Il fonctionne chez moi, avec le même défaut que cité plus haut. Je peux sortir du mode création mais manuellement ; par le code, il y revient

Merci à tous

Cordialement
 

Pièces jointes

  • Code par code2.xls
    42 KB · Affichages: 63

mécano41

XLDnaute Accro
Re : Faire écrire du code par le code

Bonsoir,

Finalement j'ai trouvé comment faire pour changer le code sans effacer le module. Cela ne me dit pas pourquoi il y a ce problème si l'on efface le code, mais ça fonctionne...


Code:
Sub AjoutModuleEtCode()
Dim Code As String
Dim LigneSuiv As Long
Code = "Function EcartEnergie(Energie as single, D as single, e as single) " & vbCrLf
Code = Code & "     EcartEnergie=" & Replace(Range("B2").Value, ",", ".") & vbCrLf
Code = Code & "End Function"
With ThisWorkbook.VBProject.VBComponents("ModFonction").CodeModule
    .DeleteLines 1, .CountOfLines
    LigneSuiv = .CountOfLines + 1
    .InsertLines LigneSuiv, Code
End With
End Sub

A noter que dans l'aide, la forme .DeleteLines (1, .CountOfLines) est donnée alors qu'il ne faut pas de parenthèses ....:mad: :mad: :mad: (j'aurais dû m'en douter puisque j'avais .InsertLines...sans parenthèses dans un code récupéré mais je n'ai pas fait le rapprochement :( :( pas bien de vieillir!)

Merci pour tout.

Cordialement
 

Discussions similaires

Statistiques des forums

Discussions
312 382
Messages
2 087 834
Membres
103 667
dernier inscrit
datengo