XL 2016 VBA - Réduire la largeur de la grille Excel

  • Initiateur de la discussion Initiateur de la discussion Dudu2
  • Date de début Date de début

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 !

Dudu2

XLDnaute Barbatruc
Bonjour,

DataSnipper est un outil commercial ajoutant à Excel des fonctionnalités diverses.
Parmi ces fonctionnalités, la possibilité de visualiser des documents PDF directement dans Excel avec cette particularité (voir image ci-dessous) que la fenêtre Excel est divisée en 2 verticalement. La partie gauche contient la grille Excel, la partie droite contient probablement un Control ActiveX visualisateur PDF, je ne sais pas lequel ? Acrobat ? PDF-XChange Viewer ? Autre ?

La question est: comment est-il possible dans une fenêtre Excel de réduire la largeur de la grille Excel et ses ascenseurs comme le fait ce logiciel ?

1758617247578.png
 
Solution
La solution avec le XML Source Pane + UserForm a l'air complexe à mettre au point, sensible aux différentes configurations et sans doute cela ne vaut pas le coup de continuer. Toutefois si @patricktoulon donnait un fichier opérationnel je l'ajouterais dans la solution bien évidemment.

Pour ce qui me concerne, je suis satisfait de la solution sans volet qui jusque là n'a intéressé personne (ce que je comprends vu les essais en cours sur le volet) que je réplique ici comme solution.
La largeur de la fenêtre du document naturellement ajustable ajuste aussi la fenêtre XLDESK7 et un clic unique permet de basculer entre Excel et le document.
Même si elle n'est sans doute pas parfaite ni à l'épreuve des balles, chez moi ça fonctionne...
et pourquoi tu en ouvre plusieur????????????????????????
1 volet c'est déjà bien non?
chez moi monbouton fermer ferme toute les fen^tres qui sont étrangères a excel en tant normal
je fait simplment un sendmessage sur des classe
mis pour ca justement il faut pas prendre le raccou
je prend la liste a jour des composantes d'escel et si une des classe y est presente bye bye !

VB:
'=========================================================================================
Sub Fermeture_du_volet_Ouvert()
    Dim t, i&
    ActiveCell.Select
    
    Dim hwnd As LongPtr
    t = AllPartExcelWindowList 'liste des composantes prrésente dans excel
    For i = 2 To UBound(t)
        Select Case True
            Case CStr(t(i, 2)) = "Notepad": hwnd = CLngPtr(t(i, 1)): Exit For
            Case CStr(t(i, 2)) Like "Chrome*": hwnd = CLngPtr(t(i, 1)): Exit For
            Case CStr(t(i, 2)) = "ThunderDFrame": hwnd = CLngPtr(t(i, 1)): Exit For
            Case CStr(t(i, 2)) = "AcrobatSDIWindow": hwnd = CLngPtr(t(i, 1)): Exit For
            Case CStr(t(i, 2)) Like "Acrobat*": hwnd = CLngPtr(t(i, 1)): Exit For
            Case CStr(t(i, 2)) = "Notepad++": hwnd = CLngPtr(t(i, 1)): Exit For
            Case CStr(t(i, 2)) = "DSUI:PDFXCViewer": hwnd = CLngPtr(t(i, 1)): Exit For
             'on peut en ajouter autant qu'on veux    
        End Select
        
    Next
    If hwnd <> 0 Then Call SendMessage(hwnd, &H10, 0, 0)  '&H10=WM_Close
    Vx = False
    DoEvents
    splitViewRestaure
End Sub
 
Pour PDF XChange Viewer, le nom du fichier dans le GetWindowText() c'est aléaoire si je ferme par la croix système.
En principe, la 1ère fois, la 2ème fois peut-être et ensuite je ne l'ai plus et puis ça peut revenir.
Si je ferme par le bouton (Alt + F4), j'ai bien le nom du fichier qui vient dans le GetWindowText().

De toutes façons, j'ai prévu un "AlternateName" en plus du nom du fichier.
De sorte que pour PDF je passe le nom du fichier et "PDF-XChange Viewer" en AlternateName et je teste les 2.
Comme ça si c'est Acrobat c'est reconnu par le nom du fichier et si c'est PDF XChange Viewer quoiqu'il arrive il trouvera l'un ou l'autre.
 
et pourquoi tu en ouvre plusieur????????????????????????
Ce n'est pas moi qui les ouvre, c'est Word car j'avais fermé les précédents avec SendMessage WM_DESTROY et je suppose qu'il veut les restorer.
De toutes façons j'ai remplacé le SendMessage WM_DESTROY par un SendKeys Alt + F4, pas moins violent mais a priori mieux toléré.
Je n'ai aucun résultat en fermant les fenêtres par un WM_SYSCOMMAND + SC_CLOSE.
Je vais essayer ton WM_CLOSE.
 

Pièces jointes

re
@Dudu2
et si tu a 36 pdf_xchange viewer d'ouverts dont 1 dans la EXEL7(ou pas) tu fais quoi ?
c'est pas très logique tout ça
a mon avis ton destroy ne testroyasse pas tout a mon avis il y a des procc qui trainent orphelins de leur windows
je pige pas vraiment pourquoi tu te complique la vie
un sendmessage close et c'est tout
ca envoie le message de la croix de fermeture donc fenêtre fermée = instance du procc fermée
c'est pas compliqué
et comme je ne prends pas de raccourci à la dudu
j'ai toujours la fonction liste de composant a dispo
bouton fermer
--> liste de composante excel(qui comprend le volet que l'on vient d'y mettre)
---->boucle dans ma sub fermeture
------>si je trouve une des cases vrai j'ai tout à dispo
--------> je converti le numero du handle en clngPtr
-----------> sendmessage le handle trouvé ,WM_CLOSE
et je n'ai pas de soucis avec des eventuels restant caché ou orphelin ou quoi qu'est ce
 
Ah........................ je comprend mieux
Ce n'est pas moi qui les ouvre, c'est Word car j'avais fermé les précédents avec SendMessage WM_DESTROY et je suppose qu'il veut les restorer.
dans ce cas la tu dois faire quelque chose qui modif le doc et c'est pour ca qui te les restaure ,par ce que tu n'a pas enregistrer les modif c'est comme outlook il fait pareil
Attention a d'eventuels sendkeys ou autre
ou c'est tout simplement un effet de bord destroy
change pour WM_CLOSE qui est = à (&H10)

ou change de méthode du genre
set wordouille=createobject("Word.application")
wordouille..document.open
etc.... pour ouvrir ton word
comme ca tu a la main mise sur ton object application word 😉
 
Oui, c'est fait en Post 124. Je n'avais pas ce WM_CLOSE dans mes cartons c'est pour ça que je me suis égaré dans des WM_DESTROY ou SC_CLOSE.
Ça marche très bien, plus de multi-ouvertures.
Salut,
Dudu2 est-ce normal que dans le classeur du post 124 quand je fais TestWord, si je clique sur le menu Fichier du document Word ouvert, ça plante violemment Word ?
J'ai ce message là quand je retente un TestWord :
WordMessage.png

Nullosse
 
Dernière édition:
Bonjour @nullosse,
J'ai remarqué ça en effet, le menu Fichier de Word est inaccessible.
C'est le SetParent sur le XLDESK qui provoque cela. Les applications Office acceptent mal cette situation.
Si je l'inhibe cela fonctionne mais évidemment toute activation d'Excel masque le fichier affiché à droite.
Il y a peut-être un "workaround", il faudrait être créatif pour essayer des choses.
 
voici ce que dit l'I.A à propos de ce problème :

🎯 Objectif​


  • Ouvrir un document Word depuis Excel.
  • Utiliser l'API Windows pour intégrer la fenêtre Word dans la fenêtre Excel, plus précisément dans le conteneur xlDesk.



⚠️ Remarques importantes​


  • Cette méthode utilise des fonctions non documentées de l’API Windows.
  • Elle ne fonctionne correctement que dans les versions Excel à interface MDI (Multi-Document Interface), comme Excel 2010 ou antérieur.
  • Dans les versions plus récentes (Office 2013 et +), Excel utilise une interface SDI (chaque classeur a sa propre fenêtre), ce qui rend cette méthode instable ou inefficace.
 
Certes mais la dernière remarque MDI/SDI n'est pas liée à Word spécificquement, c'est ce que @patricktoulon avait déjà indiqué, raison pour laquelle il a cherché directement la fenêtre EXCEL7 pour la redimensionner. On arrive parfaitement à gérer des applications dans Excel en SDI sans que ça pose de problème.

Le problème, ce sont les applications Office avec la méthode du SetParent qui bousille leur contexte.
L'idée serait de ne faire le SetParent que quand c'est Excel la fenêtre sur laquelle on travaille et dès qu'on passe sur la fenêtre Word remettre le Parent d'origine. Ça ne peut se faire qu'avec un monitoring du curseur assez rapide, disons toutes les 250ms, ce qui nécessite un SetTimer. C'est ce que j'essaie de faire, mais pas simple.

Ou alors, solution drastique: ne pas proposer d'application Office dans ce système, ce qui me semble le plus simple.
 
Dernière édition:
Ou alors, solution drastique: ne pas proposer d'application Office dans ce système, ce qui me semble le plus simple.
Je viens d'essayer de remplacer word par LibreOffice Writer (Par défaut ouvrir les documents de type word par LibreOffice Writer). Cela marche beaucoup mieux et même la fermeture par la croix fonctionne. Le souci c'est que cela semble lent à intégrer la fenêtre Dans Excel.
 
En effet, la fermeture par la croix marche dans tous les cas, et y compris pour Word même si sa croix ferme tout le bidule (toujours à cause du SetParent) car j'ai intercepté le ThisWorkbook_BeforeClose() pour qu'Excel ne ferme pas en même temps. Mais c'est temporaire.

Ceci dit, je ne suis pas loin avec les changements de Parent de Word en monitorant seulement la Foreground Window en même temps que le monitoring de la fermeture. Mais c'est pas encore gagné, surtout que je me demande pourquoi on s'est lancé là-dedans ! Au départ c'était juste du PDF qui fonctionne nickel.
Le souci c'est que cela semble lent à intégrer la fenêtre Dans Excel
Ça doit être lié à LibreOffice car pour un PDF ou même un Word c'est rapide.
 
surtout que je me demande pourquoi on s'est lancé là-dedans ! Au départ c'était juste du PDF qui fonctionne nickel.
ben ouais, visualiser des PDF dans un classeur Excel cela arrive quand il y a une colonne de liens vers des documents PDF. Mais ouvrir un document word cela me semble un peu superflu , autant l'ouvrir en entier, et pour un autre document excel , c'est quoi l'intérêt ? autant l'ouvrir par le menu fichier du Excel dans lequel on est.
Ne pas oublier que dans windows 11 par exemple on a un système de bureaux où l'on peut mettre deux documents dans deux bureaux différents et naviguer facilement entre les 2 bureaux :
Bureaux.png


Pour naviguer entre les bureaux : touches: Windows+Ctrl+Flèche(gauche ou droite)
 
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

Discussions similaires

Réponses
9
Affichages
951
Réponses
0
Affichages
2 K
Retour