OVH Cloud OVH Cloud

liaison avec Excel

3 réponses
Avatar
Christian
Bonjour,

Dans mon application écrite (une application compta-financière) en VB 6
(sp5), j'envoie pas mal de données vers un tableur Excel qui s'ouvre avec
"Application.Workbook" etc... Afin que l'utilisateur ne puisse pas
intervenir sur le tableau (uniquement que pour la consultation des données,
pas la modification), j'ai protégé la feuille en écriture, désactiver le
menu ainsi que les barres d'outils etc... Je n'ai aucun soucis.

Seule chose que je souhaiterais désactiver également, ce sont les
raccourcis claviers d'Excel ainsi que (et surtout) les boutons agrandir et
fermer d'Excel. La fermeture des classeurs Excel ouverts avec mon
application ne se fera que par des menus ou événements de ladite
application.

Cependant, je n'ai pas trouvé la solution à cela et cela m'arrangerait
de bien pouvoir programmer ça.

Quelqu'un a-t-il une idée là-dessus et me donner des conseils etc... ?

Merci d'avance.

3 réponses

Avatar
le_troll
Bonjour, je n'ai pas la réponse, mais avec tout ce que t'as fait,
n'aurais-tu pas été plus vite en présentant dans un objet Tab... de VB, le
résultat que tu affiches dans Excel, ce qui aurait le mérite de ne pas
rendre VB dépendant des versions d'excel ?

--
Merci, @+, bye, Joe
troll75 AROBASE iFrance POINT com
------------------------------------------
Ce message est plein de virus "certifiés"
Le_Troll, éleveur de Trolls depuis César, qui disait:
Avec une hache, celui qui tient le manche a toujours raison !
------------------------------------------


"Christian" a écrit dans le message de news:
411cddf6$0$291$
Bonjour,

Dans mon application écrite (une application compta-financière) en VB


6
(sp5), j'envoie pas mal de données vers un tableur Excel qui s'ouvre avec
"Application.Workbook" etc... Afin que l'utilisateur ne puisse pas
intervenir sur le tableau (uniquement que pour la consultation des


données,
pas la modification), j'ai protégé la feuille en écriture, désactiver le
menu ainsi que les barres d'outils etc... Je n'ai aucun soucis.

Seule chose que je souhaiterais désactiver également, ce sont les
raccourcis claviers d'Excel ainsi que (et surtout) les boutons agrandir et
fermer d'Excel. La fermeture des classeurs Excel ouverts avec mon
application ne se fera que par des menus ou événements de ladite
application.

Cependant, je n'ai pas trouvé la solution à cela et cela m'arrangerait
de bien pouvoir programmer ça.

Quelqu'un a-t-il une idée là-dessus et me donner des conseils etc... ?

Merci d'avance.




Avatar
Hervé
Bonjour Christian,
Comme l'a dit Le_Troll, je pense que tu ne devrais pas utiliser Excel car il
peut être très frustrant pour tes utilisateurs (surtout pour ceux qui sont
abitués à Excel) de se retrouver devant une feuille de calcul avec une
impossibilité d'intervenir. Un FlexGrid sur une feuille de ton appli serait
peut être un peu plus indiqué, enfin je pense.
Pour les raccourcis claviers, regarde du coté de "Application.OnKey"
Pour griser le menu, regarde ceci :

Private Declare Function GetWindowLong _
Lib "user32" _
Alias "GetWindowLongA" ( _
ByVal hwnd As Long, _
ByVal nIndex As Long) As Long

Private Declare Function SetWindowLong _
Lib "user32" _
Alias "SetWindowLongA" ( _
ByVal hwnd As Long, _
ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long

Private Declare Function GetSystemMenu _
Lib "user32" ( _
ByVal hwnd As Long, _
ByVal bRevert As Long) As Long

Private Declare Function DeleteMenu _
Lib "user32" ( _
ByVal hMenu As Long, _
ByVal nPosition As Long, _
ByVal wFlags As Long) As Long


Private Sub GriserCroix()
Dim Griser As Boolean
Griser = False
DeleteMenu GetSystemMenu( _
Application.hwnd, Griser), 6, 1024
End Sub

Private Sub GriserMin()
Dim I As Long
Dim Griser As Boolean
Griser = False
With Application
I = DeleteMenu(GetSystemMenu( _
.hwnd, Griser), -4064, 0)
I = GetWindowLong(.hwnd, -16)
I = I Xor 131072
SetWindowLong .hwnd, -16, I
End With
End Sub

Private Sub GriserMax()
Dim I As Long
Dim Griser As Boolean
Griser = True
With Application
I = DeleteMenu(GetSystemMenu( _
.hwnd, Griser), -4048, 0)
I = GetWindowLong(.hwnd, -16)
I = I Xor 65536
SetWindowLong .hwnd, -16, I
End With
End Sub

Hervé.

"Christian" a écrit dans le message news:
411cddf6$0$291$
Bonjour,

Dans mon application écrite (une application compta-financière) en VB


6
(sp5), j'envoie pas mal de données vers un tableur Excel qui s'ouvre avec
"Application.Workbook" etc... Afin que l'utilisateur ne puisse pas
intervenir sur le tableau (uniquement que pour la consultation des


données,
pas la modification), j'ai protégé la feuille en écriture, désactiver le
menu ainsi que les barres d'outils etc... Je n'ai aucun soucis.

Seule chose que je souhaiterais désactiver également, ce sont les
raccourcis claviers d'Excel ainsi que (et surtout) les boutons agrandir et
fermer d'Excel. La fermeture des classeurs Excel ouverts avec mon
application ne se fera que par des menus ou événements de ladite
application.

Cependant, je n'ai pas trouvé la solution à cela et cela m'arrangerait
de bien pouvoir programmer ça.

Quelqu'un a-t-il une idée là-dessus et me donner des conseils etc... ?

Merci d'avance.




Avatar
Alain CROS
Bonjour.

Dans le module ThisWorkbook du classeur XL

Private Declare Function FindWindow& Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName$, ByVal lpWindowName$)
Private Declare Function SetWindowLong& Lib "user32" Alias "SetWindowLongA" _
(ByVal Hwnd&, ByVal nIndex&, ByVal dwNewLong&)
Private Declare Function GetWindowLong& Lib "user32" Alias "GetWindowLongA" _
(ByVal Hwnd&, ByVal nIndex&)
Private Declare Function FlashWindow& Lib "user32" _
(ByVal Hwnd&, ByVal bInvert&)
Private Const WS_SYSMENU& = &H80000, GWL_STYLE& = -16&

Private Sub Workbook_Open()
SupMenuSystem
BloqueHotKey
End Sub

Private Sub SupMenuSystem()
Dim Hwnd&
Hwnd = FindWindow("XLMAIN", Application.Caption)
SetWindowLong Hwnd, GWL_STYLE, GetWindowLong(Hwnd, GWL_STYLE) Xor WS_SYSMENU
FlashWindow Hwnd, False
End Sub

Private Sub BloqueHotKey()
Dim K, J, I&
Dim Learray(1& To 16&) As String
For I = 1& To 16&
Learray(I) = "{F" & I & "}"
Next I
On Error Resume Next
For Each K In Array("^", "%", "+^", "+%", "^%", "+^%")
For I = 32& To 255&
Application.OnKey K & Chr$(I), ""
Next I
For Each J In Learray
Application.OnKey K & J, ""
Next J
Next K
For Each J In Learray
Application.OnKey J, ""
Next J
On Error GoTo 0
End Sub

Alain CROS

"Christian" a écrit dans le message de news: 411cddf6$0$291$
Bonjour,

Dans mon application écrite (une application compta-financière) en VB 6
(sp5), j'envoie pas mal de données vers un tableur Excel qui s'ouvre avec
"Application.Workbook" etc... Afin que l'utilisateur ne puisse pas
intervenir sur le tableau (uniquement que pour la consultation des données,
pas la modification), j'ai protégé la feuille en écriture, désactiver le
menu ainsi que les barres d'outils etc... Je n'ai aucun soucis.

Seule chose que je souhaiterais désactiver également, ce sont les
raccourcis claviers d'Excel ainsi que (et surtout) les boutons agrandir et
fermer d'Excel. La fermeture des classeurs Excel ouverts avec mon
application ne se fera que par des menus ou événements de ladite
application.

Cependant, je n'ai pas trouvé la solution à cela et cela m'arrangerait
de bien pouvoir programmer ça.

Quelqu'un a-t-il une idée là-dessus et me donner des conseils etc... ?

Merci d'avance.