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 :

Ajout dynamique de boutons plant Excel [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
    Développeur informatique
    Inscrit en
    Juin 2014
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2014
    Messages : 25
    Par défaut Ajout dynamique de boutons plant Excel
    Salut à tous,

    Je fais une application qui crée plusieurs nouveaux classeurs Excel. Après la création de chaque classeur j'ajoute des boutons (et l'évènement associé) sur une nouvelle ligne du classeur qui héberge mon application. Pour ça j'utilise le code suivant à la fin de la création de chaque nouveau classeur :

    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
    Sub CreerControle(pResp As Variant, pIteration As Integer)
        Dim ws As Worksheet
        Dim control As OLEObject
        Dim ligneEntete As Integer
        Dim x As Integer
        Dim macro As String
     
        Set ws = ThisWorkbook.Worksheets("Utilisateur")
        ligneEntete = 15
        Set control = ws.OLEObjects.Add(ClassType:="Forms.CommandButton.1", Link:=False, _
            displayAsIcon:=False, Left:=ws.Range("E1").Left - 17, Top:=ws.Range("A" & (ligneEntete + pIteration)).Top + 1, Width:=16.6, Height:=21)
        control.Name = "AjoutDestinataire" & pIteration
        control.Object.Caption = "+"
        'ajout macro
        laMacro = "Sub AjoutDestinataire" & pIteration & "_Click()" & vbCrLf
        laMacro = laMacro & "gColDest = ""D""" & vbCrLf
        laMacro = laMacro & "gRowDest = " & (ligneEntete + pIteration) & vbCrLf
        laMacro = laMacro & "Unload Newdest" & vbCrLf
        laMacro = laMacro & "Newdest.Show" & vbCrLf
        laMacro = laMacro & "End Sub"
        With ThisWorkbook.VBProject.VBComponents("Feuil2").CodeModule
            x = .CountOfLines + 1
            .InsertLines x, laMacro
        End With
    End Sub
    Petit problème, ça fait crashé Excel (Excel ne répond plus) à la création du second bouton (le premier passe sans histoire).
    Je pense que le problème se trouve au moment de créer l'évènement dynamiquement (je n'en suis pas sur car je ne peux pas faire de debogage, dès que j'ai un OLEObject dans mon code et que je veux le debugger, j'ai l'erreur "Impossible de passer en mode arrêt").
    J'ai essayé de créer une fonction test qui lance simplement cette procédure plusieurs fois de suite et là ça marche.....

    J'ai trouvé un forum anglais où une personne a eu le même problème, il a trouvé la solution mais ne la donne pas explicitement....
    http://www.ozgrid.com/forum/showthread.php?t=85508

    Merci d'avance

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Bonjour,

    Est-ce que ce ne serait pas le ThisWorkbook à changer pour ActiveWorkbook par hasard ?

  3. #3
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2014
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2014
    Messages : 25
    Par défaut
    ThisWorkbook correspond bien au classeur où se trouve le code qui s’exécute ? Si c'est le cas c'est le bon. De toute façon dans mon cas les deux doivent faire référence au même classeur.

    Je testerai quand même, on sait jamais

  4. #4
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2014
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2014
    Messages : 25
    Par défaut
    Salut,

    Bon je confirme, ActiveWorkbook donne le même résultat -> Excel plante.
    Par contre je me suis apperçu qu'Excel avait tendance à crasher dans des circonstances parfois différentes de celles énoncées dans mon premier post (il faut tout de même qu'une fonction agissant dynamiquement sur le code soit lancée). J'ai donc essayé de transférer mon code dans un nouveau classeur et là ça a l'air de marcher.

    Je n'ai pas trop envie de transférer mon code et mon interface vers un nouveau classeur car cela signifie plus ou moins ignorer le problème et rien ne me dit que ce problème disparaitra réellement. Après je pense que j'aurai pas trop le choix

    EDIT : TROUVE !
    En fait il y a une chose que j'ai oublié de préciser. Pour lancer mon traitement, j'appuis sur un bouton (OLEObject) qui se trouve sur la même feuille que celle où je place mes nouveaux boutons au cours du traitement. Du coup lors de l'ajout dynamique du code de mes nouveaux boutons, je modifie le module associé à ma feuille, module dans lequel le code de mon bouton de lancement est en train de s'exécuter. Faut croire que VBA aime pas du tout modifier un module qu'il est en train d'exécuter
    Pour résoudre le problème j'ai remplacé mon bouton de lancement OLEObject (ou ActiveX) par un simple contrôle de formulaire auquel j'ai lié une macro de lancement qui se trouve dans un autre module.

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

Discussions similaires

  1. Ajouter dynamiquement un bouton radio à un gridview
    Par mimosa803 dans le forum ASP.NET
    Réponses: 3
    Dernier message: 15/07/2009, 11h07
  2. Ajout dynamique de bouton de défilement
    Par ludogoal dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 27/05/2008, 13h45
  3. Réponses: 2
    Dernier message: 24/01/2008, 10h44
  4. Ajouter dynamiquement un bouton
    Par toure32 dans le forum Delphi
    Réponses: 2
    Dernier message: 16/04/2007, 23h40
  5. ajouter un bouton sur excel
    Par pacou62 dans le forum Access
    Réponses: 1
    Dernier message: 22/11/2006, 07h54

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