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 :

cherche explication sur declaration [Toutes versions]


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 cherche explication sur declaration
    bonjour a tous


    j'ai l'habitude de me servir d'une variable object que je déclare en public dans un module pour déterminer l' userform
    ensuite dans le activate je met "set maform=me"


    parti de la je fait tout ce que je veux avec cette variable

    exemple:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    handle = FindWindowA(vbNullString, maform.Caption) 'détermine le handle de la form
    mais j'ai trouvé ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    handle = FindWindowA("Thunder" & IIf(Application.Version Like "0*", "0", "D")& "Frame", UF.Caption)
    qui fonctionne aussi mais je voudrais comprendre la formule


    quelqu'un pourrais me traduire en français ce que ça veut dire


    merci

    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

  2. #2
    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
    dans la déclaration :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    le paramètre lpClassName, si spécifié, spécifie un nom de classe (de fenêtre)
    Je comprendrais volontiers ce que serait la classe ThunderFrame, mais ne suis pas trop sûr de ce que serait ThunderDFrame (bien que je devine qu'il représente la classe d'un UserDForm). Je ne vois par contre pas ce que pourrait être la classe Thunder0frame
    Serait-ce en raison d'une représentation (en chaîne) différente selon la version de Office ? C'est là la seule explication plausible.

    EDIT : et si tu nous exposais ta préoccupation ?
    Serait-elle simplement d'éviter de risquer d'extraire le handle d'une frenêtre autre qu'un UserForm et qui serait malencontreusement à la fois ouverte et affublée du même titre que celui de ton UserForm ?

  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 babaothe

    Merci pour ta réponse
    Ce qui m'intéresse c'est simplement de comprendre et effectivement j'ai eu le même raisonnement que toi.

    Et c'est le (0*)et "0" qui me pose problème dans la compréhension de la macro.
    Sinon oui je ne vois que cette explication pour la frame cela dit je n'en suis pas sûr.
    En tout cas çà fonctionne très bien.
    Moi je veux juste comprendre c'est tout.

    Merci à toi
    N'hésite pas a donner l'info si tu trouve autre chose sur ce sujet.

    Je vais chercher moi aussi de mon coté.

    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

  4. #4
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Chaque fenêtre Windows a une nom de classe associé.
    ThunderDFrame est le nom de la classe des userform, pour les versions Excel 2000 et + et ThunderXFrame pour XL97

  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 mercatog
    et merci la je comprend mieux

    donc si je voudrais encore réduire le code je pourrais garder que le "d" (office 2007)

    une dernière question a ce sujet j'utilise habituellement une variable object

    pour identifier le usf

    la quelle méthode et la plus valable selon toi??



    merci a tout les deux je m'endormirais moins bete ce soir

    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
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Dans tous les cas, tu dois définir la caption de ton usf en 2ème paramètre

    si tu mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    handle = FindWindow(vbNullString, "blabla")
    Tu récupère le handle de la fenêtre ayant comme caption (nom) blabla
    par contre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    handle = FindWindow("ThunderDFrame", "blabla")
    Tu récupère le handle de l'userform ayant comme caption (nom) blabla

  7. #7
    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 mercatog


    oui j'ai compris
    en fait le userform est désigné par l'appel a cette macro
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub UserForm_Initialize()
    les_tois_boutons  Me  
     'le me va désigné le userform qui va être repris entre parenthèses dans la macro si j'ai bien compris
    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
     
    Option Explicit
    Public Declare Function GWL Lib "User32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
    Public Declare Function SWL Lib "User32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    Public Declare Function FWA Lib "User32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Public Declare Function show Lib "User32" Alias "ShowWindow" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long
     
    Public handle As Long
     
     
     
    Sub les_tois_boutons(UF As UserForm)    'uf=me 
           handle = FWA("Thunder" & IIf(Application.Version Like "0*", "0", "D") _
        & "Frame", UF.Caption)
        SWL handle, -16, GWL(handle, -16) or &H70000 'j'ajoute les deux boutons manquants et l'élasticité
     
    show handle, 3'  (maximiser)
    End Sub

    donc résultat des courses même si je ne déclare pas de variables object finalement elle est déclarée comme ça

    et que signifie le "IIf" je connais pas du tout cette expression


    maintenant la quelle des deux solution est la plus stable ??


    merci en tout cas pour tes explications et du temps que tu passe a revoir un sujet qui a certainement été traité plus d'une fois


    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

  8. #8
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Bonjour

    1. Le IIf(machin, sivrai, sifaux) est identique à la fonction Si d'excel

    2. Si tu essayes ceci (pour la compréhension)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Option Explicit
    Public Declare Function GWL Lib "User32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
    Public Declare Function SWL Lib "User32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    Public Declare Function FWA Lib "User32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Public Declare Function show Lib "User32" Alias "ShowWindow" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long
     
    Public handle As Long
    '-------------------------------------------
    Sub les_tois_boutons()
    handle = FWA("ThunderDFrame", vbNullString)
    SWL handle, -16, GWL(handle, -16) Or &H70000     'j'ajoute les deux boutons manquants et l'élasticité
    show handle, 3    '  (maximiser)
    End Sub
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub UserForm_Activate()
    les_tois_boutons
    End Sub

  9. #9
    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
    re mercatog


    je te remercie pour ces explications

    et voila que maintenant on ne désigne même plus le userform
    décidément

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    handle = FWA("ThunderDFrame", vbNullString)
    donc finalement ca reviens a utiliser finalement un autre api de la user32

    le getactivewindow

    si on utilise le "ThunderDFrame"on peut l'utiliser qu'a partir de excel 2007

    donc resultat des course si on utilise le "thunder"pour l'appliquer sur toute les versions d'excel il faut utiliser le "iif application.like,blabla"pour avoir la bonne classe de userform

    je vais dormir moins bête ce soir
    je te remercie

    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

  10. #10
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    si on utilise le "ThunderDFrame"on peut l'utiliser qu'a partir de excel 2007
    à partir d'Excel 2000
    pour excel 97 "ThunderXFrame"
    moralité:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    handle1 = FindWindow("ThunderDFrame", vbNullString) 'L'userform "actif"
    handle2 = FindWindow(vbNullString, "blablabla") 'La fenêtre ayant pour "nom" blablabla
    handle3 = FindWindow("ThunderDFrame", "blablabla") 'L'userform ayant le nom blablabl
    handle4 = FindWindow(vbNullString, vbNullString) 'La fenêtre "active"
    ça dépend de la situation, le vbnullstring à mettre avec précaution
    pour la sécurité, utiliser le handle3

  11. #11
    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
    re

    alors la c'est on ne peut plus clair

    je te remercie pour ces explications

    et juste en passant ca ca marche aussi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    Public Declare Function GAW Lib "user32" Alias "GetActiveWindow" () As Long
     
     
    sub trucmachin
     
     
    handle=gaw
    ' le reste de la macro
    end sub

    merci encore a toi


    et je met un resolu


    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

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

Discussions similaires

  1. Débutant cherche explications sur Tkinter
    Par Khar14 dans le forum Général Python
    Réponses: 3
    Dernier message: 23/09/2014, 13h37
  2. Cherche une petite explication sur le mvc
    Par keviin55 dans le forum Modélisation
    Réponses: 5
    Dernier message: 02/06/2011, 00h57
  3. Cherche explication sur la fonction filler
    Par apt dans le forum Langage
    Réponses: 6
    Dernier message: 02/05/2011, 14h52
  4. cherche explication sur du code
    Par abdoulzak dans le forum Langage
    Réponses: 1
    Dernier message: 06/07/2006, 11h23
  5. recherches des cours ou des explications sur les algorithmes
    Par Marcus2211 dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 19/05/2002, 23h18

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