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 :

identifier le bouton dans la caption qui a été cliqué


Sujet :

Macros et VBA Excel

  1. #1
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    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 374
    Billets dans le blog
    8
    Par défaut identifier le bouton dans la caption qui a été cliqué
    bonjour a tous

    par macro et en utilisant les apis j'ajoute les deux boutons manquants a la caption

    quand on clique sur minimiser le form se réduit etc...


    moi ce que je voudrais c'est savoir si il y a un moyen de détecter quel bouton de la caption a été cliquée


    une sorte de windowstate ou quelque chose dans le genre

    je demande ça car il se produit une erreur en vba

    quand je suis maximisé(plein écran) et que je minimise

    et que par la suite je clique sur le petit carré(mode fenêtre) le form se remaximise hors il devrait ce mettre en mode fenêtre

    merci d'avance
    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

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut patricktoulon et le forum
    Désolé, je ne parle pas ton langage codé, et je ne comprends pas ce que tu cherches.
    Regardes l'aide sur Application.Called qui te donne le nom de l'objet qui a lancé une macro.
    Si tu veux réellement de l'aide, évite de mélanger les appellations VBA et le français : Caption correspond à la propriété "Légende", et ton laïus devient incompréhensible (au moins pour moi).
    A+

  3. #3
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    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 374
    Billets dans le blog
    8
    Par défaut re
    bonjour gorfael


    difficile d'être plus clair
    en gros
    au départ je maximise le userform (plein écran)
    ensuite pour avoir d'autre applications a vue je minimise le userform (barre des taches)

    quand mon userform est minimiser tout prêt de la bar de tache
    les boutons agrandir et maximiser font la même chose c'est a dire ils maximisent tout les deux

    c'est pour ça que je veux intercepter cet action pour la corriger par macro
    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

  4. #4
    Inactif  
    Profil pro
    Inscrit en
    Février 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 517
    Par défaut
    salut

    difficile de te répondre valablement sans voir tout ton code.
    je me rappelle avoir traité un problème semblable (pour un fred...?, si ma mémoire ne me trahit pas). Je crois me rappeler qu'il convient de mémoriser dans une structure RECT tout ce qui correspond à la fenêtre "normale", de sorte à pouvoir la restituer.
    Mais sans tout ton code ... !...
    Une indication, de mémoire : la "restitution", si non "gérée", est celle de la dernière position et des dernières dimensions (si tu utilises les fonctions que je pense que tu utilises, toutefois !)

  5. #5
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    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 374
    Billets dans le blog
    8
    Par défaut re
    bonjour babaothe


    en fait après recherche sur d'autre sites un peu partout je ne suis pas le premier a avoir trouvé cet anomalie

    tout d'abords le code est simple

    pour les deux boutons manquants:
    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
     
    Public Declare Function FindWindow Lib "User32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
     
    Public Declare Function SetWindowLong Lib "User32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    Public Declare Function GetWindowLong Lib "User32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
     Public Const GWL_STYLE As Long = (-16)         'The offset of a window's style
     
    Public iStyle As Long As Long
    Public hWnd As Long
    public maform as object
    Sub caption_complete()
        hWnd = FindWindow(vbNullString, maform.Caption) 'le handle de la form
          iStyle = GetWindowLong(hWnd, GWL_STYLE) Or &H70000     'trouve le style du system menu et on ajoute les bouton mimimise et maximise
        SetWindowLong hWnd, GWL_STYLE, iStyle       'applique le nouveau style
     
    End Sub
    et dans le module userform
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub UserForm_Activate()
    set ma form =me
     caption_complete
    je n'ai mis que l'essentiel du code et il fonctionne très bien

    le seul inconvénient c'est le problème que j'ai cité au début

    il semblerait qu'il n y ait pas de solution

    j'en ai bien trouver une mais elle ne me plais pas
    c'est remplacer les boutons de la caption par des command buttons dans le form mais c'est plutot boff
    avec l'utilisation de showWindow de l'api user 32

    mais j'avoue que mettre des boutons dans la captions pour ne pas s'en servir sa me gène


    merci a toi

    au plaisir
    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

  6. #6
    Inactif  
    Profil pro
    Inscrit en
    Février 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 517
    Par défaut
    re

    la fenêtre réagit chez moi normalement (comme les autres fenêtre Windows)

    Cette méthode reste toutefois assez instable : Excel doit chez moi fermer (avec message) au bout d'un certain nombre d'essais !

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2010
    Messages
    345
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 345
    Par défaut
    Bonjour,

    A mon avis, tu te trompe sur le comportement des boutons.
    Regarde dans vbe avec les fenêtres de code.
    Les 3 boutons permettent :
    le premier pour restaurer dans l'état initial (donc dans ton cas maximiser)
    le second pour maximiser
    le troisième pour fermer
    Ce que tu cherche à faire est différent.
    Tu dois faire un Hook sur le UserForm puis intercepter les messages.
    Il suffit !!! de chercher le message qui est envoyé lorsque tu clique sur restore
    Bon courage et n'oublie pas de nous en faire part.

    ctac

  8. #8
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    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 374
    Billets dans le blog
    8
    Par défaut re
    bonjour a tout les deux

    oui je viens de l'apprendre les boutons n'avaient pas exactement les fonctions que je croyais maintenant pour l'interception du message
    il va falloir que je bûche un peu dessus et je n'ai aucune idée de comment commencer


    merci a tout les deux

    au plaisir
    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

Discussions similaires

  1. Réponses: 0
    Dernier message: 31/10/2008, 10h53
  2. Réponses: 2
    Dernier message: 27/09/2008, 12h41
  3. Réponses: 4
    Dernier message: 27/09/2008, 12h07
  4. inserer un bouton dans une jtable qui marche
    Par christianf dans le forum Composants
    Réponses: 1
    Dernier message: 27/09/2007, 01h07
  5. Ajouter un bouton dans la caption bar???
    Par benahpets dans le forum MFC
    Réponses: 4
    Dernier message: 24/06/2005, 13h18

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