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 :

Générer des macros?


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 106
    Par défaut Générer des macros?
    Bonjour à tous...

    j'ai un gros petit soucis

    en fait j'ai un UserForm qui est constitué d'un TextBox et d'un CommandButton, jusqu'ici facil...

    J'ai un code dans l'userform qui génére des macros, et c'est la que ça se complique.

    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
    34
    35
    36
    Private Sub CommandButton1_Click()
    Dim W As Workbook
    Dim vbM As VBComponent
     
     
    Set W = Workbooks("wanao.xls") 'prend le classeur courant
     
    'crée un nouveau module dans le classeur
    Set vbM = W.VBProject.VBComponents.Add(vbext_ct_StdModule)
     
    If TextBox1.Value = 1 Then
         'ajoute la fonction qui crée la colonne dans le classeur actif avec 1 col
         vbM.CodeModule.InsertLines 1, "Sub colonne"
         vbM.CodeModule.InsertLines 2, "Range(""B5"").Select"
         vbM.CodeModule.InsertLines 3, "Selection.Borders(xlDiagonalDown).LineStyle = xlNone"
         vbM.CodeModule.InsertLines 4, "Selection.Borders(xlDiagonalUp).LineStyle = xlNone"
         vbM.CodeModule.InsertLines 5, "With Selection.Borders(xlEdgeLeft)"
         vbM.CodeModule.InsertLines 6, ".LineStyle = xlContinuous"
         vbM.CodeModule.InsertLines 7, ".Weight = xlThin"
         vbM.CodeModule.InsertLines 8, ".ColorIndex = xlAutomatic"
         vbM.CodeModule.InsertLines 9, "End With"
         vbM.CodeModule.InsertLines 10, "With Selection.Borders(xlEdgeTop)"
         vbM.CodeModule.InsertLines 11, ".LineStyle = xlContinuous"
         vbM.CodeModule.InsertLines 12, ".Weight = xlThin"
         vbM.CodeModule.InsertLines 13, ".ColorIndex = xlAutomatic"
         vbM.CodeModule.InsertLines 14, "End With"
         vbM.CodeModule.InsertLines 15, "Selection.Borders(xlEdgeBottom).LineStyle = xlNone"
         vbM.CodeModule.InsertLines 16, "With Selection.Borders(xlEdgeRight)"
         vbM.CodeModule.InsertLines 17, ".LineStyle = xlContinuous"
         vbM.CodeModule.InsertLines 18, ".Weight = xlThin"
         vbM.CodeModule.InsertLines 19, ".ColorIndex = xlAutomatic"
         vbM.CodeModule.InsertLines 20, "End With"
         vbM.CodeModule.InsertLines 21, "End sub"
         Application.VBE.MainWindow.Visible = False
    End If
    End Sub
    En fait le code que vous voyez là, génère un Macros(un Module) dans mon classeur et un fois que je le démarre ça fonctionne, ici la macro change la propriété de la cellule "B5" , mais justement c'est la le problème, c'est que j'aimerai moi-même dire quel colonne saisir (ici c'est 1) grace à mon textBox...

    Je sais pas si j'ai été clair,
    en j'aimerai lorsque je saisi par exemple 6 dans mon TextBox et que je clic sur CommandButton, et bien que ça me génère un macros qui lorsque je la lance change les propriétés des cellules B5,C5,D5,E5,F5,G5

    Si vous avez des questions?

  2. #2
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Est ce que ce code fais ce que tu souhaites
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vbM.CodeModule.InsertLines 2, "Range(""B" & textbox.text & """).Select"

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 106
    Par défaut
    pour être plus clair j'ai mis une pièce jointe...

    en fait je veux moi même gérer ma macro...

    si je saisi 4 colonnes,
    et bien ensuite je donne le titre des 4 colonnes,
    et pour finir je génére la macros...
    Images attachées Images attachées  

  4. #4
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 106
    Par défaut
    Non ça ne marche pas

    en fait faut oublier mon code à partir de
    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
    If TextBox1.Value = 1 Then
         'ajoute la fonction qui crée la colonne dans le classeur actif avec 1 col
         vbM.CodeModule.InsertLines 1, "Sub colonne"
         vbM.CodeModule.InsertLines 2, "Range(""B" & TextBox.Text & """).Select"
         vbM.CodeModule.InsertLines 3, "Selection.Borders(xlDiagonalDown).LineStyle = xlNone"
         vbM.CodeModule.InsertLines 4, "Selection.Borders(xlDiagonalUp).LineStyle = xlNone"
         vbM.CodeModule.InsertLines 5, "With Selection.Borders(xlEdgeLeft)"
         vbM.CodeModule.InsertLines 6, ".LineStyle = xlContinuous"
         vbM.CodeModule.InsertLines 7, ".Weight = xlThin"
         vbM.CodeModule.InsertLines 8, ".ColorIndex = xlAutomatic"
         vbM.CodeModule.InsertLines 9, "End With"
         vbM.CodeModule.InsertLines 10, "With Selection.Borders(xlEdgeTop)"
         vbM.CodeModule.InsertLines 11, ".LineStyle = xlContinuous"
         vbM.CodeModule.InsertLines 12, ".Weight = xlThin"
         vbM.CodeModule.InsertLines 13, ".ColorIndex = xlAutomatic"
         vbM.CodeModule.InsertLines 14, "End With"
         vbM.CodeModule.InsertLines 15, "Selection.Borders(xlEdgeBottom).LineStyle = xlNone"
         vbM.CodeModule.InsertLines 16, "With Selection.Borders(xlEdgeRight)"
         vbM.CodeModule.InsertLines 17, ".LineStyle = xlContinuous"
         vbM.CodeModule.InsertLines 18, ".Weight = xlThin"
         vbM.CodeModule.InsertLines 19, ".ColorIndex = xlAutomatic"
         vbM.CodeModule.InsertLines 20, "End With"
         vbM.CodeModule.InsertLines 21, "End sub"
         Application.VBE.MainWindow.Visible = False
    End If
    car en fait c'est pas bien...

    je pense qu'avec le lien que j'ai mis auparavant c'est assez clair, pour vous éclairer,
    oubliez les propriétés de la cellule ci-dessus...

  5. #5
    Membre Expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 797
    Par défaut
    Ce qui suit n'est pas une réponse à ta question mais une proposition d'amélioration : au lieu de coder ta macro avec des InsertLines je te suggère de passer par un fichier TXT que tu importeras avec la méthode AddFromFile.

    Ci-dessous un exemple (incomplet)

    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 AccessApp As Access.Application
    Dim MyModule As Object
    
    Set AccessApp = GetObject(sDBName)
             
       With AccessApp
       
          ' Create a new Module.
       
          .RunCommand acCmdNewObjectModule
    
          ' Set MyModule to be the new Module Object.
    
          Set MyModule = .Modules.Item(.Modules.Count - 1)
          
          Call MyModule.DeleteLines(1, MyModule.CountOfLines)
       
          MyModule.AddFromFile (cModuleFileName)
       
          ' Save, close, and rename the new Module as "Created Code."
       
          .DoCmd.Save acModule, MyModule
          .DoCmd.Close acModule, MyModule, acSaveYes

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 255
    Par défaut
    Bonjour,
    Juste pour compréhension du code suivant:
    Dim vbM As VBComponent
    Pourquoi me renvoyer :
    'type défini par l'utilisateur non défini !!!!

    Merci

  7. #7
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 514
    Par défaut
    Bonjour,

    @alexFred

    Dans VBE, Outils>Références

    Il faut cocher la référence à Microsoft Visual Basic for Applications Extensibility x.y

    @skorpio:

    As tu envisagé une approche plus classique avec une macro allant chercher ses parametres à l'aide de la fonction inputbox ?

    Cordialement,

    Tirex28/

  8. #8
    Membre Expert
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Par défaut
    Le contrôle RefEdit te serait très utile dans ton cas. Tu verras c'est magique.

  9. #9
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    106
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 106
    Par défaut
    c'est assez complexe, je ne sais pas utiliser le RefEdit dans ce cas

Discussions similaires

  1. [XL-2010] Générer des macros événements par boucle
    Par toniiio29 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 11/02/2014, 12h58
  2. [Toutes versions] Générer des commentaires de macro
    Par gege765 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 01/12/2013, 12h43
  3. Générer des macros?
    Par skorpio dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 11/07/2007, 16h31
  4. [Insoluble] Générer des commentaires par Macro
    Par Ziploppe dans le forum C++
    Réponses: 2
    Dernier message: 18/05/2007, 10h12

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