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...
A titre d'exercice voilà une version qui gère le changement de Parent de Word mais uniquement sur Clic (pas de monitoring du curseur).
Par défaut à l'ouverture Word est autonome. On peut cliquer dans le menu fichier.
Donc si tu es passé dans Excel avec un clic dans Excel (Word est alors devenu un Child d'Excel pour rester affiché dans la partie droite), tu dois d'abord cliquer dans Word (pour le rendre à nouveau autonome) avant de cliquer dans le menu Fichier.

Idéalement, le retour en Word autonome devrait se faire par survol du curseur sur sa fenêtre, c'est faisable mais je ne vais pas aller jusque là car tu as raison, Word n'as pas tellement à faire dans ce système et je vais en virer l'option, du moins dans mon code.
 

Pièces jointes

Bonjour pour word
essayez donc voir un setclassname histoire de le sortir du contexte
en gros changer la classe de word pour celle que vous voulez "toto" par exemple


pour ma part j'ai reduit le truc parce que faire pour les uns et les autres ca devient hard
j'ai donc un insérer pdf par defaut qui va detecter tout seul l'applicatif qui est associée
si c'est edge comme chez moi en temps normal je passe par shel cmd sinon par shellexecute

notepad et notepadplus c'est ok
je vais m'attaquer a word
j'ai ajouter aussi pour que vous compreniez bien les divers problèmes rencontrés
en effet certain logiciels installés ne s'installe pas toujours correctement même si au premier abord il a l'air de très bien fonctionner
j'ai donc par curiosité ajouter un bouton liste des apps enregistrer dans window
ca vous permet de voir si votre lecteur pdf par exemple est bien enregistré dans l'environnement windows
c'est tres important car même si le shellexecute fonctionne avec vortre pdf et l'application que vous utiliser certains paramètres seront omis

donc y a plus de boulot que prevu
y a dejà des heures de boulot là
en tout cas pour l'instant pdf nickel edge ou par défaut les fichier text vsv etc.. notepad ou notepad+ nickel
la mécanique du splitview beaucoup plus fluide
le docking plus rapide et moins tintillant
j'ai fait ca sans ruban pour l'instant
des que la ressource sera validé je vous mettrait en tant que partenaire dans la ressource on pourra chacun apporter des ameliorations

une chose est sur (et j'ai testé) c'est que pour spliter et ou docké il faut prendre le pou de excel c'est a dire reprendre la liste des handle a jours ainsi que les positions et dimensions
allez je m'attaque a word et je reviens
perso je vais privilégier le createobject("word.application") le shell c'est bien beau mais il faut galopper pour les handle et tout
 
bon ben j'avais raison je m'en doudais un peu
pour word
si on l'ouvre avec shell ou autre
et que l'on ferme avec sendmessage
ça ferme bien mais il reste des childs qui sont identiques a celles d'excel

du coup je fait l'ouverture avec createobject et quand je sendmessage sur la outpus je fait un quit d'abords
il me reste moins de child dans la liste des composantes présentes dans excel

bon ben du coup je suis bon pour word
j'ai ajouté le resize


demo3.gif
 
Bonsoir @patricktoulon,
Je ne vois pas en quoi lancer Word avec un createobject("word.application") va changer quelque chose au problème de l'accès au menu Fichier de Word quand il est Child d'Excel. Je demande à voir...

En retestant la version du Post #137, je me suis aperçu que ce que j'ai écrit n'est pas vrai.
Donc si tu es passé dans Excel avec un clic dans Excel (Word est alors devenu un Child d'Excel pour rester affiché dans la partie droite), tu dois d'abord cliquer dans Word (pour le rendre à nouveau autonome) avant de cliquer dans le menu Fichier.
En fait, même si tu es dans Excel (Word est alors Child d'Excel), tu peux cliquer directement sur le menu Fichier de Word car cela a seulement pour effet de ré-activer la fenêtre Word et donc de rendre Word autonome (Child du Desktop). Et ce n'est que lors d'un 2ème clic que le menu Fichier de Word va s'afficher. Pareil pour la partie haute de la fenêtre Word et tous les onglets. C'est magique !
 
Du coup je peux garder Word dans les options d'intégration et même supprimer le code d'exception dans le ThisWorkbook pour être totalement indépendant sur les fonctions. Et comme la croix système est utilisable dans tous les cas, plus besoin de bouton pour fermer un document.

Le seul truc que je n'arrive pas encore à faire c'est lorsque le SetTimer tourne, identifier qu'il y a un dialogue en cours à l'écran pour le laisser tourner.
 

Pièces jointes

je sais pas ce que tu fait mais perso
j'ai un bouton sur la feuille (ou le ruban) qui ferme la fenêtre je me sert pas des croix dans les captions
donc du coup la surveillance ou le problème de fermeture excel si on ferme word ne fait plus partie de l'equation
et j’évite de faire encore tourner des trucs en arrière plan par la même occasion

et surtout par ce qu'a terme les fenêtre sont postit(pas de caption)
soit par setwindowlong pour les fenêtre l'autorisant et setwindowRgn pour edge word,acces,FF


je vais quand même essayer ton truc mais déjà c'est sur une procc en addressof c'est mort pour moi
 
bon j'ai testé le #141
word se dock
mais des que je suis pas sur la fenêtre j'ai le curseur qui clignote avec un rytme hératique
pas de resize ?
des que tu bouge la fenêtre c'est fini le splitview
demo3.gif

pour moi la seule solution propre c'est le bouton qui ferme les fenêtre étrangères à excel en temps normal
et j'ai le resize
demo3.gif
 
Non je n'ai pas de resize car dans ces conditions de split je suppose qu'on travaille plein écran.
Et le Resize il faut le choper dans les évènements et ça fait du code extérieur à prévoir.

La boucle pour la fermeture sert aussi à gérer les basculements de Word à Excel qui permet donc de changer le Parent de Word indispensable pour éviter un plantage en clic sur menu Fichier et message à suivre en ouverture de Word.

J'ai noté que Notepad++ n'a pas le bon nom de fichier s'il est ouvert avec déjà un fichier dedans en onglet 1. Donc même combat que PDF Xcange Viewer.
Autre étrangeté, le SetParent ne fonctionne pas pour l'application Photo. Tanpis. Je m'arrête là.
 

Pièces jointes

Salut,
Dudu2 le classeur de ton post précédent ne fonctionne pas chez moi. Les fenêtres que l'on ouvre ne sont pas identifiées :
IdentFen.png

En pièce jointe un classeur qui utilise une autre technique pour identifier les fenêtres que l'on ouvre. Cela semble OK aussi pour l'appli Photo. Si ce n'est déjà fait l faut cocher dans les références UIAutomationclient.
Nullosse
 

Pièces jointes

Bonjour @nullosse,
Dudu2 le classeur de ton post précédent ne fonctionne pas chez moi. Les fenêtres que l'on ouvre ne sont pas identifiées :
Bizarre ! J'ai vérifié le fichier du Post #144 et chez moi ça roule sans problème.
Ça doit pas être grand chose, mais je peux pas debugger la fonction Private Sub GetWindowHandle() sur ton environnement en mettant des traces avec la fonction TraceOnSheet() a moins de te passer un fichier avec des traces en place.

Avec ton fichier j'ai des soucis à la fermeture du document. C'est long, ça mouline longtemps avant d'afficher Timeout.
C'est lorsque l'affichage se fait sans le cadre bleu (sauf pour Word) qui montre que la fenêtre est Child d'Excel bien que ce soit correctement positionné.
Parfois Permission refusée sur If InStr(1, oUIAelem.CurrentName, miniFilename) > 0 Then 'si on retrouve une partie du nom du fichier ouvert.
Parfois ça tombe en marche mais je n'ai pas identifié les conditions.
Sur le dialogue de choix d'application lors de l'ouverture d'un .xml qui m'est proposé à chaque fois (ton fichier ou le mien) (je ne comprends pas pourquoi car je coche "Toujours utiliser cette application...") je pars en timeout. Dans mon fichier j'avais testé la fenêtre de classe "Shell_Flyout" pour ne pas décompter son temps.
 
Dernière édition:
Parfois Permission refusée sur If InStr(1, oUIAelem.CurrentName, miniFilename) > 0 Then
As-tu des fenêtres "exotiques" ouvertes à ce moment là où des logiciels pas de base qui tournent ? as-tu regardé quand ça coince sur quoi ça coince ?
Utilise ceci à la place :
VB:
If InStr(1, oUIAelem.GetCurrentPropertyValue(UIAutomationClient.UIA_NamePropertyId), miniFilename) > 0 Then
Le timeout à la fermeture du document c'est celui de la boucle ? je comprends pas trop parce que la procédure avec la boucle n'est appelée qu'à l'ouverture du document
 
Dernière édition:
OK il ne trouve pas la fenêtre mais moi je n'ai pas xchange viewer moi c'est google chrome qui ouvre les pdf(il y a le nom du fichier dans le caption dans xchange viewer ) ? Dans l'exemple que tu montres comment s'appelle ton fichier en entier ? La détection de la fenêtre est basée sur le nom du fichier sans chemin et sans extension. as-tu essayé le bouton Txt ?
 
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
952
Réponses
0
Affichages
2 K
Retour