Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/01/2012, 11h56   #1
Membre chevronné
 
Avatar de defluc
 
Architecte
Inscription : mai 2002
Messages : 1 057
Détails du profil
Informations personnelles :
Âge : 62

Informations professionnelles :
Activité : Architecte

Informations forums :
Inscription : mai 2002
Messages : 1 057
Points : 745
Points : 745
Par défaut Erreur à la création d'un module

Bonjour à tous,

Cela fait trois jours que je sèche sur la source ci après.
Code :
1
2
3
4
5
6
7
Private Sub InsertMacro(WbkTarget As Workbook) 
  Dim  vbCompon As VBComponent
    Set vbCompon = WbkTarget.VBProject.VBComponents.Add(1)
    vbCompon.Name = "TestDeplace"
    With vbCompon.CodeModule
      .InsertLines 1, "Declare Function GetAsyncKeyState Lib ""user32.dll"" (ByVal vKey As Long) As Integer"
    End With
L'affectation de vbCompon ne se fait pas puisque l'instruction qui suit le Set déclenche l'erreur 91 : Variable objet ou variable de bloc With non définie

Par contre, le code suivant ne pose aucun problème
Code :
1
2
3
4
  With WbkTarget.VBProject.VBComponents("Feuil1").CodeModule
    l = 1
    .InsertLines l, "Private Sub Worksheet_SelectionChange(ByVal Target As Range)"
...
N'ayant trouvé aucune solution sur la toile, Je m'adresse à vous.

Merci d'avance
defluc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2012, 19h49   #2
Membre Expert
 
Homme
Inscription : décembre 2011
Messages : 566
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : décembre 2011
Messages : 566
Points : 1 081
Points : 1 081
Bonsoir,

Si le niveau de sécurité des macros le permet
(sous XLS2003 Outil -> Macro -> Securité , ; onglet <Editeurs Approuvés> ; sélectionner Faire confiance au Projet Visual Basic)

Je pense que le problème est que le module TestDeplace existe déjà dans la feuille.

Un code de ce type la devrait corriger ce problème :
moduleName : étant le nom du module dans lequel le code doit être inséré (dans l'exemple précédant TestDeplace)

Code :
1
2
3
4
5
6
7
8
9
10
11
12
Private Sub InsertMacro(WbkTarget As Workbook, moduleName As String)
    Dim vbCompon As VBComponent
 
    Set vbCompon = GetModule(WbkTarget, moduleName)
    If vbCompon Is Nothing Then
        Set vbCompon = CreateModule(WbkTarget, moduleName)
    End If
 
    With vbCompon.CodeModule
          .InsertLines 1, "Declare Function GetAsyncKeyState Lib ""user32.dll"" (ByVal vKey As Long) As Integer"
    End With
End Sub
CreateModule : Créé le module dans le classeur
Code :
1
2
3
4
Private Function CreateModule(WbkTarget As Workbook, moduleName As String) As VBComponent
        Set CreateModule = WbkTarget.VBProject.VBComponents.Add(vbext_ct_StdModule)
        CreateModule.Name = moduleName
End Function
GetModule: Retourne le module contenu dans un classeur (s'il existe). Nothing sinon
Code :
1
2
3
4
5
6
7
8
9
10
Private Function GetModule(WbkTarget As Workbook, moduleName As String) As VBComponent
    Dim vbCompon As VBComponent
 
    For Each vbCompon In WbkTarget.VBProject.VBComponents
        If vbCompon.Name = moduleName Then
            Set GetModule = vbCompon
            Exit For
        End If
    Next
End Function
BlueMonkey est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2012, 18h42   #3
Membre chevronné
 
Avatar de defluc
 
Architecte
Inscription : mai 2002
Messages : 1 057
Détails du profil
Informations personnelles :
Âge : 62

Informations professionnelles :
Activité : Architecte

Informations forums :
Inscription : mai 2002
Messages : 1 057
Points : 745
Points : 745
Comme l'insertion dans "Feuil1" fonctionnait, j'ai déplacé le code posant problème après et, oh miracle, cela marche.
Pourquoi ? mystère.
Je marque donc le sujet comme résolu.
Mais au préalable, je te remercie pour ta réponse et surtout pour la fonction très utile «GetModule».

Bon week-end
defluc est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h00.


 
 
 
 
Partenaires

Hébergement Web