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 :

Auto écriture dans un module [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Amateur
    Inscrit en
    Avril 2012
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Avril 2012
    Messages : 49
    Par défaut Auto écriture dans un module
    Bonjour,
    Le programme permet l'auto écriture de "sub" dans un module en fonction des besoins. Cette étape fonctionne ainsi que les tests sur l'existence du module etc.
    Cependant, suite à la génération du code qui est OK :

    • et bien que l'utilisateur soit "de retour" sur la feuille de travail,
    • et dans la bonne cellule de saisie,


    La saisie de l'utilisateur s'écrit dans le module ce qui bien sur engendre un couac !
    Voici le code utilisé (qui est une adaptation de l'un des tutos de Dev):
    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
     
    '*********************************************************
    'TelNOM = Nom de la macro
    'TelNUM = Indice specifique du CMD
    'CodeACTION = Indice de la macro à déclancher
    '"Sub " & TelNOM & "():Call FAIREY(" & TelNUM & ") :End Sub" = La SUB écrite automatiquement
    'Nom_MODULE = Public Const du nom du module requis
    'Worksheets(F_R) = La feuille de travail du classeur
    '*********************************************************
    Public Sub ECRIRE_DANS_MODULE(TelNom As String, TelNUM As Integer, CodeACTION As Integer)
    Application.VBE.ActiveVBProject.VBComponents(Nom_MODULE).Activate
        With Application.VBE.SelectedVBComponent
            Select Case CodeACTION
            Case Is = 0
            Application.VBE.CodePanes(1).CodeModule.AddFromString "Private Sub " & TelNom & "():Call FAIREY(" & TelNUM & ") :End Sub"
            Case Is = 1
            Application.VBE.CodePanes(1).CodeModule.AddFromString "Private Sub " & TelNom & "():dim mont as C_MOOVE:set mont=new C_MOOVE:Call mont.M_M(" & TelNUM & ") :End Sub"
     
            Case Is = 2
            Application.VBE.CodePanes(1).CodeModule.AddFromString "Private Sub " & TelNom & "():dim det as C_MOOVE: set det = new C_MOOVE: Call det.M_S(" & TelNUM & ") :End Sub"
     
            Case Is = 3
            Application.VBE.CodePanes(1).CodeModule.AddFromString "Private Sub " & TelNom & "():dim desc as C_MOOVE:set desc = new C_MOOVE:Call desc.M_D(" & TelNUM & ") :End Sub"
     
            Case Is = 4
            Application.VBE.CodePanes(1).CodeModule.AddFromString "Private Sub " & TelNom & "():dim aj as C_MOOVE:set aj = new C_MOOVE:Call aj.M_A(" & TelNUM & ") :End Sub"
     
     
    Case Else
     
            End Select
     
        End With
    Application.ThisWorkbook.Worksheets(F_R).Cells(1, 1).Activate
     
    End Sub
    Une dernière précision, la feuille est verrouillée sauf bien sur les cellules de saisies. Hors lorsque l'on fait la saisie il ne se passe rien ... car la saisie continue dans le module en instance sauf si l'on clique plusieurs fois sur la cellule !
    J'aimerai donc trouver le moyen de clore l’accès au module avant de "revenir" à la feuille. Je ne sais si je suis compréhensible ? Merci par avance, bien cordialement.

  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 : 51
    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
    Bonjour,

    Et en n'activant pas le module ?

    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
    Public Sub ECRIRE_DANS_MODULE(TelNom As String, TelNUM As Integer, CodeACTION As Integer)
     
        With Application.VBE.ActiveVBProject.VBComponents(Nom_MODULE)
            Select Case CodeACTION
            Case Is = 0
            Application.VBE.CodePanes(1).CodeModule.AddFromString "Private Sub " & TelNom & "():Call FAIREY(" & TelNUM & ") :End Sub"
            Case Is = 1
            Application.VBE.CodePanes(1).CodeModule.AddFromString "Private Sub " & TelNom & "():dim mont as C_MOOVE:set mont=new C_MOOVE:Call mont.M_M(" & TelNUM & ") :End Sub"
     
            Case Is = 2
            Application.VBE.CodePanes(1).CodeModule.AddFromString "Private Sub " & TelNom & "():dim det as C_MOOVE: set det = new C_MOOVE: Call det.M_S(" & TelNUM & ") :End Sub"
     
            Case Is = 3
            Application.VBE.CodePanes(1).CodeModule.AddFromString "Private Sub " & TelNom & "():dim desc as C_MOOVE:set desc = new C_MOOVE:Call desc.M_D(" & TelNUM & ") :End Sub"
     
            Case Is = 4
            Application.VBE.CodePanes(1).CodeModule.AddFromString "Private Sub " & TelNom & "():dim aj as C_MOOVE:set aj = new C_MOOVE:Call aj.M_A(" & TelNUM & ") :End Sub"
     
     
    Case Else

  3. #3
    Membre averti
    Homme Profil pro
    Amateur
    Inscrit en
    Avril 2012
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Avril 2012
    Messages : 49
    Par défaut Bonjour et merci pour la promptitude
    Par contre je viens de tester la suppression de Activate mais la compilation deviens alors impossible.
    Le msg est :

    Attendu : Identificateur ou expression entre crochets

    Les autres propositions automatiques suite au point ne me semblaient pas valables mais je vais quand même les explorer, je reste preneur d'une autre idée, encore merci.

  4. #4
    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 : 51
    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
    Un exemple de code qui ne pose pas ce genre de probleme

    Ici c'est la cération d'un userform en auto avec son code, mais c'est très proche pour un module
    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
     
    Dim Usf As VBComponent
    Dim obj As Object
    Dim i As Integer
     
     
    Set Usf = ThisWorkbook.VBProject.VBComponents.Add(vbext_ct_MSForm)
     
    With Usf
     
        .Properties("Name") = "frm_Ecritures"
        .Properties("StartUpPosition") = 1
        .Properties("Width") = 604.5
        .Properties("Height") = 362
        .Properties("Caption") = "Liste des Ecritures"
     
    End With
     
     
                                    '#########################
                                    '### Ajoute les Objets ###
                                    '#########################
     
    Set obj = Usf.Designer.Controls.Add("Forms.ListBox.1")
    With obj
        .BackColor = &H80000018
        .BorderStyle = 1
        .SpecialEffect = 0
        .MultiSelect = 2
        .Font.Name = "Courier New"
        .IntegralHeight = False
        .BoundColumn = 0
        .Left = 0
        .Top = 0
        .Width = 600
        .Height = 337
    End With
     
     
                                    '######################
                                    '### Ajoute le code ###
                                    '######################
     
     
    With Usf.CodeModule
        i = .CountOfLines
        .InsertLines i + 1, "Private Sub UserForm_Initialize()"
        .InsertLines i + 2, "AfficheList"
        .InsertLines i + 3, "End Sub"
    End With

  5. #5
    Membre averti
    Homme Profil pro
    Amateur
    Inscrit en
    Avril 2012
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Amateur

    Informations forums :
    Inscription : Avril 2012
    Messages : 49
    Par défaut Bien vu
    J'ai transformé le code ainsi grâce au votre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Dim Mon_MODULE As VBComponent
    Set Mon_MODULE = Application.VBE.ActiveVBProject.VBComponents(Nom_MODULE)
     
    With Mon_MODULE
    ... etc
    Les tests sont à présent OK, encore merci !

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

Discussions similaires

  1. problème d'écriture dans un module
    Par sebac dans le forum IHM
    Réponses: 2
    Dernier message: 05/07/2007, 17h10
  2. [JUnit] Junit écriture dans un fichier
    Par mikael35 dans le forum Tests et Performance
    Réponses: 1
    Dernier message: 10/08/2004, 13h11
  3. Écriture dans un DBgrid quand utilise un query comme dataset
    Par dcayou dans le forum Bases de données
    Réponses: 3
    Dernier message: 13/07/2004, 22h22
  4. [VB.NET] Appeler une sub public dans un module de form
    Par SergeF dans le forum Windows Forms
    Réponses: 3
    Dernier message: 01/06/2004, 13h08

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