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

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
Configuration: Windows 2000
Firefox 1.5.0.10

13 réponses

  • Votes
  • Date
  • Date décroissante
  1. 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
    1. Modérateur
      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...:-)
      1. En plus, ça suppose que les utilisateurs connaissent la structure... et VBA.
        1. 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 :( ???
          1. Modérateur
            Tu gardes ton code, tu le mets dans un "if" conditionné par le test de l'utilisateur pour savoir s'il est admin...
            1. 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 :'(
              1. 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
                1. 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
                  1. 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 :'(
                    1. 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
                      1. 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 ?
                        1. 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
                      2. 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
                        1. 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