XL 2010 API en vba excel

jedry

XLDnaute Nouveau
Bonjour à tous,
Dans un programme vba excel, je souhaite supprimer à l'écran tout ce qui est inutile à ce programme et qui pourrait perturber l'utilisateur.
Les commandes vba m'ont permis d'afficher en plein écran et donc de masquer le ruban, le quadrillage, les en-tête de lignes et de colonnes ainsi que la barre de formules, puis de désactiver certaines touches. D'autre part, j'ai trouvé sur un site un code qui fait appel aux API et qui m'a permis de masquer la croix de fermeture de excel et sur le site Excel download un code pour désactiver le clic droit de la souris (merci à .JM27).
Il me reste à masquer la barre des tâches et, là aussi, j'ai trouvé un code, mais qui ne répond que partiellement à ce que je souhaite et, de plus, appliquer ce code sans comprendre son fonctionnement ne me paraît pas idéal.

Tout ce long discours pour faire appel à qui pourrait m'orienter vers l'accès à un tutoriel ou à un cours (en ligne ou un livre) sur l'utilisation des API en vba.
Merci d'avance. :)
 

jmfmarques

XLDnaute Accro
Bonjour

J'aime beaucoup les fonctions de l'Api de Windows, mais n'en fais surtout pas utilisation depuis VBA, qui n'est pas fait pour cela.
J'aurais beaucoup à dire sur de telles démarches (utilisation des fonctions de l'Api de Windows depuis VBA/Excel), mais ne veux pas polémiquer.

Pour ce qui est de ta demande (cacher la barre d'état) : ne cherche pas midi (ton appli) à 14 heures (des fonctions de l'API) et utilise tout simplement la propriété displaystatusbar de l'objet application ...
 

jedry

XLDnaute Nouveau
Bonsoir dysorthographie,
Je ne me suis pas étendu sur ce sujet pour ne pas rajouter de la longueur à mon message.
En fait, actuellement, les éléments inhibés sont bien évidemment restitués quand on quitte mon programme. C'est justement mon problème concernant le code qui masque le barre des tâches, car cette barre ne réapparaît pas lors du retour au bureau Windows 10. Il faut désactiver l'onglet prévu à cet effet dans les paramètres.
 

Staple1600

XLDnaute Barbatruc
Bonsoir le fil,

Vers l'accès à un tutoriel ou à un cours (en ligne ou un livre) sur l'utilisation des API en vba.
La maison mère (réflexe 1)

[aparté]
Hommage au Schtroumpf grognon ;)
Je suis utilisateur d'Excel (j'ai payé ma licence)
Je n'aime pas qu'on touche à mon interface, j'estime être en droit d'utiliser mon Excel comme je l'entends et ce avec n'importe quel classeur.
Si ton appli devait être ouvert dans mon Excel sur mon PC, je rends grâce à celui-ci, car je peux ouvrir un classeur sans activer les macros.
Et O joie, inhiber toute coercition liberticide qui apparaîtrait dans le code VBA.
Je suis un utilisateur d'Excel et personne ne touche à mon Ruban ou à quoique ce soit d'autre!
J'aime pas les rubans.
[/aparté]
 

jedry

XLDnaute Nouveau
Bonjour

J'aime beaucoup les fonctions de l'Api de Windows, mais n'en fais surtout pas utilisation depuis VBA, qui n'est pas fait pour cela.
J'aurais beaucoup à dire sur de telles démarches (utilisation des fonctions de l'Api de Windows depuis VBA/Excel), mais ne veux pas polémiquer.

Pour ce qui est de ta demande (cacher la barre d'état) : ne cherche pas midi (ton appli) à 14 heures (des fonctions de l'API) et utilise tout simplement la propriété displaystatusbar de l'objet application ...

Bonsoir jmfmarques,
Merci pour l'intérêt que tu as apporté à ma demande, mais ce que je souhaite masquer c'est la barre des tâches et pas la barre d'état, cette dernière est cachée dans mon programme par l'instruction VBA prévue à cet effet.
Pour la barre des tâches il n'y a, à mon humble connaissance pas d'instruction VBA et d'après ce que j'ai pu lire il faut passer par les API.
 

jmfmarques

XLDnaute Accro
mais ce que je souhaite masquer c'est la barre des tâches et pas la barre d'état,
Ah oui (lu trop vite).
Mais dans ce cas, c'est aux paramètres que l'utilisateur à choisis pour la configuration de Windows, que tu t' "attaques". Avec des conséquences qui pourront générer l'ire du propriétaire de la machine concernée, notamment si :
- l'utilisateur passe d'une application à l'autre alors que la barre de tâches (dont il pourrait avoir l'utilité) n'est plus là pendant que toi, tu en as inhibé l'apparition. Ire encore plus grande si l'une de ses applications en cours, autre que Excel, affiche quelque chose dans la barre des tâches pendant son exécution, etc ...
- l'une des applications en cours (la tienne ou toute autre) "plante" le système pour toute raison (erreur ou dépassement de mémoire disponible, etc ...); Ou encore tout bêtement une simple interruption de l'alimentation (y compris du fait tout bête d'un disjoncteur).
Il lui faudrait alors, s'il sait le faire et a conscience de ce qu'il se passe, remettre manuellement les paramètres d'origine; et s'il est un utilisateur peu "initié", il lui faudra demander de l'aide ...
- et je te laisse alors deviner ce qu'il se passerait s'il dérangeait alors un responsable informatique , lequel découvrirait la cause de ce "ramdam".
Et je ne parle même pas des mesures que prendrait alors un responsable informatique excédé, mesures parmi lesquelles : l'inhibition totale de toute modification des paramètres de configuration, autre que depuis un compte administrateur et en tant qu'administrateur ...
A toi de voir, maintenant... :)
 
Dernière édition:

dysorthographie

XLDnaute Accro
Bonjour,
je ne pensais pas ouvrir un débat sur le sujet, mais il est judicieux de l'aborder avant que tu livre ton application aux utilisateurs!

en fait si tu veux une interface personnalisé tu gagneras du temps et la désapprobation de tes utilisateur en t'orientant vers Visual Studio Community!
 

patricktoulon

XLDnaute Barbatruc
re
Bonjour le fil Robert ,jmfmarques
ben moi je vais a contre sens comme d'habitude ;)

version 1
je la donne parce que je l'ai gardé mais je l'apprécie moins car le displayfullscreen est facilement contournable( je l'ai encore dis très récemment);)
donc
VB:
'**************************************************************************************
'                           Application fullscreen (No Taskbar(systray))
'
'Auteur: patricktoulon sur Developpez.com
'version 1.0
'Date version:24/09/2014
' masquage des displaybars et scrolls et tabs
'------------------------------------------------------------------------------------
'masquage reel de la barre des tache Windows(systray)avec ((SHAppBarMessage))
'**************************************************************************************
Private Type RECT: Left As Long: Top As Long: Right As Long: Bottom As Long: End Type
#If vba7 Then
Private Declare ptrsafe Function SHAppBarMessage Lib "shell32" (ByVal dwMessage As Long, pData As tasKBarData) As Long
Private Type tasKBarData: cbSize As Long: hwnd As Longptr: uCallbackMessage As Long: uEdge As Long: rc As RECT: lParam As Long: End Type
#Else
Private Declare Function SHAppBarMessage Lib "shell32" (ByVal dwMessage As Long, pData As tasKBarData) As Long
Private Type tasKBarData: cbSize As Long: hwnd As Long: uCallbackMessage As Long: uEdge As Long: rc As RECT: lParam As Long: End Type
#End If

'pour le get state = &H4 argument dwMessage
'pour le set state = &HA argument dwMessage
'pour AUTOHIDE = &H1 pour application a pData
'pour ALWAYSONTOP = &H2 pour application a pData

Sub FullOrNotFullscreen1()
    Dim BtaskDATA As tasKBarData, App As Application
    Set App = Application
    With App
        .ScreenUpdating = False
        .DisplayFullScreen = Not .DisplayFullScreen
        .DisplayFormulaBar = Not .DisplayFullScreen
        .DisplayStatusBar = Not .DisplayFullScreen
    End With

    With ActiveWindow
        .DisplayHeadings = Not App.DisplayFullScreen
        .DisplayHorizontalScrollBar = Not App.DisplayFullScreen
        .DisplayVerticalScrollBar = Not App.DisplayFullScreen
        .DisplayWorkbookTabs = Not App.DisplayFullScreen
    End With

    'masque ou affiche la taskbar
    BtaskDATA.cbSize = Len(BtaskDATA)    'memo les parametres
    SHAppBarMessage &H4, BtaskDATA    'capture les DATAS de la taskbar
    BtaskDATA.lParam = Array(&H2, &H1)(Abs(App.DisplayFullScreen))   'change le parametre dans les data de la taskbar
    SHAppBarMessage &HA, BtaskDATA    ' applique les nouveau parametre a la taskbar


End Sub

version 2
version que je préfère car des que le ruban est masqué ben il est masqué et tu peux faire ce que tu veux tant qu'on le remet pas ben walouh walouh!!!!
VB:
'**************************************************************************************
'                           Application fullscreen (No Taskbar(systray))
'
'Auteur: patricktoulon sur Developpez.com
'version 2.0
'Date version:10/03/2015
'------------------------------------------------------------------------------------
'je ne me sert pas du Application.displayfullscreen(contournable de plein de facon)
'mais du masquage du ruban avec une macro xl4
'------------------------------------------------------------------------------------
' masquage des displaybars et scrolls et tabs
'------------------------------------------------------------------------------------
'masquage reel de la barre des tache Windows(systray)avec ((SHAppBarMessage))
'**************************************************************************************
Private Type RECT: Left As Long: Top As Long: Right As Long: Bottom As Long: End Type
#If vba7 Then
Private Declare ptrsafe Function SHAppBarMessage Lib "shell32" (ByVal dwMessage As Long, pData As tasKBarData) As Long
Private Type tasKBarData: cbSize As Long: hwnd As Longptr: uCallbackMessage As Long: uEdge As Long: rc As RECT: lParam As Long: End Type
#Else
Private Declare Function SHAppBarMessage Lib "shell32" (ByVal dwMessage As Long, pData As tasKBarData) As Long
Private Type tasKBarData: cbSize As Long: hwnd As Long: uCallbackMessage As Long: uEdge As Long: rc As RECT: lParam As Long: End Type
#End If
'pour le get state = &H4 argument dwMessage
'pour le set state = &HA argument dwMessage
'pour AUTOHIDE = &H1 pour application a pData
'pour ALWAYSONTOP = &H2 pour application a pData





Sub FullOrNotFullscreen2()
    Dim BtaskDATA As tasKBarData, App As Application
    Set App = Application

    With App
        .ScreenUpdating = False
        .WindowState = Array(xlMaximized, xlNormal)(Abs(.WindowState = xlMaximized))
        boolbool = .WindowState = xlMaximized

        .DisplayFormulaBar = Not boolbool
        .DisplayStatusBar = Not boolbool
        .ExecuteExcel4Macro "SHOW.TOOLBAR(""Ribbon""," & Array("True", "False")(Abs(.WindowState = xlMaximized)) & ")"
    End With

    With ActiveWindow
        .DisplayHeadings = Not boolbool
        .DisplayHorizontalScrollBar = Not boolbool
        .DisplayVerticalScrollBar = Not boolbool
        .DisplayWorkbookTabs = Not boolbool
    End With
    'masque ou affiche la taskbar
    BtaskDATA.cbSize = Len(BtaskDATA)    'memo les parametres
    SHAppBarMessage &H4, BtaskDATA    'capture les DATAS de la taskbar
    BtaskDATA.lParam = Array(&H2, &H1)(Abs(boolbool))   'change le parametre dans les data de la taskbar
    SHAppBarMessage &HA, BtaskDATA    ' applique les nouveau parametre a la taskbar


End Sub
vérifier les déclarations 64 perso je ne peux tester les versions 64 j'en veux pas ;)
testé sur 2007 et 2013 en 32 sur W7 64
pour les deux version on lance la sub et on la relance (c'est une sorte de bascule ((oui/non)))


Pour ce qui est des bouton de la caption de l'application
utiliser l'api setwindowlongA
VB:
'déclaration 32 bits
Private Declare Function SetWindowLongA Lib "user32" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

sub test
SetWindowLongA Application.hwnd, -16, &H94C00080
end sub

heu....ok je sort :D;)
 
Dernière édition:

jedry

XLDnaute Nouveau
Ah oui (lu trop vite).
Mais dans ce cas, c'est aux paramètres que l'utilisateur à choisis pour la configuration de Windows, que tu t' "attaques". Avec des conséquences qui pourront générer l'ire du propriétaire de la machine concernée, notamment si :
- l'utilisateur passe d'une application à l'autre alors que la barre de tâches (dont il pourrait avoir l'utilité) n'est plus là pendant que toi, tu en as inhibé l'apparition. Ire encore plus grande si l'une de ses applications en cours, autre que Excel, affiche quelque chose dans la barre des tâches pendant son exécution, etc ...
- l'une des applications en cours (la tienne ou toute autre) "plante" le système pour toute raison (erreur ou dépassement de mémoire disponible, etc ...); Ou encore tout bêtement une simple interruption de l'alimentation (y compris du fait tout bête d'un disjoncteur).
Il lui faudrait alors, s'il sait le faire et a conscience de ce qu'il se passe, remettre manuellement les paramètres d'origine; et s'il est un utilisateur peu "initié", il lui faudra demander de l'aide ...
- et je te laisse alors deviner ce qu'il se passerait s'il dérangeait alors un responsable informatique , lequel découvrirait la cause de ce "ramdam".
Et je ne parle même pas des mesures que prendrait alors un responsable informatique excédé, mesures parmi lesquelles : l'inhibition totale de toute modification des paramètres de configuration, autre que depuis un compte administrateur et en tant qu'administrateur ...
A toi de voir, maintenant... :)

Bonjour jmfmarques
Merci pour cette longue réponse à laquelle je ne m'attendais pas.
Tes remarques sont pertinentes, mais mon programme n'est pas une application commerciale. Il est destiné à gérer le déroulement d'un concours amateur de jeu de cartes, il fonctionne depuis plusieurs années, il permet le redémarrage et la reprise du jeu en cours en cas d'arrêt inopiné du PC, je cherche seulement à l'améliorer, justement pour répondre au souhait de l'utilisateur qui ne recherche que la simplicité et pour qui la barre des tâches représente un risque de perturbation.
Précision narcissique, je programme modestement pour me distraire, j'ai 86 ans ...
Merci encore de ta réponse.
Cordialement
 

jedry

XLDnaute Nouveau
re
Bonjour le fil Robert ,jmfmarques
ben moi je vais a contre sens comme d'habitude ;)

version 1
je la donne parce que je l'ai gardé mais je l'apprécie moins car le displayfullscreen est facilement contournable( je l'ai encore dis très récemment);)
donc
VB:
'**************************************************************************************
'                           Application fullscreen (No Taskbar(systray))
'
'Auteur: patricktoulon sur Developpez.com
'version 1.0
'Date version:24/09/2014
' masquage des displaybars et scrolls et tabs
'------------------------------------------------------------------------------------
'masquage reel de la barre des tache Windows(systray)avec ((SHAppBarMessage))
'**************************************************************************************
Private Type RECT: Left As Long: Top As Long: Right As Long: Bottom As Long: End Type
#If vba7 Then
Private Declare ptrsafe Function SHAppBarMessage Lib "shell32" (ByVal dwMessage As Long, pData As tasKBarData) As Long
Private Type tasKBarData: cbSize As Long: hwnd As Longptr: uCallbackMessage As Long: uEdge As Long: rc As RECT: lParam As Long: End Type
#Else
Private Declare Function SHAppBarMessage Lib "shell32" (ByVal dwMessage As Long, pData As tasKBarData) As Long
Private Type tasKBarData: cbSize As Long: hwnd As Long: uCallbackMessage As Long: uEdge As Long: rc As RECT: lParam As Long: End Type
#End If

'pour le get state = &H4 argument dwMessage
'pour le set state = &HA argument dwMessage
'pour AUTOHIDE = &H1 pour application a pData
'pour ALWAYSONTOP = &H2 pour application a pData

Sub FullOrNotFullscreen1()
    Dim BtaskDATA As tasKBarData, App As Application
    Set App = Application
    With App
        .ScreenUpdating = False
        .DisplayFullScreen = Not .DisplayFullScreen
        .DisplayFormulaBar = Not .DisplayFullScreen
        .DisplayStatusBar = Not .DisplayFullScreen
    End With

    With ActiveWindow
        .DisplayHeadings = Not App.DisplayFullScreen
        .DisplayHorizontalScrollBar = Not App.DisplayFullScreen
        .DisplayVerticalScrollBar = Not App.DisplayFullScreen
        .DisplayWorkbookTabs = Not App.DisplayFullScreen
    End With

    'masque ou affiche la taskbar
    BtaskDATA.cbSize = Len(BtaskDATA)    'memo les parametres
    SHAppBarMessage &H4, BtaskDATA    'capture les DATAS de la taskbar
    BtaskDATA.lParam = Array(&H2, &H1)(Abs(App.DisplayFullScreen))   'change le parametre dans les data de la taskbar
    SHAppBarMessage &HA, BtaskDATA    ' applique les nouveau parametre a la taskbar


End Sub

version 2
version que je préfère car des que le ruban est masqué ben il est masqué et tu peux faire ce que tu veux tant qu'on le remet pas ben walouh walouh!!!!
VB:
'**************************************************************************************
'                           Application fullscreen (No Taskbar(systray))
'
'Auteur: patricktoulon sur Developpez.com
'version 2.0
'Date version:10/03/2015
'------------------------------------------------------------------------------------
'je ne me sert pas du Application.displayfullscreen(contournable de plein de facon)
'mais du masquage du ruban avec une macro xl4
'------------------------------------------------------------------------------------
' masquage des displaybars et scrolls et tabs
'------------------------------------------------------------------------------------
'masquage reel de la barre des tache Windows(systray)avec ((SHAppBarMessage))
'**************************************************************************************
Private Type RECT: Left As Long: Top As Long: Right As Long: Bottom As Long: End Type
#If vba7 Then
Private Declare ptrsafe Function SHAppBarMessage Lib "shell32" (ByVal dwMessage As Long, pData As tasKBarData) As Long
Private Type tasKBarData: cbSize As Long: hwnd As Longptr: uCallbackMessage As Long: uEdge As Long: rc As RECT: lParam As Long: End Type
#Else
Private Declare Function SHAppBarMessage Lib "shell32" (ByVal dwMessage As Long, pData As tasKBarData) As Long
Private Type tasKBarData: cbSize As Long: hwnd As Long: uCallbackMessage As Long: uEdge As Long: rc As RECT: lParam As Long: End Type
#End If
'pour le get state = &H4 argument dwMessage
'pour le set state = &HA argument dwMessage
'pour AUTOHIDE = &H1 pour application a pData
'pour ALWAYSONTOP = &H2 pour application a pData





Sub FullOrNotFullscreen2()
    Dim BtaskDATA As tasKBarData, App As Application
    Set App = Application

    With App
        .ScreenUpdating = False
        .WindowState = Array(xlMaximized, xlNormal)(Abs(.WindowState = xlMaximized))
        boolbool = .WindowState = xlMaximized

        .DisplayFormulaBar = Not boolbool
        .DisplayStatusBar = Not boolbool
        .ExecuteExcel4Macro "SHOW.TOOLBAR(""Ribbon""," & Array("True", "False")(Abs(.WindowState = xlMaximized)) & ")"
    End With

    With ActiveWindow
        .DisplayHeadings = Not boolbool
        .DisplayHorizontalScrollBar = Not boolbool
        .DisplayVerticalScrollBar = Not boolbool
        .DisplayWorkbookTabs = Not boolbool
    End With
    'masque ou affiche la taskbar
    BtaskDATA.cbSize = Len(BtaskDATA)    'memo les parametres
    SHAppBarMessage &H4, BtaskDATA    'capture les DATAS de la taskbar
    BtaskDATA.lParam = Array(&H2, &H1)(Abs(boolbool))   'change le parametre dans les data de la taskbar
    SHAppBarMessage &HA, BtaskDATA    ' applique les nouveau parametre a la taskbar


End Sub
vérifier les déclarations 64 perso je ne peux tester les versions 64 j'en veux pas ;)
testé sur 2007 et 2013 en 32 sur W7 64
pour les deux version on lance la sub et on la relance (c'est une sorte de bascule ((oui/non)))


Pour ce qui est des bouton de la caption de l'application
utiliser l'api setwindowlongA
VB:
'déclaration 32 bits
Private Declare Function SetWindowLongA Lib "user32" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

sub test
SetWindowLongA Application.hwnd, -16, &H94C00080
end sub

heu....ok je sort :D;)

Bonjour patricktoulon, bonjour le fil,
Je ne m'attendais pas à susciter un tel intérêt à ma demande !
Ta réponse ne m'est pas directement adressée, mais je t'en remercie et je vais m'atteler à tenter de l'exploiter pour masquer cette satanée barre des tâches.
Je sens que je vais encore passer quelques heures sur mon PC, heureusement je ne suis pas tenu à la rentabilité, je programme pour entretenir mes neurones, ne souris pas, je suis à l'aube des 86 balais ...
Bien cordialement
 

dysorthographie

XLDnaute Accro
bonjour Patrick,
en fait je ne pense pas qu'il faille interdire ce genre de pratique, mais j'estime qu'il faut collecter les information irréversible afin de les restituer à la sortie de l'application!

dysorthographie à dit:
Juste pour ma gouverne, quand l'utilisateur quitte Excel tu rétablis ce que tu as inhibé ou l'utilisateur doit poser la question à Excel download?
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 364
Messages
2 087 624
Membres
103 624
dernier inscrit
PhilduMorvan