Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Session

13 réponses
Avatar
Pascal
Bonjour,
Win XP SP3
Excel 2007

Je cherche à forcer Excel à n'ouvrir qu'une instance à la fois.
J'ai bien sur posée cette question aux Gourous du forum Excel, mais Excel ne
peut pas faire cela.
Existe t'il une solution via xp?
Merci de vos réponses
Pascal

3 réponses

1 2
Avatar
Lotre
Bonjour,

...compléments...

dans un module de macro
( pas dans le code d'une feuille ou de thisWorkbook)

on met ça :
======================================================= Public Sub boucle()
delai = "00:00:03"
Dim Prochaine As Date
A = Time
Prochaine = A + TimeValue(delai)

If ActiveWorkbook.VBProject.VBE.MainWindow.Visible = True Then
' Sortie d'urgence
ThisWorkbook.Saved = True
Application.Quit
End If

Application.OnTime EarliestTime:=Prochaine, _
Procedure:="boucle", Schedule:=True

End Sub
======================================================= et on lance "boucle" dans Workbook_open()

Toute les 3 secondes, un test est fait
si l'éditeur de VBA est ouvert,
le classeur est fermé sans sommation.

Bien sûr le délai est modifiable ( variable "delai" )


Cela, combiné avec l'événement
App_WorkbookOpen
du message précédent, devrait convenir ...

Mais ... ....
Dans un environnement "très hostile", de telles protections ne servent
à rien
car un bricolo habile trouvera une astuce pour passer...

Tout dépend du contexte concret ...

Où est le classeur ( serveur, poste, ... )
comment les utilisateurs y accèdent-ils ?
etc etc etc ....

On peut envisager d'ouvrir le classeur en désactivant les macros
et dans ce cas ... seule la protection pas mot de passe est active

On peut imaginer l'ouverture autrement .... :

Ouvrir avec notepad ou wordpad
un classeur contenant des macros
montre qu'une partie du code est "presque lisible"
et, avec un peu d'habitude, analysable ...


Bref ... si la sécurité est vraiment importante,
il faut dévelloper autrement qu'en VBA....
Faire un "AddIn" ( fichier XLL ) est une méthode plus "solide" :
Le classeur lui même ne contient pas de code...

Bien sûr c'est mieux mais nettement moins facile ;o)))))))))

HB
Avatar
Pascal
Merci pour toutes ces lignes de code
Je vais en adapter certaines

Mais celle qui me parait le plus adaptée est:
If ActiveWorkbook.VBProject.VBE.MainWindow.Visible = True Then
' Sortie d'urgence
ThisWorkbook.Saved = True
Application.Quit
End If
Application.OnTime EarliestTime:=Prochaine, _
Procedure:="boucle", Schedule:=True

Avec un délai de 00:00:00.5+ Protection du VBA

Par contre je ne savais pas que l'on pouvait voir un code via NotePad???

Donc je vais me pencher sur la dernière partie de ton message Classeur XXL.

Merci
Pascal

"Lotre" a écrit dans le message de news:

Bonjour,

...compléments...

dans un module de macro
( pas dans le code d'une feuille ou de thisWorkbook)

on met ça :
======================================================= > Public Sub boucle()
delai = "00:00:03"
Dim Prochaine As Date
A = Time
Prochaine = A + TimeValue(delai)

If ActiveWorkbook.VBProject.VBE.MainWindow.Visible = True Then
' Sortie d'urgence
ThisWorkbook.Saved = True
Application.Quit
End If

Application.OnTime EarliestTime:=Prochaine, _
Procedure:="boucle", Schedule:=True

End Sub
======================================================= > et on lance "boucle" dans Workbook_open()

Toute les 3 secondes, un test est fait
si l'éditeur de VBA est ouvert,
le classeur est fermé sans sommation.

Bien sûr le délai est modifiable ( variable "delai" )


Cela, combiné avec l'événement
App_WorkbookOpen
du message précédent, devrait convenir ...

Mais ... ....
Dans un environnement "très hostile", de telles protections ne servent à
rien
car un bricolo habile trouvera une astuce pour passer...

Tout dépend du contexte concret ...

Où est le classeur ( serveur, poste, ... )
comment les utilisateurs y accèdent-ils ?
etc etc etc ....

On peut envisager d'ouvrir le classeur en désactivant les macros
et dans ce cas ... seule la protection pas mot de passe est active

On peut imaginer l'ouverture autrement .... :

Ouvrir avec notepad ou wordpad
un classeur contenant des macros
montre qu'une partie du code est "presque lisible"
et, avec un peu d'habitude, analysable ...


Bref ... si la sécurité est vraiment importante,
il faut dévelloper autrement qu'en VBA....
Faire un "AddIn" ( fichier XLL ) est une méthode plus "solide" :
Le classeur lui même ne contient pas de code...

Bien sûr c'est mieux mais nettement moins facile ;o)))))))))

HB


Avatar
Lotre
Bonjour,

Pascal wrote:
Merci pour toutes ces lignes de code
Je vais en adapter certaines


(...)

Avec un délai de 00:00:00.5+ Protection du VBA



Une demi-seconde ?

Attention de ne pas trop ralentir l'ensemble...
Il me semble que 5 secondes sont amplement suffisantes :
Il faut au vilain curieux le temps de
- saisir le mot de passe de protection de VBA
obtenu pas un "crackage" quelconque....
puis
- d'ouvrir un module ...

alors ... même en allant vite ...
(surtout si le mot de passe est compliqué à saisir !!!)

D'ailleurs, les prgm qui crackent les mots de passe
des projets VBA ont parfois du mal
avec les mots de passe très long ...
donc ....


Par contre je ne savais pas que l'on pouvait voir un code via
NotePad???



En voit pas mal de choses en effet ...
Certains "éditeurs de texte" sont même peut-être plus pratiques...

Donc je vais me pencher sur la dernière partie de ton message
Classeur XXL.



Reste le problème de la désactivation des macros ....


Sur certains site dédiés à Excel on trouve des exemples de fichier XLL
mais la fabriquation de telles librairies est "nettement plus
technique" que le VBA ....

A+ et bon courage...

HB
1 2