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 :

[VBA-E]Créer une feuille qui contient du code


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Points : 448
    Points
    448
    Par défaut [VBA-E]Créer une feuille qui contient du code
    Attention on passe à l'étape supérieure !!

    Je voudrais savoir si il est possible de créer une feuille excel en lui mettant du code (je veux dire que la feuille contienne du code VBA).


    En fait je voudrai que si une feuille d'un certain nom n'existe pas, la créer et qu'elle appelle une procédure

  2. #2
    Membre expérimenté Avatar de Megaxel
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    1 187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 1 187
    Points : 1 405
    Points
    1 405
    Par défaut
    Hop, tac tac, me voila...
    Tadaaaaaa!
    Bon, la réponse à la question est "oui". Fais une recherche sur le forum à "VBProject". Tu devrais trouver ton bonheur.
    Maintenant, quand je lis ce que tu veux faire, je ne sais pas si c'est la meilleure solution. Tu sais que tu peux appeler depuis un classeur une fonction (ou une procédure) qui se trouve dans un autre classeur?

    Et je retourne dormir...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Points : 448
    Points
    448
    Par défaut
    Ouép je savais

    Mais en fait, le feuille sur laquelle je veux générer du code a un bouton et je veux qu'en cliquant dessus il appele une procédure qui se trouve dans module1 donc le code généré serait juste ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private sub nombouton_click()
         call nomprocedure(parametre)
    end sub
    voilà ! alosr maintenant ptet que j'ai mal compris ta réponse mega ^^

  4. #4
    Membre expérimenté Avatar de Megaxel
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    1 187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 1 187
    Points : 1 405
    Points
    1 405
    Par défaut
    Alors il me faut une précision: quand tu dis "feuille Excel", tu parles d'un classeur complet (un fichier Gnagnagna.xls) ou un onglet dans le classeur où tu te trouves déjà?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Points : 448
    Points
    448
    Par défaut
    Quand je dis "feuille excel" je parle d'un onglet, quand je parle de "gnagagna.xls" je dit classeur.

    C'est pas comme ca que ca s' apelle normalement?

  6. #6
    Membre expérimenté Avatar de Megaxel
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    1 187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 1 187
    Points : 1 405
    Points
    1 405
    Par défaut
    Je ne sais pas s'il y a une dénomination officielle.
    A part peut-être "WorkBook" et "WorkSheet", mais ça va faire hurler certaines personnes...
    Ok, donc, dans ton cas, j'ai peut-être un truc qui pourrait te convenir: tu crées ton onglet avec bouton et code à l'avance, et tu le masques.
    Quand tu en as besoin d'un, tu fais une copie de cet onglet masqué (mais qui ne défend ni la veuve, ni l'orphelin...), tu rends cette copie visible, et tu lui donnes le nom que tu veux.
    Le code et bouton devraient, je pense, être copiés aussi.
    A tester...

  7. #7
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 144
    Points
    20 144
    Par défaut
    bonjour Elstak , rebonjour Megaxel

    j'espere que cet exemple pourra t'aider


    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
    Dim Ws As Worksheet, Obj As OLEObject
    Dim laMacro As String
    Dim x As Integer
     
    Set Ws = Sheets.Add
     
    Set Obj = Ws.OLEObjects.Add("Forms.CommandButton.1")
    With Obj
    .Left = 50
    .Top = 50
    .Width = 120
    .Height = 30
    .Object.Caption = "Supprimer données feuille"
    End With
     
    laMacro = "Sub CommandButton1_Click()" & vbCrLf
    laMacro = laMacro & "Cells.Clear" & vbCrLf
    laMacro = laMacro & "End Sub"
     
    With ThisWorkbook.VBProject.VBComponents(ActiveSheet.Name).CodeModule
    x = .CountOfLines + 1
    .InsertLines x, laMacro
    End With


    bonne soiree
    michel

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Points : 448
    Points
    448
    Par défaut
    coucou !
    Merci de vos réponses, jvais tester ca mais peut etre pas ajourdhui
    en tout cas jvous tien au courant

    sinon dans ton code silky y'a plusieur choses que je comprend pas (connais pas) j'ai essayé de rechercher vite fait sur le net mais jai rien trouvé donc ca ira surement plus vite si tu me répondais je pense

    dejà ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Object.Caption = "Supprimer données feuille"
    ensuite le With, j'en ai jamais utilisé et google me donne des réponses de merde

    voilà voilà

  9. #9
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 144
    Points
    20 144
    Par défaut
    bonjour

    La ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Object.Caption = "Supprimer données feuille"

    permet d'afficher un texte dans le commandButton . dans cet exemple , c'est "Supprimer données feuille" car la macro associée dynamiquement au bouton efface les données contenues dans les cellules (Cells.Clear)

    laMacro = laMacro & "Cells.Clear" & vbCrLf


    bien sur ce n'est qu'un exemple que tu modifiera pour ton projet


    bonne journée
    michel

  10. #10
    Membre expérimenté Avatar de Megaxel
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    1 187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 1 187
    Points : 1 405
    Points
    1 405
    Par défaut
    Le "With" est une méthode pour simplifier l'écriture, c'est une sorte de "parenthèse de factorisation". Je m'explique:
    Si tu veux modifier plusieurs propriétés d'un même objet, ce n'est pas la peine de le répéter n fois. Tu mets donc un "With" ... "End With", et entre ces deux lignes, tout ce qui commence par un "." s'applique au même objet.

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Points : 448
    Points
    448
    Par défaut
    Merci de ces réponses

    si j'ai bien compris,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    With ThisWorkbook.VBProject.VBComponents(ActiveSheet.Name).CodeModule 
    x = .CountOfLines + 1 
    .InsertLines x, laMacro 
    End With
    Revient à écrire ca?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    x = ThisWorkbook.VBProject.VBComponents(ActiveSheet.Name).CodeModule.CountOfLines + 1 
     
    ThisWorkbook.VBProject.VBComponents(ActiveSheet.Name).CodeModule.InsertLines x, laMacro

  12. #12
    Membre expérimenté Avatar de Megaxel
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    1 187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 1 187
    Points : 1 405
    Points
    1 405
    Par défaut
    Yes!

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Points : 448
    Points
    448
    Par défaut
    Alors, j'ai finalement opté pour la solution de mega ^^
    j'ai créé une feuille invisible avec du code que je copie et renomme si une feuille manque.

    Par contre la feuille copiée est aussi invisible...

    comment la erndre visible?
    j'ai tenté worksheets(nom).visible sans succes

    j'ai aussi tenté de la selectionner avant de la render visible et là j'ai une erreur où je ne peut meme pas debogger "1004 : la methode visible de la classe worksheet a echouée"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    If (Feuille(nom_partition) = False) Then
         Worksheets("modele").Copy after:=Worksheets(ActiveSheet.Name)
         ActiveSheet.Name = nom_partition 'nomme la copie
         Worksheets(nom_partition).Activate
         Worksheets(nom_partition).Visible
    End If
    Megaxel?

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Points : 448
    Points
    448
    Par défaut
    Mouarf c'est bon suffisait de mettre visible = true

    voilà y'a plus de pb

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

Discussions similaires

  1. Créer une classe qui contient plusieurs boutons
    Par alaskabender dans le forum Débuter
    Réponses: 6
    Dernier message: 01/12/2014, 12h07
  2. Réponses: 10
    Dernier message: 01/08/2011, 15h34
  3. Réponses: 6
    Dernier message: 02/10/2008, 00h02
  4. Créer une feuille qui contient une seule page seulement
    Par k-eisti dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 14/05/2007, 17h38
  5. Réponses: 3
    Dernier message: 20/03/2007, 19h54

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