[VBA] Inserer du code dans un sub() par macro

Fermé
Yvan44 - 13 mars 2007 à 16:46
 Utilisateur anonyme - 15 mars 2007 à 22:29
Bonjour,

Je voudrais savoir si il est possible d'inserer du code dans un sub() par macro.
Disons que j'ai un programme qui teste l'existence de fichier puis qui lance une serie de macro, je voudrais qu'un utilisateur puisse inserer un bout de code dans le cas de la création d'un nouveau fichier.
merci pour vos réponses
A voir également:

13 réponses

Personne n'a jamais fais cela ?
je voudrais qu'un utilisateur en rentrant les données dans une textbox puisse générer automatiquement du code dans un programme existant!
merci pour votre aide, je sais absolument pas comment faire
0
blux Messages postés 26756 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 1 avril 2025 3 332
14 mars 2007 à 10:13
Salut,

ben non, on n'a jamais du faire ça...

Je ne comprends toujours pas l'intérêt : si quelqu'un saisit qq chose et veut l'exécuter alors pourquoi le code n'existe-il pas avant ?

Parce que exécuter du code si un fichier est présent, on sait faire, mais rajouter du code dynamiquement dans une proc, ça sent le masochisme...:-)
0
zenon Messages postés 726 Date d'inscription jeudi 30 septembre 2004 Statut Membre Dernière intervention 13 février 2010 180
14 mars 2007 à 10:16
En plus, ça suppose que les utilisateurs connaissent la structure... et VBA.
0
voilà mon code

If Not Dir(chemin & "\fichier.xls") = "" Then
Workbooks.Open chemin & "\fichier.xls", , True
'Set wb = Workbooks("fichier.xls")
Run "remplir_BDD"
End If
Set wb = Nothing

je voudrais rajouter ce code dans le même module lors de la création d'un nouveau fichier. Le but étant d'interdire le changement de nom de fichier par les utilisateurs, mais en permettant à un admnistrateur de rajouter un autre fichier.

pour la structure, il y a surement moyen d'automatiser la procédure.
Mais il n'y a donc pas moyen d'ajouter dynamiquement du code dans une procédure :( ???
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
blux Messages postés 26756 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 1 avril 2025 3 332
14 mars 2007 à 10:56
Tu gardes ton code, tu le mets dans un "if" conditionné par le test de l'utilisateur pour savoir s'il est admin...
0
Aie non c'est un peu plus compliqué :( !
l'administrateur, à la création d'un fichier modifierais (automatiquement via macro) le code de mon classeur de base! Mais bon ca n'a pas l'air possible :'(
0
Utilisateur anonyme
14 mars 2007 à 12:50
Bonjour,

suggestion :

sur cette page :
http://www.excel-downloads.com/telechargements/utilitaires/5-4.htm

repérer VizioXLA

ce fichier excel démontre comment travailler avec les objets Excel et
entre autre le code. Dés l'ouverture du fichier, celui-ci détecte la non-présence d'une référence de VBE et la charge si nécessaire.

Pour faire le test de la non-présence, le programme tente d'ajouter
une routine dans un module, s'il y a erreur, c'est que la référence est
absente. Celle-ci étant indispensable pour manipuler du code.

Voir routine dans module ThisWorkbook, routine Workbook_Open
qui appelle :

Module Chargement - Public Function PresenceExtension() As Boolean

Bon, ce classeur n'a pas toute les qualité d'un bon bouquin, mais
enfin, mieux vaut avoir un que deux tu l'auras !

Lupin
0
Bon ok, j'ai pas encore le niveau pour tout comprendre :) je débute VBA, je vais essayer de faire autrement en amont. merci pour votre aide
0
Je pense que la fonction dont j'aurais besoin ça serait ".InsertLines ligne, code"

mais pas moyen de la faire fonctionner dans ma version d'excel :'(
0
Utilisateur anonyme
14 mars 2007 à 18:26
re :

quel version d'Excel avez-vous ?

n.b. Il faut charger la référence :
Microsoft Visual Basic for Applications Extensibility

sous Excel, tapez [ Alt F11 //Outils/Références… ]

ajouter la librairie ...

je vous fournirai un petit exemple simple ce soir !


Lupin
0
Bonjour,
Merci Lupin, la fonction "insertLines" est reconnue par VBA, a propos de la version Excel c'est la 2000. Je vais surement trouver comment la faire fonctionner en cherchant sur le net aujourd'hui !
merci en tout cas ;)

ps: comment signalé que le problème est résolu sur le forum ?
0
voilà mon code, je vais réussir faire ce que je veux !


With Workbooks("Classeur1").VBProject.VBComponents("Module2").CodeModule

x = .CountOfLines
.InsertLines x + 1, "Public Sub MaProcedure"
.InsertLines x + 2, "... du code ici"
.InsertLines x + 650, "... la suite du code"
.InsertLines x + 651, "End Sub"
End With

End Sub

merci
Yvan
0
Utilisateur anonyme
15 mars 2007 à 12:40
Bonjour,

Un empêchement de dernière minute m'a empêché de t'écrire
ce bout de code qui provient d'un bouquin, ma mémoire n'est
pas très bonne.

donc, je vais reporter à ce soir !

@+
Lupin
0
Utilisateur anonyme
15 mars 2007 à 22:29
re :

voilà, c'est simple mais je ne me souviens jamais de la syntaxe !

Sub AjouterCode()

    Dim LignesDeCode As String
    Dim LigneSuivante As Long
    
    'Ajout de l'évènement
    LignesDeCode = "Sub CommandButton1_Click()" & vbCrLf
    LignesDeCode = LignesDeCode & "    On error Resume Next" & vbCrLf & vbCrLf
    LignesDeCode = LignesDeCode & "    Sheets(" & "Feuil1" & ").Activate" & vbCrLf
    LignesDeCode = LignesDeCode & "    If ( Err <> 0 ) Then" & vbCrLf
    LignesDeCode = LignesDeCode & "        MsgBox " & """" & _
                "Impossible d'activer la feuille 1" & """" & vbCrLf & vbCrLf
    LignesDeCode = LignesDeCode & "    End If" & vbCrLf & vbCrLf
    LignesDeCode = LignesDeCode & "End Sub" & vbCrLf
    
    With ThisWorkbook.VBProject.VBComponents("Nom_Du_Module").CodeModule
        LigneSuivante = (.CountOfLines + 1)
        .InsertLines LigneSuivante, LignesDeCode
    End With
    
End Sub


ce n'est pas tout, ce code fonctionne sous 2002 mais sous 2000 !
il me semble que j'avais éprouvé mon fichier Vizio sous la version 2K!

bonne continuité.

Lupin
0