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 :

créer un évenement dans ThisWorkbook par une macro


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 17
    Points : 18
    Points
    18
    Par défaut créer un évenement dans ThisWorkbook par une macro
    Lorsque je transfère par une macro le code suivant du module vers ThisWorkbook, Excel plante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Set TW = Wb.VBProject.VBComponents("ThisWorkbook").CodeModule
        With TW
        x = .CountOfLines
        .InsertLines x + 1, "Private Sub Workbook_Open()"
          End With
    Même chose avec "Private Sub Workbook_BeforeClose alors que pour d'autres procédures évenementielles tout se passe correctement ?

    Quelqu'un sait-il pourquoi et comment y remédier ?

    jmcrib

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Comme je ne connais pas le début de ton code, en voici un qui prend en compte le nom de ton fichier dans une collection de fichiers.
    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 EcrireDansThisWorkbook()
    Dim i, nomFich, x as long
    nomFich = ThisWorkbook.name
            For i = 1 To Application.VBE.VBProjects.Count
                If InStr(Application.VBE.VBProjects(i).Filename, NomFich) <> 0 Then
                    nbModules = Application.VBE.VBProjects(i).VBComponents.Count
                    For Each LeModule In Application.VBE.VBProjects(i).VBComponents
                        If LeModule.Name = "ThisWorkbook" Then
                            x = LeModule.CodeModule.CountOfLines
                            LeModule.CodeModule.InsertLines x + 1, "Private Sub Workbook_Open()"
                            LeModule.CodeModule.InsertLines x + 2, "    Msgbox ""Bienvenue sur le forum !"""
                            LeModule.CodeModule.InsertLines x + 3, "End sub"
                        End If
                    Next
                End If
            Next i
    End Sub
    Remplace nomFich par le nom de ton classeur et teste ce code
    A+

  3. #3
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Non, je ne comprends pas... enfin si... mais ai du mal à saisir le pourquoi du comment... Dans Application.VBE.VBProjects(i), je n'ai pas réussi à remplacer i par le nom 'complet' du fichier alors que l'index et Name sont acceptés
    Faudrait que Michel (SilkyRoad) ou bbil ou AlainTech ou tout autre ayant une meilleure connaissance des arcanes de VBA passe par là et nous explique tout ça.
    On pourrait sans doute simplifier mon code en supprimant les tests... Je crois d'ailleurs que j'avais réussi dans une autre vie mais là j'ai échoué
    Mais ne dit-on pas "l'essentiel c'est que ça marche !"
    A+

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 17
    Points : 18
    Points
    18
    Par défaut
    En fait le code exact que j'ai pris dans le tutoriel de Silky Road "Visual Basic Editor p 19 " est le suivant:
    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
     
    Sub ImportThisWorkbook()
        Dim oModule As CodeModule
        Dim VbComp As VBComponent
        Dim TW As CodeModule
        Dim Cible As String
     
        Cible = "ModuleImport"
     
    'Définit le classeur de destination (qui doit être préalablement ouvert)
        Set Wb = Workbooks("NomDuFichierConcerné.xls")
     
    'Charge le code de ThisWorkbook.cls dans le module de classe du classeur de destination
        Set VbComp = Wb.VBProject.VBComponents.Import("C:\Documents and Settings\JMC\Bureau\ThisWorkbook.cls")
     
    ' renomme le module de classe(pour le supprimer plus facilement ultérieurement)
        VbComp.Name = Cible
     
    'Définit le code de "ThisWorkbook.cls"
        Set oModule = VbComp.CodeModule
     
    'Tranfère les données chargées dans le module vers ThisWorkbook,les données existantes dans "ThisWorkbook" sont écrasées.
        With Wb.VBProject.VBComponents("ThisWorkbook").CodeModule
        x = .CountOfLines
        .DeleteLines 1, x
        .InsertLines 1, oModule.Lines(1, oModule.CountOfLines)
        End With
     
    'Supprime le module de classe
        With Wb.VBProject.VBComponents
            .Remove .Item(Cible)
        End With
     
    End Sub
    mais effectivement comme tu dis " l'essentiel est que cela marche" aussi je vais utiliser ton code en essayant de le simplier pour le fun. Merci encore Ouskel n'or.
    jmcrib

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

Discussions similaires

  1. [2013] Remplacement d'un texte dans word par une macro sur excel
    Par Benoit L dans le forum Microsoft Office
    Réponses: 4
    Dernier message: 06/02/2015, 14h39
  2. inserer une ligne dans une feuille liee a une autre par une macro
    Par EF1453 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 03/12/2009, 13h19
  3. [E-03] Ecrire dans "ThisWorkbook" par macro
    Par neiluj26 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/03/2009, 17h36
  4. remplacement carré par ; dans un fichier excel crée par une macro
    Par om51ft dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 22/11/2007, 16h00
  5. Créer un évenement dans une class
    Par Walm dans le forum C++Builder
    Réponses: 3
    Dernier message: 05/05/2006, 14h36

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