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

Yvan44 -  
 Utilisateur anonyme -
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

  1. Yvan44
     
    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
  2. blux Messages postés 2051 Date d'inscription   Statut Modérateur Dernière intervention   3 455
     
    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
  3. zenon Messages postés 729 Statut Membre 180
     
    En plus, ça suppose que les utilisateurs connaissent la structure... et VBA.
    0
  4. Yvan44
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. blux Messages postés 2051 Date d'inscription   Statut Modérateur Dernière intervention   3 455
     
    Tu gardes ton code, tu le mets dans un "if" conditionné par le test de l'utilisateur pour savoir s'il est admin...
    0
  7. Yvan44
     
    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
  8. Utilisateur anonyme
     
    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
  9. Yvan44
     
    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
  10. Yvan44
     
    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
  11. Utilisateur anonyme
     
    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
  12. Yvan44
     
    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
    1. Yvan44
       
      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
  13. Utilisateur anonyme
     
    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
  14. Utilisateur anonyme
     
    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