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
 
Dans les fenêtres des documents qu' on ouvrent il y a toujours le nom du document avec ou sans le chemin complet (cela est vrai aussi pour Notepad et Notepad++) et il y a plus fiable que les Api windows pour récupérer le handle de la fenêtre (dans mon formulaire je n'utilise aucune API Windows).
 
Dans les fenêtres des documents qu' on ouvrent il y a toujours le nom du document avec ou sans le chemin complet
Oui, j'y ai pensé, ne rechercher le titre de la fenêtre que par la nom du document.

Mais d'une part les applications peuvent tronquer ce nom à leur guise, donc sur quelle partie chercher ?
Exemple: Un bel itinéraire qui vous conduit au cœur de la région des Pouilles.docx

Et d'autre part il n'y a pas de garantie d'exclusivité pour la fenêtre de contenir tout ou partie du nom du document qu'on cherche.
 
Dernière édition:
et il y a plus fiable que les Api windows pour récupérer le handle de la fenêtre (dans mon formulaire je n'utilise aucune API Windows).
Quel Post STP ce formulaire ?

Je pense que le problème lié à Word c'est qu'il y a un Handle au démarrage et un autre Handle lorsqu'il a chargé le fichier.
Donc c'est indém@rdable. Peut-être en passant par les PID.
 
personnellement moi je suis revenu sur la recherche classe et titre optionnel tout les deux car pour pdfXchange
la première classe qui vient c'est pas la bonne
le getforgroundwindow a des ratés sauf si je rallonge le timer ce qui est pour moi est un peu long
de plus qi j'ai une fenêtre first plan c'est mort
je suis donc revenu a ma fonction gethandlebyparttitle un peu revisité
je peux chercher ce que je veux
c'est quasi instantané chez moi
c'est largement plus sur
je peux ajouter adobe acrobat reader aussi sans problème
 
non c'est pas la peine
PDF_Xchangeviewer
_ classe = "DSUI:DFXCViewer"
_
et le titre contient au moins le nom sans' 'extension
acrobat reader de la version 9 à la dernière (la 25.xxx Adobe acrobat reader DC )

_ classe = "AcrobatSDIWindow"
_
et le titre contient au moins le nom sans' 'extension
Bloknote (Notepad)
_ classe="Notepad"
_
et le titre contient au moins le nom sans' 'extension(même le nom complet)
NotePad++
_ classe="Notepad++"
_
et le titre contient au moins le nom sans' 'extension(même le chemin complet)
Edge
_ classe="Chrome_WidgetWin_1"
_
et le titre contient au moins le nom sans' 'extension(même le nom complet)
FirFox
_ classe="Chrome_WidgetWin_0"
_
et le titre contient au moins le nom sans' 'extension(même le nom complet)

donc::

c'est simple on cherche une fenêtre d'une certaine classe et qui like le nom du fichier sans son extension
et on a tout bon avec 6 applicatifs


Patrick
 
Alors ça marche très bien pour TXT, WORD mais pas du tout pour PDF sur PDF XChange Viewer.
Pourquoi ? Parce que le nom (même partiel) du fichier PDF n'est pas dans le titre (GetWindowText) de la fenêtre bien qu'il apparaisse devant à l'affichage !!!
Donc il faut gérer cette exception.
 
@Dudu2
dans ma capture c'est avec getwindowtext que j'ai le titre !! tu déraille là

je répète le getwindowtext contient au moins le nom du fichier sans son extension
seulement si tu prévois pas un buffer assez large(512) ben il renvoiedes fois ; juste "- pdf_Xchange viewer" c'est tout


et c'est valable pour tout les applicatifs énuméré dans mon post précédent

VB:
Function GetWinHandle(Optional classe = "*", Optional Texte = "*", Optional sec As Long = 1)
    Dim tim
    tim = Timer
    Do While Timer - tim < sec
        hwnd = FindWindow(vbNullString, vbNullString) 'on commence avec la première fille du desktop
        DoEvents
        Do While hwnd <> 0
            DoEvents
            If IsWindow(hwnd) Then
                'If IsWindowVisible(hwnd) Then
                Dim clN$: clN = Space$(256): GetClassName hwnd, clN, 256
                Dim txtx$: txtx = Space$(512): GetWindowText hwnd, txtx, 512
                If clN Like classe & "*" Then
                    If txtx Like "*" & Texte & "*" Then
                     Debug.Print "handle : " & hwnd & vbCrLf; "titre : " & txtx & vbCrLf & "classe : " & clN
                     GetWinHandle = hwnd: Exit Function
                    End If
                End If
                'End If
            End If
            hwnd = GetWindow(hwnd, 2) 'on passe a la suivante
        Loop
    Loop
End Function


Sub testPDF_Xchange()
    Dim appHandle As LongPtr
    Dim Hnewparent As LongPtr
    Dim He7 As LongPtr
    Dim fichier$
    fichier = "J:\vba excel\base 64 vba .pdf"
      ShellExecute 0, "open", fichier, "", "", 1 ' SW_SHOWNORMAL
    n = Split(Mid(fichier, InStrRev(fichier, "\") + 1), ".")(0)
   Debug.Print "fichier : "; fichier
   appHandle = GetWinHandle("DSUI:PDFXCViewer", n, 10)
    exit sub 'on arrete ici tu n'a pas le reste de mes fonctions 
    t = AllPartExcelWindowList
    
    For i = 2 To UBound(t)
        If t(i, 2) = "XLDESK" Then Hnewparent = CLngPtr(t(i, 1)): Large = t(i, 7): haut = t(i, 8)
        If t(i, 2) = "EXCEL7" Then He7 = CLngPtr(t(i, 1))
    Next
    SetWindowPos He7, 0, 0, 0, Large / 2, haut, 0
    SetParent appHandle, Hnewparent
    SetWindowPos appHandle, 0, Large / 2, 0, Large / 2, haut, 0
End Sub
 
- 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