Task Pane Project R-W v2.0   (le volet docké a droite de la feuille Excel)(Macro complementaire)

Task Pane Project R-W v2.0 (le volet docké a droite de la feuille Excel)(Macro complementaire) 2.1.2

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

oui mais ca prive les utilisateur du menu fichier word je peux te refaire une version comme ca si tu veux
et ce n'est pas un trou dans le userform mais dans word
engros je decoupe la partie du haut de la barre de titre jusqu'en bas du bouton fichier du coup on vois le fond du userform derrière
mais comme je viens de le dire la seule solution pour enregistrer des eventuel modif apres c'est de clicker sur la crois pour declancher le dialog d'enregistrement sauf que si je positionne a -40 *windowszoom tu n'a plus la croix
ou alors je coupe mais je masque pas la barre de titre
tu veux une version comme ça ?
 
alors je viens d'apprendre avec copilot justement la duperie des fenêtre word
en fait ma petite fenêtre y est bien transparente de type "button" mais word refuse de redessiner sur son ribbon cette fenêtre du coup je me demandais pourquoi je ne la voyais pas dans la liste de word pourquoi je la voyais pas quand je la mettais non transparente
et bien la raison c'est ça la seul fenêtre qu'il accepte de redessiner c'est une fenêtre de type "static" qui ne gère aucun message window
voila pourquoi ca marchait mais on voyait rien ni dans la liste ni en visuel

alors on a le choix
soit on masque avec une fenêtre de type button ce qui fait meme si on la vois pas le click sur le bouton fichier de word ne provoque pas le crash excel

soit on cache avec une fentre static mais on a plus le bouton

soit on découpe cette portion en haut a gauche de la fenêtre du coup on vois biens le userform derriere sur cette partie tout du moisns
demo

demo4.gif

on vois bien les première lettre du label dans le userform c'est vraiment un decoupage
 
oui c'est lui qui est a l'origine de la demande sur le forum mais ici on est dans ma ressource pas dans son topic
tu me dis que tu a un soucis avec cette source avec les positions ,je te donne une autre solution
et je peux même les combiner toute les 3 en une si je voulais
et de toute facon @Dudu2 a clairement exprimé le fait qu'il ne désirais pas utiliser le volet xml
et qu'il préférais son moulin tournant en arrière plan car il n'a pas la main mise sur la fenêtre dockée donc pas d'events exploitable
donc sa méthode n'a rien avoir avec la mienne

donc du coup heu.... je vois pas trop ce que @Dudu2 pourrait dire sur ces points puisqu'il ne les utilise pas
le seul qui aurait quelque chose a dire c'est l'utilisateur qui décide d'employer ma méthode en l'occurrence toi pour l'instant

donc soit tu veux soit tu veux pas y a pas de soucis pour moi ( je propose ,tu dispose )
 
Salut patricktoulon,
avec ton système de découpe de la fenêtre word par région du post #249 de la discussion à dudu2, on arrive à cacher l'onglet Fichier et à laisser apparent la croix pour fermer de l'appli Word :
DecoupeWord.gif

VB:
        'Crée la région entiere de la fenêtre
        hRgnGlobal = CreateRectRgn(0, 0, large - 10, Haut + 30 * WindowsZoom)
        'Crée la région entiere de la barre de titre moins le bouton fermer
        hRgnCaption = CreateRectRgn(0, 0, large - 50 * WindowsZoom, 50 * WindowsZoom)
        'on retire la région de la barre de titre  à la région globale(methode RGN_DIFF pour exclure)
        CombineRgn hRgnGlobal, hRgnGlobal, hRgnCaption, RGN_DIFF
      
        'Crée la région du bouton à masquer
        hRgnBouton = CreateRectRgn(0, 0, 60 * WindowsZoom, 98)
        'on retire la région du bouton à la région globale(methode RGN_DIFF pour exclure)
        CombineRgn hRgnGlobal, hRgnGlobal, hRgnBouton, RGN_DIFF
  
        'Applique LE DECOUPAGE DE la région à la fenêtre WORD
         SetWindowRgn hword, hRgnGlobal, True

Et pour l' ajustement des offsets , il faudrait travailler avec UIAUtomation car
1 - On a la dimension de plus d'objets que par API Windows (par exemple le ruban inférieur quand il est déplié)
2 - Les dimensions renvoyées par UIAutomation tiennent compte du facteur d'échelle (plus besoin de Ppx WindowsZoom)
Attention il faut récupérer les dimensions avant les SetParent car après les objets ne sont plus accessibles.

Ci cela t'intéresse j"ai un module de classe réalisé avec l'aide de ChatGpt qui permet de simplifier grandement l'utilisation de UIAutomation (doc simplifiée en pièce jointe). Exemple d'utilisation :
VB:
     Set ExcelWin = cls.GetElemFromHandle(Application.hwnd)
     Set BosaWin = ExcelWin.GetUIElem("bosa_sdm_XL9")
     Hdock = GetParent(GetParent(BosaWin.hwnd))
     Haut = BosaWin.Height
     large = ExcelWin.Width / 2 ' GetSystemMetrics(0) / 2
    ' ...
    ' Ici tu utilises ta fonction GetWinHandle
    hword = GetWinHandle("OpusApp", N, 10)
    Set AppliWord = cls.GetElemFromHandle(hword)
    Set RubanWin = AppliWord.GetUIElem("Ribbon", "firstD", "Name")
    Set RubanInf = RubanWin.GetUIElem("Ruban inférieur", "firstD", "Name")

Si RubanInf n'est pas trouvé , c'est qu'il est pas déplié.

Nullosse
 

Pièces jointes

Dernière édition:
oui tu découpe un peu plus la barre
tu fait deux decoupe comme dans mon exemple précedant dans la discussion de @Dudu2
perso j'estime que découper seulement le bouton est amplement suffisant surtout que ca me permet de garder le undo/redo
et!! la croix pour fermer word

je vais regarder ton cls uiauto

moi aussi j'ai une methode uiauto mais je trouvais que ça faisait encore un module en plus et je pense qu'il y en a assez

d'autre part je suis en train de finaliser l'autre moteur de docking sans le volet xml mais qui lui ressemble trait pour trait
a savoir un vrai slider et pas un resize
le principe repose sur le userform qui sert de host et monitoreur
les fenêtre subbissent VRAIMENT UN CLIPING pour atténuer le freekling et liasing ,etc...
la fenêtre docké est vraiment slidé et non redimensionner a l'userform
j'ai trouvé aussi le moyen de shunter le rebond quand on arrive a la moitié ca sursaute plus
mais bref ça se passe dans la discussion pas ici
 
ou est le module de fonction ou son code
oui c'est un module de classe , les fonctions sont à l'intérieur disponibles pour chaque instance. Si on veut appeler une fonction sans passer par une instance on créer une nouvelle instance vide avec un New .
Exemple (cls est l'instance vide) .
VB:
    Dim cls As New cUIAElemInfo, ExcelWin As cUIAElemInfo, AppliWord As cUIAElemInfo, UsfWin As cUIAElemInfo
    Dim BosaWin As cUIAElemInfo, RubanWin As cUIAElemInfo, RubanInf As cUIAElemInfo, BtnFermer As cUIAElemInfo
    Dim UsfTitle As cUIAElemInfo, OngletFichier As cUIAElemInfo, bordureX As Long, bordureY As Long, htRuban As Long
     Set ExcelWin = cls.GetElemFromHandle(Application.hwnd)
     Set BtnFermer = ExcelWin.GetUIElem("Fermer", "firstD", "Name")
     Set BosaWin = ExcelWin.GetUIElem("bosa_sdm_XL9")
     Hdock = GetParent(GetParent(BosaWin.hwnd))
     Haut = BosaWin.Height
     large = ExcelWin.Width / 2 ' GetSystemMetrics(0) / 2
     ' ========================================
     HForm = GetActiveWindow
    Set UsfWin = cls.GetElemFromHandle(HForm)
    Set UsfTitle = UsfWin.GetUIElem("TitleBar", "FirstC", "controltype)
    '  ========================================
        hword = GetWinHandle("OpusApp", N, 10)
    Set AppliWord = cls.GetElemFromHandle(hword)
    Set RubanWin = AppliWord.GetUIElem("Ribbon", "firstD", "Name")
    Set OngletFichier = RubanWin.GetUIElem("Onglet Fichier", "firstD", "Name")
    Set RubanInf = RubanWin.GetUIElem("Ruban inférieur", "firstD", "Name")
    If RubanInf Is Nothing Then
       htRuban = RubanWin.Height
    Else
       htRuban = RubanWin.Height - RubanInf.Height
    End If
 
Dernière édition:
Salut,
bon moi j'arrête sur cette solution avec le volet et un userform dedans car il y a au moins deux cas très dangereux :
1 - Si tu as un document word chargé ou tout autre document et que tu cliques dans Excel sur l'onglet Fichier et que tu reviens : Il n'y a plus de userform ni application dans le volet XML Source seulement ce qu'il y avait à l'origne .
2 - Si tu as un document word chargé et que tu tapes ALT+F dans la fenêtre word : Cela fait planter Word (équivalent à cliquer sur l'onglet Fichier).
A noter que si on a LibreOffice installé sur sa machine, si on ouvre les documents Word avec dans le volet et le userform , il n'y a pas le deuxième problème car la fenêtre LibreOffice est "classique".
Nullosse
 
perso pour découper je prends 56*windowszoom qui est en fait les data de getsystemmetrics

32 22 et 2
32 largeur de barre de titre en pixel
22 largeur de bouton en pixel
2 le thickframe en pixel
et ca c'est valable pour tout le monde plus la marge de DWM qui doit pas représenter grand chose
et du coup j'ai même donner la couleur de fond de word au userform du coup le trou est de la même couleur et j'ai decalé de 1 en top et left pour laisser la bordure de la fenêtre word

demo4.gif


ps :j'ai toujours pas ton module classe pour tester
 
ps :j'ai toujours pas ton module classe pour tester
salut patricktoulon,
cela ne servira à rien , regarde mon message #25 en particulier le ALT+F de la mort qui réduit à néant le masquage. Et puis je suis pas sur qu'entre les versions d'EXCEL, les versions de windows (10 ou 11) on arrive à tout ajuster de façon sûre. Quoiqu'on en dise la solution de dudu2 qui n'utilise pas de conteneur semble plus sûre et son monitoring n'est pas gourmand en temps CPU.
 
Salut,
bon moi j'arrête sur cette solution avec le volet et un userform dedans car il y a au moins deux cas très dangereux :
1 - Si tu as un document word chargé ou tout autre document et que tu cliques dans Excel sur l'onglet Fichier et que tu reviens : Il n'y a plus de userform ni application dans le volet XML Source seulement ce qu'il y avait à l'origne .
2 - Si tu as un document word chargé et que tu tapes ALT+F dans la fenêtre word : Cela fait planter Word (équivalent à cliquer sur l'onglet Fichier).
A noter que si on a LibreOffice installé sur sa machine, si on ouvre les documents Word avec dans le volet et le userform , il n'y a pas le deuxième problème car la fenêtre LibreOffice est "classique".
Nullosse
ben a la base j'avais enlevé la caption seul le bouton fermer du ruban était dispo
Vous avez voulu la caption de word ok alors je vous substitue le bouton fichier par un bouton hack qui va faire la même chose sans provoquer de crash ou au pire je vous decoupe le bouton
après si tu l’enlève en découpant je vois pas trop comment tu peux cliquer sur fichier de word
et la croix fermer et interceptée avec un cancel dans l'event de substitution du close du classeur dans la classe userform
alors je ne sais pas ce que tu a fait comme modif mais normalement la découpe ou la substitution t’empêche d'avoir ce problème

et pour le bouton fichier d'excel
normalement tu ne devrais pas pouvoir cliquer sur "fichier" dans excel puisque lui est bloqué pendant l'affichage du volet
donc a mon avis tu a fait des modifs que tu ne maitrise plus
 
Dernière édition:
et pour le bouton fichier d'excel
normalement tu ne devrais pas pouvoir cliquer sur "fichier" dans excel puisque lui est bloqué pendant l'affichage du volet
donc a mon avis tu a fait des modifs que tu ne maitrise plus
ben non, j'ai pris ton classeur tel quel avec la version 2.1 . Cela se comporte comme dans le message #25 dans mon Excel 2021 sous Windows 11.
Et je vois pas où tu bloques l'onglet Fichier de l'Excel dans lequel on a ouvert le volet Xml Source. Et d'ailleurs ce serait un peut dangereux.
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Retour