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
 
tu ,a pas tout a fait bien compris
le webview2 tu la déjà avec la version 2 de edge c'est le moteur de edge comme ieframe.dll etait celui de IE
on peut l'utiliser dans les app web php vb.net c+ etc...
c'est en vb qu'il n'a pas de wrapper et la que l'ocx ordowebview2_ActivX control2.09.ocx rentre en jeux
le seul problème c'est qu'il y a plein d'autre chose dans l'exe qui l'installe
je m'occupe dans la journée de casser cet exe, pour chopper ce foutu ocx

Patrick
 
Bonjour les colistiers,

@patricktoulon, ton fichier m'a donné quelques idées mises en pratique dans le classeur joint.

Je détermine le Handle de la fenêtre ouverte de manière différente et générique (pas de recherche dans le titre des Windows), et comme je n'ai pas ton habileté à modifier le ruban, j'ai fait un bouton pour fermer la fenêtre utile seulement pour Word car si on le l'utilise pas, on ferme Word ET Excel ! Il y a une boucle en OnTime pour déterminer quand elle ferme et remettre la grille Excel en place.

Pour des documents Excel, ça me semble délicat car le SetParent a un effet délétère sur le classeur ouvert (je pense !)
 
Bonjour @Dudu2
c'est pas mal mais
tu n'a pas mis le control du resize
demo3.gif

comme tu peut le voir le coté dockside fou le camp des que tu resize ta fenêtre

2 word n'est pas docké

je sais c'est compliqué avec cette foutu fenêtre pdfX_Changeviewer elle a un effet bizarre chez moi selon si je laisse la barre de titre ou pas
et le resize en dépend elle n'est pas deplacable ou quelque raté pendant le resize et ca bloque le resize de EXCEL7 aussi

attention a captage genérique quand même je vais regarder ce que tu veux dire pas là
 
2d remarque et pas des moindre
je sais pas si tu a vu je l'ai enlever de mon code chez moi
tu code sur un#if #end partout du genre
VB:
#If VBA7 Then
    Dim EXCEL7WindowHandle As LongPtr
#Else
    Dim EXCEL7WindowHandle As Long
#End If
donc vb66666 ca veut dire tout bonnement excel 2007
sauf que dans excel 2007 les fenêtre ne sont pas tout a fait pareille
d'ailleurs on a pas besoins des api pour reduire la grille a moitié c'est les windows dans 2007
donc tout le barda #if #else #end if tu peux tout dégommer reste en longptr tout simplement


quand tu parlais de generique
si tu parlais du GetForegroundWindow

Attention excel joue des tours avec les macro comme il execute il reprend la main niveau focus des fois

ET POUR PEU QUE TU AIES UNE FENÊTRE EN MODE PREMIER PLAN DU GENRE UNE AUTRE AVEC UN
setwindowpos hwnd,-1,0&,0&,0&,0&,0& ben C EST MORT


si tu veux je te met les boutons dans le ruban même nom

Patrick
 
Dernière édition:
et pour éviter les crises d’épilepsie ouvre les en shownormal
on évite d'avoir ce gros flash fenêtre full screen au démarrage

je réhitère mes conseils sur le getforagoundwindow qui sera bluffé sans sourciller en cas de fenêtre premier plan d'une autre application

peut être l'api gotfocus et encore je sais pas avec les fenêtres premier plan
 
ET POUR PEU QUE TU AIES UNE FENÊTRE EN MODE PREMIER PLAN DU GENRE UNE AUTRE AVEC UN
setwindowpos hwnd,-1,0&,0&,0&,0&,0& ben C EST MORT
Et donc quelle alternative à GetForegroundWindow() ? GetActiveWindow() ? J'ai essayé ça marche pas.

Alors attention ! J'ai corrigé la récupération du Handle de la fenêtre du fichier ouvert car on peut récupérer du GetForegroundWindow = 0 !!!
Ce qui perturbe la récupération du Handle si ce n'est pas testé.

Fichier: voir plus loin
 
Dernière édition:
alors une alternative et la je suis content j'ai battu claude et chatgpt
ils ont pas compris encore ces deux là que je suis un extraterrestre
comment être sur à95% de chopper le bon handle sans classe sans texte ,de caption?
on va simplement raisonner logiquement (c'est le dernier ouvert c'est tout dans l'instanté)
et hop encore une combine a patosh
ha il l'ont pas vu venir celle là telement ele est simple
exemple
VB:
Private Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" _
                              (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr

Declare PtrSafe Function GetWindow Lib "user32" _
                              (ByVal hwnd As LongPtr, ByVal wCmd As Long) As LongPtr

Declare PtrSafe Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
                              (ByVal hwnd As LongPtr, ByVal lpOperation As String, ByVal lpFile As String, _
                              ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As LongPtr



Public Function getLastHandle(Optional sec As Long = 0) As LongPtr
   'patricktoulon
   Static dicoHandle As Object ' le dico en static
    'si sec= 0 on reinitialise le dico
    If sec = 0 Then
        Set dicoHandle = CreateObject("scripting.dictionary")
    End If
    Dim hwnd As LongPtr
    tim = Timer
    'on recommence le bourrin tant que le timer n'est pas atteint
    Do While Timer - tim < (sec + 1)
        hwnd = FindWindow(vbNullString, vbNullString) 'on commence avec la première fille du desktop
        DoEvents
        Do While hwnd <> 0 'on boucle tant que hwnd <> de 0
           DoEvents
           'Debug.Print hwnd
            
            'si il y a un timer c'est qu'on cherche un handle on est donc dans un second lancement de la fonction
            'alors si on en trouve un différent des existant alors c'est lui la dernière fen$etre ouverte
            'donc on le recupère dans le return et on sort  de la fonction
            If Not dicoHandle.exists(hwnd) And sec > 0 Then
                getLastHandle = hwnd 'le return de la fonction renvoie le handle
                Set dicoHandle = Nothing 'on peut bruler le dico
                Exit Function 'on peut sortir
            Else
              'si sec= 0 on est dans le premier lancement qui ne sertt qu'a stocker les handle dans le dico
              dicoHandle(hwnd) = ""
            End If
            hwnd = GetWindow(hwnd, 2) 'on passe a la suivante
        Loop
    Loop
End Function
Sub test()
    Dim h As LongPtr
    'ici on utilise pas l'appel pour un return on lance comme une sub ca va remplir le dico des fen^tre existantes
    getLastHandle
    'on teste en lancant un fichier
    ShellExecute 0, "open", "C:\Users\patricktoulon\Desktop\cBenchmark.txt", "", "", 1 ' SW_SHOWNORMAL
   'cette fois ci on va utiliser le return de la fonction qui doit me renvoyer le handle (la dernière fenêtre ouverte)
    h = getLastHandle(2)
    'on affiche pour le test
    MsgBox h
End Sub
 
J'ai réglé le problème de la fermeture de Word par la croix système qui ferme aussi Excel (je sais pas trop pourquoi, le SetParent certes, mais quoi d'autre... dans la famille Office je ferme tout le monde ?). Il faut un tout petit bout de code dans le ThisWorkbook ce qui n'est pas génial, mais ça règle la question.
 

Pièces jointes

je sais pas chez moi ça le dock pas le word

par contre je te confirme que getforgroundwindow se fait buffer j'ai testé avec un userform en first plan et c'est lui qui est pris a la place de la fenêtre de l'applicatif (mais je le savais déjà ça)

pour info avec pdfx_changeviewer même mon astuce a des raté
donc pour pdfx_Changeviewer vaut mieux mon truc qui capte sa classe et son texte
au moins on est sur

c'est un sacré truc ça ce pdfviewer là dis donc j'ai le gratuit et et avec adobe reader DC version gratuite et j'ai plus d'option avec adobereader la plus part sur pdfxchange sont grisées
 
- 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
920
Réponses
0
Affichages
2 K
Retour