Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
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 !
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. 🙂
Le problème demeure en ce qui concerne la modification de paramètres de configuration Windows en cas d'interruption inopinée (quelle que puisse en être la raison, y compris matérielle).
Mais s'il s'agit de ta machine, ma foi : aucun problème autre que la nécessité d'intervenir ensuite pour la restituer, cette barre des tâches.
Bonsoir,
Juste pour ma gouverne, quand l'utilisateur quitte Excel tu rétablis ce que tu as hinibé ou l'utilisateur doit poser la question à Excel download?
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 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.
[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é]
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.
Bonsoir Stapple 1600,
Merci pour l'information, je vais m'appliquer à la mettre à profit dès demain matin, il semble y avoir du pain sur la planche, mais le travail ne me fait pas peur !
Bien cordialement.
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,
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!
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
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
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
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
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?
- 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