IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Comment générer du code vba dynamiquement ?


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé Avatar de Filippo
    Homme Profil pro
    Statisticien
    Inscrit en
    Mai 2004
    Messages
    864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Statisticien

    Informations forums :
    Inscription : Mai 2004
    Messages : 864
    Points : 881
    Points
    881
    Par défaut Comment générer du code vba dynamiquement ?
    bonjour,
    j'ai un classeur dans lequel il est possible d'insérer de nouveaux onglets en appuyant sur un bouton.

    J'aurais besoin de définir sur ces nouveaux onglets un événement pour que du code soit éxécuté quand une cellule change de valeur.

    Je ne sais pas comment générer cette procédure à l'insertion du nouvel onglet; cette insertion se fait par du code VBA dans un module avec .

    J'aimerais que cette procédure s'écrive automatiquement à la création du nouvel onglet dans le code de cet onglet.

    Si quelqu'un sait comment faire, je suis preneur.

    Merci
    (\ _ /)
    (='.'=) Voici Lapinou. Aidez le à conquérir le monde
    (")-(") en le reproduisant

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    D'abord un article à lire pour savoir écrire du code avec du code :

    http://silkyroad.developpez.com/VBA/VisualBasicEditor/

    Starec

  3. #3
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Bonjour,

    Tu trouveras toutes les explications dans ce tuto
    (voir notamment le chapitre V)

    Tu dois, comme dans l'exemple du tutoriel ci-dessus, nommer les objets que tu insères. Pour éviter de donner un nom déjà existant tu peux par exemple attribuer le même nom à chaque objet en ajoutant un numéro, numéro qui correspondra au nombre d'objets.

    En reprenant l'exemple de code du tuto, cela donnerait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    Sub test()
    Dim Ws As Worksheet
    Dim Obj As OLEObject
    Dim laMacro As String
    Dim x As Integer
    Dim Nom As String
     
    Set Ws = Sheets.Add 'Ajoute une nouvelle feuille
    Nom = "Obj" & ActiveSheet.Shapes.Count + 1
     
    'ajoute un CommandButton dans la nouvelle feuille
    Set Obj = Ws.OLEObjects.Add("Forms.CommandButton.1")
    With Obj
        .Name = Nom 'renomme l'objet
        .Left = 50 'position horizontale par rapport au bord gauche de la feuille
        .Top = 50 'position verticale par rapport au bord haut de la feuille
        .Width = 150 'largeur
        .Height = 30 'hauteur
        .Object.Caption = "Supprimer données feuille" 'inscription sur le bouton
    End With
     
    'Spécifie le contenu de la macro qui sera associée au bouton
    laMacro = "Sub " & Nom & "_Click()" & vbCrLf
    laMacro = laMacro & "Cells.Clear" & vbCrLf
    laMacro = laMacro & "End Sub"
     
    'Ajoute la procédure dans la feuille
    With ThisWorkbook.VBProject.VBComponents(ActiveSheet.Name).CodeModule
        x = .CountOfLines + 1
        .InsertLines x, laMacro
    End With
     
    End Sub
    LES FAQ OFFICE - LES COURS OFFICE - LES COURS EXCEL - LES LIVRES OFFICE - SOURCES VBA - ATELIER BRICOLAGE VBA

    Lorsque votre problème est solutionné, pensez à le signaler en cliquant sur le bouton au bas de la discussion.

  4. #4
    Membre éclairé Avatar de Filippo
    Homme Profil pro
    Statisticien
    Inscrit en
    Mai 2004
    Messages
    864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Statisticien

    Informations forums :
    Inscription : Mai 2004
    Messages : 864
    Points : 881
    Points
    881
    Par défaut
    Merci beaucoup pour vos réponses.
    C'est ce que je voulais faire.



    Voilà mon code qui marche, si ça peut intéresser quelqu'un d'autre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Sub AjouteCodeAOnglet(MyOnglet As String)
      'Ajoute la procédure dans la feuille
     
        Dim NomVb As String
        NomVb = Sheets(MyOnglet).CodeName
     
        Dim X As Integer
        With ActiveWorkbook.VBProject.VBComponents(NomVb).CodeModule
            X = .CountOfLines
            If X=0 Then X=1
            'là on insère les lignes du code VBA qui sera dans le code de l'onglet
            .InsertLines X + 1, "Private Sub WorkSheet_Change(ByVal Target As Range) " & vbCrLf
            .InsertLines X + 2, " Call MiseAJourClasseur " & vbCrLf
            .InsertLines X + 3, "End Sub"
        End With
     
     End Sub
    Exemple d'utilisation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call AjouteCodeAOnglet("Toto")
    Crée un onglet "Toto" avec le code suivant dans le VBA de l'onglet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub WorkSheet_Change(ByVal Target As Range)
     Call MiseAJourClasseur
    End Sub
    (\ _ /)
    (='.'=) Voici Lapinou. Aidez le à conquérir le monde
    (")-(") en le reproduisant

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment générer un code barre 2D ?
    Par topben dans le forum Composants VCL
    Réponses: 2
    Dernier message: 23/01/2008, 17h52
  2. [VBA]Comment, dans le code VBA, hasher un mot de passe ?
    Par lord abortion dans le forum VBA Access
    Réponses: 6
    Dernier message: 18/04/2007, 16h41
  3. Comment générer du code php?
    Par developper2006 dans le forum Langage
    Réponses: 2
    Dernier message: 10/04/2007, 09h42
  4. Comment générer des pages HTML dynamiques ?
    Par Devil666 dans le forum Java EE
    Réponses: 2
    Dernier message: 15/04/2005, 10h56
  5. [Debutant(e)]Générer du code JSP dynamiquement
    Par Gibier dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 16/01/2004, 11h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo