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...
Il manque juste le volet choucroute garnie Regarde la pièce jointe 1222870
Salut,
plutôt que la choucroute garnie , je propose notepad++ en mode postit ( pas de barre de titre, pas de barre de boutons) .
Le code :
Sub Inserer_un_fichier_text_Click(control As IRibbonControl)
Dim h As LongPtr
h = Ouvrir_Npp()
SplitExcelView h
' Envoyer la touche F12 pour se mettre en mode postit dans notepad++
SendKeys "{F12}", True
End Sub
Function Ouvrir_Npp()
Dim cheminFic As String, cheminNpp As String, cmd As String
Ouvrir_Npp = 0
cheminNpp = GetNotepadPPPath()
If cheminNpp = "" Then
MsgBox "NotePad++ n'est pas installé !"
Exit Function
End If
cheminFic = Application.GetOpenFilename("bas Files (*.bas), *.bas", 1, "ouvrir un fichier")
If cheminFic = "Faux" Then Exit Function
Dim t#, hWnd As LongPtr
cmd = """" & cheminNpp & """ """ & cheminFic & """"
Shell cmd, vbHide ' Ouvre Notepad++ avec le fichier spécifié"
t = Timer
Do
hWnd = FindWindow("Notepad++", vbNullString)
' Debug.Print hwnd
DoEvents
If Timer - t > 5 Then Exit Do ' Max 5 secondes
Loop While hWnd = 0
If hWnd = 0 Then
MsgBox "Fenêtre Notepad++ non trouvée.", vbExclamation
Exit Function
Else
Ouvrir_Npp = hWnd
End If
' Debug.Print hWnd
End Function
Function GetNotepadPPPath() As String
Dim wsh As Object, regPath As String, exePath As String
On Error GoTo ErrHandler
Set wsh = CreateObject("WScript.Shell")
' Clé de registre standard pour App Paths
regPath = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\notepad++.exe\"
' Essayer de lire la valeur par défaut
exePath = wsh.RegRead(regPath)
If Len(Dir(exePath)) > 0 Then
GetNotepadPPPath = exePath
Else
GetNotepadPPPath = ""
End If
Exit Function
ErrHandler:
GetNotepadPPPath = ""
End Function
On regarde tout d'abord si Npp est installé et on récupère le chemin complet de l'exécutable.
Quand on a mis Notepad++ dans excel , on envoie F12 qui permet de se mettre en mode postit .
Voici ce que cela donne pour un fichier .bas :
NotePad++.png


Le petit bouton + en haut à droite permet de se remettre en mode complet NotePad++

Nullosse
 
re
@nullosse
les raisons:
les volets pdf
un copier coller a dispo d'une fenêtre à l'autre
et ça peut être une visionneuse de document enregistrée précédemment en pdf dans une app excel de facture ou planning par exemple

les volets texte
j'ouvre un fichier text csv et autres ouvrables avec notpad directement je copie colle d'une fenêtre à l'autre et vice et versa
comme dans notepad j'ai le menu original je peux directement enregistrer si je le modifie

les volet web y compris excel downloads 🤣
1758880617833.png

il peut être
et pour exceldownloads le copier coller vice et versa est vallable aussi intéressant d'aller chercher une donnée quelque part (3 moteurs de recherches)
et avec exel downloads si il y a une table et hop copier coller

pour word et acces j'ai un peu de mal le menu du handle est supprimé
ce qui bloque l'affiliation dans le pane XLDESK


pour notepad ++ je sais pas encore il faut que je le télécharge et installe et que je travaille avec pour le mettre en place

bref le tout piloté par un bouton dans le ruban y compris la fermeture des volets (fenêtre non natives d'excel)

et ce matin je me suis un peu attaqué au ruban aussi
je la tord dans tout les sens cette fenêtre Excel 🤪🤪🤣🤪🤣
j'en fait un puzzle🤪🤪🤣
 
a ben si tu n'a pas réglé ton soucis c'est pas la peine que j'aille plus loin
j'ai testé sur un 2021 aussi sur un 2016 et a partir du moment ou tu supprime les cle de sécurité que microsoft met dans le registre pour bloquer le control webbrowser ça devrait marcher
si tu fait pas c'est sur tu n'ira pas loin
amoins que ce soit plus grave

tu n'a pas edge(tu l'a stroumphé)
tu n'a pas de ctrl webbrowser
le plugin de pdfxview visiblement walouh

bref réduire la fenêtre pour ne pouvoir rien faire ça va pas aller bien loin
faudrait peut être remettre ton Windows ou office à jour et au propre surtout

j'ai aussi entendu parler du ctrl edge web similaire au webbrowser
je vais faire des recherches la dessus mais bon c'est un truc a installer
alors que le webbrowser lui est déjà en place (normalement)

c'est dommage c'est un beau projet
surtout que j'ai pas mal avancé une ressource a d'ailleurs été publiée avec le userform
je suis en train de peaufiner la mise a jour avec les options edge notepad++
bref en l'etat chez moi j'ouvre n'importe quel document en dock side
 
a ben si tu n'a pas réglé ton soucis c'est pas la peine que j'aille plus loin
j'ai testé sur un 2021 aussi sur un 2016 et a partir du moment ou tu supprime les cle de sécurité que microsoft met dans le registre pour bloquer le control webbrowser ça devrait marcher
si tu fait pas c'est sur tu n'ira pas loin
amoins que ce soit plus grave
tu n'a pas edge(tu l'a stroumphé)
tu n'a pas de ctrl webbrowser
le plugin de pdfxview visiblement walouh

j'ai aussi entendu parler du ctrl edge web similaire au webbrowser
je vais faire des recherches la dessus mais bon c'est un truc a installer
alors que le webbrowser lui est déjà en place (normalement)
Salut patricktoulon,
1- il me semble que la clé de sécurité c'est pour les activeX que l'on met dans les feuilles . Les formulaires sont plus protégés. J'arrivais à utiliser facilement un web browser dans un formulaire pas dans une feuille (impossible d'insérer l'objet).
2 - Le plugin adobe reader n'existerait pas en 64 bits donc pas disponible pour l'activeX web browser en 64 bits
4 - le ctrl edge c'est webview2 et ce n'est pas un activeX donc pas utilisable dans un formulaire.

[EDIT] Dans mon Excel 2021 64 bits , pas de problème pour mettre un web browser dans un formulaire. J'arrive par exemple à charger une image dedans et pas un PDF (normal je n'ai pas installé Adobe Reader trop intrussif)
 
Dernière édition:
re
@nullosse
oui je sais le webview2 n'est pas un ocx mais il y a le ordoWebview2activX control 2.09.exe mais il fait 309 mega
et j'ai pas envie d'installer d'autre truc
des que j'ai le temps
je casserais l'exe pour récupérer l'ocx

oui @Dudu2 ca c'est simple avec ma fonction
testé avec adobe reader 9 / 10 / et le dernier DC
VB:
' Fonction qui lance le PDF et renvoie le handle
Function OuvrirPDF_GetHandle() As LongPtr
    Dim cheminPDF$, hwnd As LongPtr, sStr$, st$, tim#, a&
    OuvrirPDF_GetHandle = 0 ' valeur par défaut
    cheminPDF = Application.GetOpenFilename("Fichiers PDF (*.pdf), *.pdf", 1, "Ouvrir un fichier")
    If cheminPDF = "Faux" Or Dir(cheminPDF) = "" Then
        MsgBox "Fichier PDF introuvable.", vbExclamation
        Exit Function
    End If
    ' Lance le PDF avec l'application par défaut
    'Shell "explorer """ & cheminPDF & """", vbNormalFocus
    ShellExecute 0, "Open", cheminPDF, 0, 0, SW_SHOWNORMAL
    
    ' Recherche du handle
    sStr = Space$(512)
    st = String(256, vbNullChar)
    tim = Timer
    a = 0
    Do While a < 10 And OuvrirPDF_GetHandle = 0
        a = a + 1
        hwnd = FindWindow(vbNullString, vbNullString)
        Do While hwnd <> 0 And Timer - tim < 5
            DoEvents
            GetWindowText hwnd, sStr, 512
            GetClassName hwnd, st, 256
            
            If (sStr) Like "*" & Split(Mid(cheminPDF, InStrRev(cheminPDF, "\") + 1), ".")(0) & "*" Then
                Debug.Print "titre : " & sStr
                Debug.Print "classe : " & st
                
                OuvrirPDF_GetHandle = hwnd
                Exit Do
            End If
            hwnd = GetWindow(hwnd, 2)
        Loop
        If OuvrirPDF_GetHandle <> 0 Then Exit Do
    Loop
End Function
pour le reste c'est pareil que mes dernières version

h=OuvrirPDF_GetHandle
if h<>0 then
on envoie au splitview avec le h
end if
 
j'ai intégré pdf X-ChangeViewer pour toi @Dudu2
VB:
Sub Inserer_pdf_defaut_X_Change()
    Dim h As LongPtr
    h = OuvrirPDF_GetHandleX
    If h <> 0 Then
        SplitExcelViewHandle h
    End If
    
End Sub
' Fonction qui lance le PDF et renvoie le handle
Function OuvrirPDF_GetHandleX() As LongPtr
    Dim cheminPDF$, hwnd As LongPtr, sStr$, st$, tim#, a&
    OuvrirPDF_GetHandleX = 0 ' valeur par défaut
    cheminPDF = Application.GetOpenFilename("Fichiers PDF (*.pdf), *.pdf", 1, "Ouvrir un fichier")
    If cheminPDF = "Faux" Or Dir(cheminPDF) = "" Then
        MsgBox "Fichier PDF introuvable.", vbExclamation
        Exit Function
    End If
    n = Split(Mid(cheminPDF, InStrRev(cheminPDF, "\") + 1), ".")(0)
    
    ' Lance le PDF avec l'application par défaut
    'Shell "explorer """ & cheminPDF & """", vbNormalFocus
    ShellExecute 0, "Open", cheminPDF, 0, 0, SW_SHOWNORMAL
    
    ' Recherche du handle
    sStr = Space$(512)
    st = String(256, vbNullChar)
    tim = Timer
    a = 0
    
    Dim handleb As LongPtr
    Do While a < 10 And handleb = 0
        a = a + 1
        hwnd = FindWindow(vbNullString, vbNullString)
        Do While hwnd <> 0 And Timer - tim < 5
            DoEvents
            GetWindowText hwnd, sStr, 512
            GetClassName hwnd, st, 256
            If st Like "*DSUI:PDFXCViewer*" Then
                If sStr Like "*" & n & "*XChange Viewer*" Then
                    Debug.Print "titre : " & sStr
                    Debug.Print "classe : " & st
                    handleb = hwnd
                    Exit Do
                End If
            End If
            hwnd = GetWindow(hwnd, 2)
        Loop
        If handleb <> 0 Then Exit Do
    Loop
    OuvrirPDF_GetHandleX = handleb
End Function


demo3.gif
 
- 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
937
Réponses
0
Affichages
2 K
Retour