XL 2016 VBA - Tester si le Menu Système est présent dans un UserForm

Dudu2

XLDnaute Barbatruc
Bonjour,

J'arrive à ajouter le Menu Système à un UserForm par contre je suis incapable de déterminer a postériori si ce Menu Système est présent ou pas.
Je ne sais pas comment traiter le iStyle pour retourner un booléen.
Voir le fichier joint (modifié à 22h30 car initialement bugué)
 

Pièces jointes

  • Test System Menu Present.xlsm
    30.9 KB · Affichages: 3
Dernière édition:
Solution
Merci pour ta participation à cette discussion d'un problème mal posé !
Comme quoi, des certitudes non basées sur des vérifications peuvent conduire à faire n'importe quoi et perdre des heures de recherche.

Dudu2

XLDnaute Barbatruc
En Office 2016 64 bits:
1718442837988.png
 

Dranreb

XLDnaute Barbatruc
Moi VBA7 mais en 32bits.
c'est les api qui on besoin de doubler
Non, ça c'est une légende urbaine du monde des programmeurs qui n'ont jamais pratiqué aucun langage assembleur et qui ne comprennent jamais rien à rien en profondeur.
Le LongPtr assumé LongLong pour Win64 n'est réellement requis que pour contenir des adresses, et ce partout dans du code, pas seulement pour les api.
À la rigueur ça s'étend peut être à deux autres choses :
1) — Les handle renvoyés par Windows pointant sur des zone de mémoire allouées dynamiquement, qui pourraient aussi être en nombre supérieur à ce qui peut tenir sur 32 bits, auquel cas il en faudrait plus pour pouvoir les distinguer.
(mais de toute façon à mon avis pas les handle de fenêtres ni d'applications)
2) — Le 3ième paramètre de l'api MoveMemory qui serait en principe capable de déplacer une portion de mémoire de taille dépassant aussi cette limite.
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
on ne c'est pas compris mon bon amis
typename te donnera toujours long avec une valeur numérique sans décimale que ce soit une addresse memoire(longlong,longptr) ou quoi que ce soit d'autre

msgbox typename(application.hwnd) te donnera un long (même en 64 bits)'exemple Handle
msgbox typename(getdc(0)) te donnera un long (même en 64 bits)'exemple contexte hdc

donc ton test n'a tout simplement pas de sens dans le contexte de cette discussion
 

Dranreb

XLDnaute Barbatruc
@patricktoulon, non. Essaie MsgBox TypeName(X), X étant déclarée As LongLong, si ce type de donnée existe dans ton VBA, tu verra bien.
MsgBox TypeName(Application.Hwnd) affiche "Long" parce que c'est un Long, codé sur 32 bits, c'est tout. Autre source de vérification possible: l'explorateur d'objet, bibliothèque Excel, classe Application, membre Hwnd donne chez moi Property Hwnd As Long, lecture seule, Membre de Excel.Application.
Remarque: LongPtr n'est pas un vrai type de donnée. Une variable déclarée As LongPtr sera en réalité de type Long sur 32bits et LongLong sur 64bits.
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
@patricktoulon, non. Essaie MsgBox TypeName(X), X étant déclarée As LongLong, si ce type de donnée existe dans ton VBA, tu verra bien.
MsgBox TypeName(Application.Hwnd) affiche "Long" parce que c'est un Long, codé sur 32 bits, c'est tout. Autre source de vérification possible: l'explorateur d'objet, bibliothèque Excel, classe Application, membre Hwnd donne chez moi Property Hwnd As Long, lecture seule, Membre de Excel.Application.
Remarque: LongPtr n'est pas un vrai type de donnée. Une variable déclarée As LongPtr sera en réalité de type Long sur 32bits et LongLong sur 64bits.
oui a partir du moment ou tu variabilise le typename te renverra le type que tu lui a donné
mais là en l’occurrence msgbox typename (application.hwnd) renvoie bien un long en 32 et 64 bits
je précise que j'ai testé sur 2013 32 et 2016 64
 

Dranreb

XLDnaute Barbatruc
Merci de cette confirmation.
Et dans l'explorateur d'objet quel est le statut de la propriété Hwnd de l'objet Application (variabilisé (?) comme dit patricktoulon par la bibliothèque Excel) ?

Conclusion : Un handle d'application tient sur 32 bits. C'est normal: ce n'est jamais qu'un indice dans une table d'adresses détenue et gérée par Windows au gré des allocations dynamiques demandées.
Il y en a toujours largement moins de 2 147 483 647 pour les fenêtres et applications en cours.
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 964
Messages
2 094 010
Membres
105 912
dernier inscrit
willou3869