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 :

excuter du code quand un Label perd le controle


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 105
    Points : 78
    Points
    78
    Par défaut excuter du code quand un Label perd le controle
    Bonjour,
    J'ai beau lire plein de tutoriels et de discussion sur le sujet, je ne comprends pas, et je me tourne vers vous!
    Dans une feuille Excel, je crée un certain nombre de Textbox par ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    With s1.Shapes.AddTextbox(msoTextOrientationHorizontal, 43 + ((lig - 10) * 60), 60 + (k - 1) * 10, 50, 50)
                        .Name = nom1
                        .TextFrame.Characters.Text = nom
                        .Fill.ForeColor.SchemeColor = s2.Cells(lig, col + 4)
                        .TextFrame.HorizontalAlignment = xlCenter
                        .TextFrame.VerticalAlignment = xlCenter
                        .Line.Weight = 2
                        .Line.ForeColor.RGB = RGB(0, 0, 0)
                        '.TopLeftCell = s1.Range("C18")
                End With
    Je déplace ensuite ces textbox (ils représentent des séances de cinéma )dans la feuille, et je voudrais prendre le contrôle à chaque fois que j'ai déplacé un texbox, c'est à dire créer une macro sur l’événement Lost_Focus.
    Une première question : est-ce possible? Si oui, comment faire?
    Je ne comprends pas comment traiter ces événements "hérités" de Control d'après la doc Microsoft.
    Merci de votre aide.

  2. #2
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    bonjour
    je vais etre brutal et clair

    avec ces object ce n'ai pas possible on ne peut que leur attacher une fonction/sub au click et c'est tout

    pour une gestion d'evenement plus poussé il te faut utiliser les control activX textbox commandbutton etc........

    edit par contre comme il font partie de la collection shapes tu peux utiliser l'evenement selection_change du sheet pour quand tu le selectionne mais pour le reste c'est walouh walouh

    désolé
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 105
    Points : 78
    Points
    78
    Par défaut
    Faut pas être désolé, Patrick! C'est pas possible, OK; je vais faire autrement.
    Je considère la discussion terminée.
    Merci.

  4. #4
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour Pantagruel92
    J'ignore les raisons pour lesquelles tu déplaces (manuellement ?) cette zone de texte et cela ne me regarde en fait pas.
    Simplement ceci : rien n'est plus simple, en lieu et place de déplacer manuellement puis "de prendre le contrôle" (??) une fois le déplacement terminé, que de prendre tout bêtement en charge dynamiquement le déplacement lui-même.
    Car si tu sais où déplacer manuellement, rien ne t'empêche de le faire dynamiquement.
    Tu peux utiliser à cette fin (par exemple) la procédure évènementielle Worksheet_BeforeDoubleClick de cette manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
      Shapes("toto").Left = Target.Left
      Shapes("toto").Top = Target.Top
    End Sub
    et tu sais alors ipso-facto que la "textbox" toto a par définition-même été déplacée, non ?
    Yapluka.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 105
    Points : 78
    Points
    78
    Par défaut
    Désolé, unparia et dysorthographie(!), je croyais la discussion terminée depuis le 16 Février. Je viens juste d'y jeter un oeil, et vu qu'elle avait continué.
    Voilà pourquoi je dois déplacer les textbox manuellement:
    L'application construit le programme d'un cinéma pour les trois prochaines semaines. Je pars de la liste des films prévus , et une procédure construit une textbox par film. La hauteur de la textbox est proportionnelle à la longueur du film, et le texte est le titre du film. La procédure place chaque textbox sur une feuille dont les colonnes sont les jours de la semaine, et les lignes les heures de projection. Ensuite, manuellement, je place les textbox aux endroits où je veux que la séance ait lieu. Ce processus manuel peut être assez long pour obtenir un programme cohérent. Je construis ainsi le programme des trois prochaines semaines.
    Quand j'ai déplacé un film à sa place, et que je relâche la textbox, j'aurais voulu pouvoir modifier le texte de la textbox pour indiquer l'heure de la séance.
    J'ai résolu le problème de la manière suivante : je déplace tous mes films aux jours et heures que je veux, puis je modifie, par programme, les textes de toutes les textbox .
    Je ne sais pas si c'est clair?
    Au fait, vous confirmez qu'il n'y a aucun moyen d'intervenir sur l'événement lostfocus dans une textbox? A quoi sert, alors, l'indication mystérieuse "Hérité de Control" qu'on trouve dans la littérature Microsoft là où elle liste les événements liés à un controle Textbox?
    Merci .

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    bonjour
    oui je pêut te confirmer que pour uns SHAPES(textbox) il n'y a pas moyen
    par contre un CONTROL textbox oui du moins par son mouseUP qu'est ce qui t'empeche alors d'utiliser le control plutot que le shape???????

    il y aurait peu etre un moyen en hackant la souris sur son getstate

    ou meme ayant le click sur les shapes par le ".onction" faire apparaitre un control label meme transparent et se servire de lui pour deplacer et utiliser ses evenements y conpris son focus

    mais perso ayant a ma dispo des controls qui font exactement ce dont tu a besoin
    tu peux donner un exemple simplifié avec 2 ou 3 film et la base de ta construction je vais regarder
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  7. #7
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re ce genre de chose ??
    juste pour savoir
    c'est ce genre de chose
    Nom : demo2.gif
Affichages : 197
Taille : 504,7 Ko
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 105
    Points : 78
    Points
    78
    Par défaut
    Patrick,
    Je te joins ici un code simplifié qui fait ce que je fais dans mon appli :
    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
     
    Sub creer_textes()
    Dim s1 As Worksheet
    Set s1 = ActiveWorkbook.Worksheets("Feuil1")
        For k = 1 To 3
        With s1.Shapes.AddTextbox(msoTextOrientationHorizontal, _
                                                                50 + (k * 50), 50 + (k * 50), 80, 40)
                            .Name = dessin & k
                            .TextFrame.Characters.Text = "forme n° " & k
                            .Fill.ForeColor.SchemeColor = k + 3
                            .TextFrame.HorizontalAlignment = xlCenter
                            .TextFrame.VerticalAlignment = xlCenter
                            .Line.Weight = 2
                            .Line.ForeColor.RGB = RGB(0, 0, 0)
     
        End With
        Next
    End Sub
     
    Sub modifier_textes()
    Dim s1 As Worksheet
    Set s1 = ActiveWorkbook.Worksheets("Feuil1")
    For Each sh In s1.Shapes
        If InStr(1, sh.TextFrame.Characters.Text, "forme n") = 1 Then       'élimine toutes les textbox qui ne nous interressent pas
            lig = sh.TopLeftCell.Row
            sh.TextFrame.Characters.Text = lig & Chr(10) & sh.TextFrame.Characters.Text
        End If
    Next
    End Sub
    La première procédure crée 3 textbox. On les déplace sur la feuille. La deuxième procédure change le texte de chaque box en y rajoutant le numéro de ligne où on a déplacé la box.
    Ce que je voudrais, c'est qu'à chaque fois que je déplace une textbox, le changement de texte ait lieu. C'est impossible avec des shapes Textbox.
    Je ne sais pas comment programmer pour ls remplacer par des controles.
    Merci de ton aide

  9. #9
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut RE
    OK tu veux que les carrés porte le nom ligne ou elles se trouve +son nom pendant le deplacement ou au relacher
    deja rien que pour les déplacer il faut vraiment les chopper par les bords sinon on selectionne le texte a l'interieur
    et comme il n'y a pas d'evenement sans boucle perpetuelle muni d'un stop/start c'est pas possible
    une boucle perpetuelle prenant ma fois pas mal de ressource et limitant tes agissement sauf avec api mais usine a gaz

    avec des controls label textbox button etc... on peut jouer avec mousemove/down/up et on est pas obligé de choper par les bords

    le probleme c'est que pour gerer ces evenement il va te falloir classer tes carré pour gerer les evenements
    ce qui fait que tu a besoins d'un module classe
    c'est realisable mais serait tu en mesure de le deboguer le cas echéant ???

    est tu sur de vouloir aller dans ce chemin la ?????
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 105
    Points : 78
    Points
    78
    Par défaut
    Non, je n'ai pas envie de gérer des modules de classes, ce que d'ailleurs, je ne sais pas faire! Je pense que je vais me contenter de ce que j'ai déjà fait, et qui marche très bien. L'obligation de prendre par les bords n'est pas gênante du tout. Le seul ennui de ma méthode est d'obliger de temps en temps à cliquer sur un bouton de commande "Modifier les textes" pour mettre à jour les heures réelles de séance.
    Merci de ton aide.
    Si tu n'as rien à ajouter, je te laisse fermer la discussion, OK?

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 105
    Points : 78
    Points
    78
    Par défaut
    Bonjour,
    Avant de clore la discussion, un petit mot pour Unparia et Dysorthographie : s'il vous plait,ne prenez pas, à priori, ceux qui posent des questions pour des gens qui ne savent pas les poser. Il est très désagréable de lire des commentaires comme "C'est toujours le même problème" ou "Tout à fait!" . J'avais posé exactement et précisément le problème qui m'occupe, (Par exemple, je ne peux pas, fonctionnellement, faire autrement que de déplacer manuellement mes textbox). Relisez ma question au début de la discussion : est-il possible de prendre le contrôle sur l’événement Lostfocus d'une textbox? La réponse de Patrick me va parfaitement : non, on ne peut pas.
    Tout ça est dit très amicalement.
    Bon week-end

  12. #12
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    s'il vous plait,ne prenez pas, à priori, ceux qui posent des questions pour des gens qui ne savent pas les poser.
    puis
    J'avais posé exactement et précisément le problème qui m'occupe, (Par exemple, je ne peux pas, fonctionnellement, faire autrement que de déplacer manuellement mes textbox)
    en dit vraiment long. Désolé.
    Soyons clairs :
    A moins (ce qui serait étonnant) que tu ne choisisses très aléatoirement où déplacer une textbox, tu sais où tu vas la placer et pourquoi tu l'y places. Et dès lors que tu le sais :
    1) ce placement peut se faire par vba
    2) dès lors que cela se fait par une instruction, tu sais forcément, à la fin de son exécution, que tu as déplacé.
    3) C'est ta conception elle-même qu'il te faut remettre en cause (que cela te plaise ou non) et c'est cela qui t'aurait été dit si tu avais vraiment et clairement exposé les tenants et aboutissants.
    4) relis ce que tu avais écrit :
    et je voudrais prendre le contrôle à chaque fois que j'ai déplacé un texbox, c'est à dire créer une macro sur l’événement Lost_Focus.
    Rien à voir avec la perte du focus. Déplacer est UNE chose. Perdre le focus en est une AUTRE.
    5) et ton titre lui-même :
    excuter du code quand un Label perd le controle
    ----- un Label subit des évènements. Il ne "contrôle" rien.
    ----- Et ce qui, dans ton titre, est un "label" serait finalement une "textbox" (qui ne "contrôle" rien non plus, mais "subit" également)
    etc ...
    6) Il est évident que nous ne posons pas exactement le même regard sur ce qu'il convient d'appeler et précision et aide vraiment utile.
    Voilà voilà ...
    Me reste à me souvenir de ne plus tenter de t'aider dans les mêmes conditions. Et ma mémoire est excellente.
    Bonne chance
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 105
    Points : 78
    Points
    78
    Par défaut
    Unparia,
    Est ce que tu te rends compte que tu parlais de moi à la troisième personne (Il lui suffirait tout bêtement...) : tu imagines l'effet de ce "tout bêtement" sur le béotien qui s'adresse à des pros?

    Pour revenir au fond , je DOIS déplacer les textbox manuellement à des emplacements que je ne connais pas à l'avance : c'est justement pour construire la programmation du cinéma que je fais ça. C'est visuellement que je construis ce programme: il faut qu'il y ait assez de temps entre deux séances, il ne faut ps passer le même film aux mêmes heures plusieurs jours de suite, etc. Toutes ces contraintes font que ce travail peut être long. Je joins une image de ma feuille pendant ce travail. J'aurais voulu que les heures des séances que tu vois dans chaque textbox s'inscrivent là automatiquement à chaque fois que j'ai déplacé une textbox. C'est impossible, donc j'ai créé un bouton de commande (qui n'est pas sur l'image envoyée) qui place ces heures après coup. C'est moins pratique pour l'utilisateur, mais ça marche très bien.

    Pour les questions de vocabulaire, tu a entièrement raison.
    Tu ne m'aideras plus si je poses d'autres questions (ce qui est plus que vraisemblable!)? Bon, j'espère que d'autres le feront, et je répète un grand merci à ce forum qui marche formidablement bien, et qui m'a souvent aidé efficacement et rapidement.
    Jacques
    Images attachées Images attachées  

  14. #14
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re

    bonjour pantagruel
    a la vu de ton screen shot tu avais omis de dire que le height de la shape devait correspondre au range contenant l'heure de debut et de fin

    ce qui meme avec mon astuce se serait fait en deux etapes

    faut il absolument que se soit des shapes

    j'ai dans l'idée avec un menu contextuel perso et sur une selection voir merger dynamiquement la plage mettre la +couleur +titre et heure et compagnie
    donne moi un exemplaire de ton sheet avec ton tableau je te fait un exemple
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  15. #15
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Pour en revenir à des aspects purement techniques (le reste relevant de je ne sais trop quoi sur un forum de développement) :
    - un planning est un planning et ne saurait donc souffrir d'approximations
    - l'examen de la copie d'écran montre des tranches horaires prévues séparées de 15 minutes et qui ne correspondent pas forcément (on le voit bien) à la durée d'un film
    - une fusion de cellules ne saurait dans ces conditions permettre une représentation exacte sur ce planning

    Une solution très précise, agile, "confortable" et purement informatique (pas de déplacements manuels) existe bien évidemment , sans autre intervention de l'utilisateur que celle de clics. Elle remet toutefois en cause la conception elle-même.

    Bon dimanche à tous
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 105
    Points : 78
    Points
    78
    Par défaut
    Unparia,
    Les intervalles de temps sont en fait de 5 minutes (les heures affichées le sont dans des cellules regroupant 3 cellules de bases). Les commentaires dans chaque cellule donnent l'heure de 5 minutes en 5 minutes, ce qui est largement suffisant pour construire un planning. Je comprends très bien ta solution. Je ne suis pas sûr que quelques clics soient plus pratiques que de déplacer une shape (on peut, par exemple, déplacer la shape à plusieurs endroits avant de la "lâcher")...

    Pour toi et Patrick, je disparais quelques jours, avant de reprendre la discussion.
    Patrick, quelle feuille veux tu recevoir? Les shapes sont créées à partir de données provenant d'une autre feuille. Il te faudra les deux, je pense.
    Bon Dimanche.

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 105
    Points : 78
    Points
    78
    Par défaut On peut reprendre?
    Rebonjour,
    J'ai disparu plus longtemps que prévu, pardon! Je ne sais pas si vous serez prévenus que la discussion a repris.
    J'ai recommencé à travailler sur le projet hier, et j'ai finalement utilisé un module de classe comme Patrick l'avait suggéré.
    Ca marche très bien, sauf que, de temps en temps, il y a quelques textbox où le code du get_focus et du lost_focus ne sont pas exécutés: la procédure clickshape ne passe pas la main à la procedure Shapeclic. Voici le code :
    Dans le module de classe
    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
    Private memShp As Shape
    Private WithEvents wbk As Workbook
     
    Public Event GetFocus(shp As Shape)
    Public Event LostFocus(shp As Shape)
     
     
    Public Sub ShapeClic(shp As Shape)
        FreeShape
        Set memShp = shp
        RaiseEvent GetFocus(memShp)
    End Sub
     
    Private Sub FreeShape()
        If Not memShp Is Nothing Then RaiseEvent LostFocus(memShp)
        Set memShp = Nothing
    End Sub
     
    Private Sub Class_Initialize()
        Set wbk = ThisWorkbook
    End Sub
     
    Private Sub wbk_BeforeClose(Cancel As Boolean)
        FreeShape
    End Sub
     
    Private Sub wbk_Deactivate()
        FreeShape
    End Sub
     
    Private Sub wbk_SheetActivate(ByVal Sh As Object)
        FreeShape
    End Sub
     
    Private Sub wbk_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
        FreeShape
    End Sub
    Dans ThisWorkbook
    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
    Private WithEvents ShapesEvts As Cls_ShapesEvents
    Public Sub ClickShape()
        On Error Resume Next
        If ShapesEvts Is Nothing Then Set ShapesEvts = New Cls_ShapesEvents
        ShapesEvts.ShapeClic ActiveSheet.Shapes(Application.Caller)
    End Sub
    Private Sub ShapesEvts_LostFocus(shp As Shape)
    nom1 = Right(shp.Name, Len(shp.Name) - InStr(1, shp.Name, "((") - 1)
    numero = Left(nom1, InStr(1, nom1, ")") - 1)
    Call heures(numero)
    End Sub
    Private Sub ShapesEvts_GetFocus(shp As Shape)
     
    'nom1 = Right(shp.Name, Len(shp.Name) - InStr(1, shp.Name, "((") - 1)
    'numero = Left(nom1, InStr(1, nom1, ")") - 1)
    'Call heures(numero)
    End Sub
    La création des textbox
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    With plansj.Shapes.AddTextbox(msoTextOrientationHorizontal, _
                                                                gauche, haut, 60, 40)
                            .Name = nom
                            .TextFrame.Characters.Text = texte_shape '
                            .TextFrame.Characters.Font.ColorIndex = couleurtexte
                            .Fill.ForeColor.RGB = couleur  'sai.Cells(sai.Cells(lig2, col2), col + 4) 'sai.Cells(lig2, col2).Interior.ColorIndex
                            .TextFrame.HorizontalAlignment = xlCenter
                            .TextFrame.VerticalAlignment = xlCenter
                            .Line.Weight = 2
                            .Line.ForeColor.RGB = RGB(0, 0, 0)
                            .OnAction = "ThisWorkbook.ClickShape"
                            '.Height = longueur
                        End With
    Pourquoi ça marche "presque" tout le temps? Mystère. Pouvez vous m'aider? Merci. Jacques

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

Discussions similaires

  1. [Toutes versions] Exécuter code quand un controle (quel qu'il soit) perd le focus
    Par 8e8eClo dans le forum VBA Access
    Réponses: 16
    Dernier message: 24/02/2017, 09h07
  2. Executer du code quand Access perd le focus
    Par Patrick Seuret dans le forum Access
    Réponses: 2
    Dernier message: 30/03/2007, 14h53
  3. Réponses: 3
    Dernier message: 20/04/2005, 12h30
  4. Réponses: 7
    Dernier message: 03/02/2005, 17h20
  5. Insérer un code quand on clique sur un smiles
    Par Blade dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 27/12/2004, 01h10

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