XL 2010 Utilisation API

cathodique

XLDnaute Barbatruc
Bonjour,

Dans les diverses codes que j'ai pu rencontrer utilisant les API. Elles sont généralement déclarées en "Private".

Voulant utiliser un fichier en plein écran que ce soit Excel et Userform (pas tous les userforms du projet).

j'ai modifié le private en Public, cela semble fonctionner.

je voudrai votre avis pour ne pas avoir de mauvaises surprises.

VB:
#If Win64 Then ' (Office 64bit ET Win 64Bit)
            Public Declare PtrSafe Function SetWindowLongPtrA Lib "user32" (ByVal hwnd As LongLong, ByVal nIndex As Long, ByVal dwNewLong As LongLong) As LongLong
            Public Declare PtrSafe Function FindWindowA Lib "user32" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongLong
            Public Declare PtrSafe Function GetWindowLongA Lib "user32" (ByVal hwnd As LongLong, ByVal nIndex As LongLong) As LongLong
            Public Declare PtrSafe Function ShowWindow Lib "user32" (ByVal hwnd As LongLong, ByVal nCmdShow As LongLong) As LongLong
        #Else ' (Office 32bit ET Win 32Bit) OU (Office 32Bit ET Win 64Bit)
            Public Declare Function SetWindowLongA Lib "user32" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
            Public Declare Function FindWindowA Lib "user32" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
            Public Declare Function GetWindowLongA Lib "user32" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
            Public Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
        #End If

En vous remerciant par avance.

Bonne journée.
 

Pièces jointes

  • Plein Ecran.xlsm
    35.3 KB · Affichages: 2

cathodique

XLDnaute Barbatruc
Bonjour,
Private t'oblige à utiliser les propriétés/méthodes dans le même module que les déclarations ; publique te permet d'utiliser les propriétés/méthodes de n'importe quel endroit du projet.

Bien sur il faut que ces déclaration ce trouve dans un module standard et pas dans thisworkbook
Bonjour @dysorthographie ;),

Je te remercie. Ok, pas dans Thisworkbook. J'avais mis le code dans un module standard.
J'ai testé avec la déclaration Public au lieu Private, semble fonctionner.
je voulais juste vos avis par rapport à la fiabilité du code.

Encore merci.

Bonne journée.
 

jurassic pork

XLDnaute Occasionnel
Hello,
il me semble que si tu veux utiliser une API dans le code d'une feuille , d'un classeur ou d'un formulaire il faut que tu la déclares en Private et tu ne pourras l'utiliser que dans l'endroit où tu l'as déclarée. Par contre si tu la déclares en public dans un module standard tu pourras l'utiliser de n'importe où.
Ami calmant, J.P
 

cathodique

XLDnaute Barbatruc
Hello,
il me semble que si tu veux utiliser une API dans le code d'une feuille , d'un classeur ou d'un formulaire il faut que tu la déclares en Private et tu ne pourras l'utiliser que dans l'endroit où tu l'as déclarée. Par contre si tu la déclares en public dans un module standard tu pourras l'utiliser de n'importe où.
Ami calmant, J.P
Bonjour @jurassic pork ,

J'utilise rarement les APIs, je voulais avoir votre avis.
Car j'ai trouvé de codes où les apis sont déclarées en Private ou Declare.
Je me suis demandé si Public ne me causerait pas de souci.

Merci.
 

patricktoulon

XLDnaute Barbatruc
bonjour @cathodique
au delà du problème de declaration d'api (qui n'en est pas vraiment un)
j'aurais une question
dis moi a quoi sert ceci
VB:
Option Explicit

'#If Win64 Then ' (Office 64bit ET Win 64Bit)
'            Private Declare PtrSafe Function SetWindowLongPtrA Lib "user32" (ByVal hwnd As LongLong, ByVal nIndex As Long, ByVal dwNewLong As LongLong) As LongLong
'            Private Declare PtrSafe Function FindWindowA Lib "user32" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongLong
'            Private Declare PtrSafe Function GetWindowLongA Lib "user32" (ByVal hwnd As LongLong, ByVal nIndex As LongLong) As LongLong
'            Private Declare PtrSafe Function ShowWindow Lib "user32" (ByVal hwnd As LongLong, ByVal nCmdShow As LongLong) As LongLong
'        #Else ' (Office 32bit ET Win 32Bit) OU (Office 32Bit ET Win 64Bit)
'            Private Declare Function SetWindowLongA Lib "user32" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
'            Private Declare Function FindWindowA Lib "user32" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
'            Private Declare Function GetWindowLongA Lib "user32" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
'            Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
'        #End If

#If Win64 Then ' (Office 64bit ET Win 64Bit)
            Public Declare PtrSafe Function SetWindowLongPtrA Lib "user32" (ByVal hwnd As LongLong, ByVal nIndex As Long, ByVal dwNewLong As LongLong) As LongLong
            Public Declare PtrSafe Function FindWindowA Lib "user32" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongLong
            Public Declare PtrSafe Function GetWindowLongA Lib "user32" (ByVal hwnd As LongLong, ByVal nIndex As LongLong) As LongLong
            Public Declare PtrSafe Function ShowWindow Lib "user32" (ByVal hwnd As LongLong, ByVal nCmdShow As LongLong) As LongLong
        #Else ' (Office 32bit ET Win 32Bit) OU (Office 32Bit ET Win 64Bit)
            Public Declare Function SetWindowLongA Lib "user32" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
            Public Declare Function FindWindowA Lib "user32" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
            Public Declare Function GetWindowLongA Lib "user32" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
            Public Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
        #End If


 Sub Excel_Plein_Ecran()
'plein ecran
Dim hwnd As Long
'masquer les boutons
  hwnd = FindWindowA(vbNullString, Application.Caption)
  SetWindowLongA hwnd, -16, GetWindowLongA(hwnd, -16) And &HFFF7FFFF
'plein écran
Application.DisplayFullScreen = True
 'Masquer le quadrillage
    ActiveWindow.DisplayGridlines = False
' Masquer les en-têtes
    ActiveWindow.DisplayHeadings = False
' Masquer les barres de défilement
   ActiveWindow.DisplayHorizontalScrollBar = False
    ActiveWindow.DisplayVerticalScrollBar = False
' Masquer les onglets de classeur
    ActiveWindow.DisplayWorkbookTabs = False
End Sub
'rétablir
Sub Excel_Ecran_Normal()
Dim hwnd As Long
'rétablir les boutons
  hwnd = FindWindowA(vbNullString, Application.Caption)
  SetWindowLongA hwnd, -16, GetWindowLongA(hwnd, -16) Or &H80000
'rétablir plein écran
Application.DisplayFullScreen = False
'rétablir le quadrillage
    ActiveWindow.DisplayGridlines = True
' rétablir les en-têtes
    ActiveWindow.DisplayHeadings = True
' rétablir les barres de défilement
   ActiveWindow.DisplayHorizontalScrollBar = True
    ActiveWindow.DisplayVerticalScrollBar = True
' rétablir les onglets de classeur
    ActiveWindow.DisplayWorkbookTabs = True
End Sub
et pose toi la question: ais-je vraiment besoins de tout ça pour atteindre ce but ?
 

cathodique

XLDnaute Barbatruc
bonjour @cathodique
au delà du problème de declaration d'api (qui n'en est pas vraiment un)
j'aurais une question
dis moi a quoi sert ceci
VB:
Option Explicit

'#If Win64 Then ' (Office 64bit ET Win 64Bit)
'            Private Declare PtrSafe Function SetWindowLongPtrA Lib "user32" (ByVal hwnd As LongLong, ByVal nIndex As Long, ByVal dwNewLong As LongLong) As LongLong
'            Private Declare PtrSafe Function FindWindowA Lib "user32" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongLong
'            Private Declare PtrSafe Function GetWindowLongA Lib "user32" (ByVal hwnd As LongLong, ByVal nIndex As LongLong) As LongLong
'            Private Declare PtrSafe Function ShowWindow Lib "user32" (ByVal hwnd As LongLong, ByVal nCmdShow As LongLong) As LongLong
'        #Else ' (Office 32bit ET Win 32Bit) OU (Office 32Bit ET Win 64Bit)
'            Private Declare Function SetWindowLongA Lib "user32" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
'            Private Declare Function FindWindowA Lib "user32" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
'            Private Declare Function GetWindowLongA Lib "user32" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
'            Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
'        #End If

#If Win64 Then ' (Office 64bit ET Win 64Bit)
            Public Declare PtrSafe Function SetWindowLongPtrA Lib "user32" (ByVal hwnd As LongLong, ByVal nIndex As Long, ByVal dwNewLong As LongLong) As LongLong
            Public Declare PtrSafe Function FindWindowA Lib "user32" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongLong
            Public Declare PtrSafe Function GetWindowLongA Lib "user32" (ByVal hwnd As LongLong, ByVal nIndex As LongLong) As LongLong
            Public Declare PtrSafe Function ShowWindow Lib "user32" (ByVal hwnd As LongLong, ByVal nCmdShow As LongLong) As LongLong
        #Else ' (Office 32bit ET Win 32Bit) OU (Office 32Bit ET Win 64Bit)
            Public Declare Function SetWindowLongA Lib "user32" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
            Public Declare Function FindWindowA Lib "user32" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
            Public Declare Function GetWindowLongA Lib "user32" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
            Public Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
        #End If


 Sub Excel_Plein_Ecran()
'plein ecran
Dim hwnd As Long
'masquer les boutons
  hwnd = FindWindowA(vbNullString, Application.Caption)
  SetWindowLongA hwnd, -16, GetWindowLongA(hwnd, -16) And &HFFF7FFFF
'plein écran
Application.DisplayFullScreen = True
 'Masquer le quadrillage
    ActiveWindow.DisplayGridlines = False
' Masquer les en-têtes
    ActiveWindow.DisplayHeadings = False
' Masquer les barres de défilement
   ActiveWindow.DisplayHorizontalScrollBar = False
    ActiveWindow.DisplayVerticalScrollBar = False
' Masquer les onglets de classeur
    ActiveWindow.DisplayWorkbookTabs = False
End Sub
'rétablir
Sub Excel_Ecran_Normal()
Dim hwnd As Long
'rétablir les boutons
  hwnd = FindWindowA(vbNullString, Application.Caption)
  SetWindowLongA hwnd, -16, GetWindowLongA(hwnd, -16) Or &H80000
'rétablir plein écran
Application.DisplayFullScreen = False
'rétablir le quadrillage
    ActiveWindow.DisplayGridlines = True
' rétablir les en-têtes
    ActiveWindow.DisplayHeadings = True
' rétablir les barres de défilement
   ActiveWindow.DisplayHorizontalScrollBar = True
    ActiveWindow.DisplayVerticalScrollBar = True
' rétablir les onglets de classeur
    ActiveWindow.DisplayWorkbookTabs = True
End Sub
et pose toi la question: ais-je vraiment besoins de tout ça pour atteindre ce but ?
 

cathodique

XLDnaute Barbatruc
Bonjour @patricktoulon ,

au delà du problème de declaration d'api (qui n'en est pas vraiment un)
Pas pour toi, pour moi si. Je ne suis pas un chevronné comme toi.
De plus autodidacte qui ne code pas régulièrement.

dis moi a quoi sert ceci
Dans le détail je ne pourrai pas te donner une réponse.
Cependant, je sais que ça masque ou supprimer la barre de titre et redimensionne par rapport à l'écran.


et pose toi la question: ais-je vraiment besoins de tout ça pour atteindre ce but ?
Je ne sais pas ce que fait exactement chacune de ces api.

Connaissant ton niveau, je ne sais que tu sais ce que font ces bouts de code.
Donc, tu sais que le but est l'affichage d'excel et de formulaires en plein écran.

Mon objectif est d’empêcher un utilisateur novice d'accéder aux feuilles de calcul qui contiennent des données sensibles. D'où l'idée, d'une navigation via un formulaire principal et d'autres pour faire différentes tâches.

J'espère avoir répondu à tes questions.

Merci.
 

cathodique

XLDnaute Barbatruc
re
ma question était à caractère rhétorique a fin de t'ammener sur la reflection de l'utilité de l'utilisation des api dans certains cas

je suis à l'écoute pour plus de renseignement si tu veux
Bonsoir Patrick,

Je te remercie, tes explications sont de très haut niveau.
J'ai pu me rendre compte avec quelle aisance tu décortiques et modifies les codes.
(entre nous je t'envie un peu😉 )
je n'ai pas ton niveau et je suis persuadé que je l'atteindrai jamais.
Tu t'es posé beaucoup de questions sur ce que je voulais faire.
Tu t'es aperçu qu'il y a en effet, des bribes de tes codes.
Tu m'as fait une très belle démonstration mais tu ne t'es pas aperçu que dans la barre de titre d'excel il n'y avait plus les petites icônes en haut à droite.

Voici ce que je voudrais arriver à faire:
- à L'ouverture d'excel: Plein écran sans barre de titre (onglets non visibles Seule feuille "Menu" apparentes)
- ensuite affichage d'une userform d'identification si OK --> Affichage d'un userform de navigation en plein écran sans barre de titre (ni réduction, ni déplacement, ni zoom).
- au clic sur un des bouton de formulaire ouvrira un autre formulaire (et ferme ce dernier) etc...

Voilà pour l'essentiel, je pourrai adapter pour les autres formulaires.

C'est en faisant des recherches que je suis tombé par hasard sur des exemples utilisant les api.

Si on peut faire ce que je viens de décrire sans API, je suis preneur.

Encore merci.

Bonne soirée.
 

patricktoulon

XLDnaute Barbatruc
re
Tu m'as fait une très belle démonstration mais tu ne t'es pas aperçu que dans la barre de titre d'excel il n'y avait plus les petites icônes en haut à droite.
je t'ai donné les valeurs des constante raccourci si tu veux applique le sur excel si tu y tiens
mais avant de te proposer j'ai testé ton exemple tel quel et ce que je propose sans les api fait la même chose
 

Discussions similaires

  • Résolu(e)
Microsoft 365 32 ou 64 bits
Réponses
46
Affichages
2 K

Statistiques des forums

Discussions
314 628
Messages
2 111 336
Membres
111 104
dernier inscrit
JEMADA