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

Feuille protégée contre effacement

13 réponses
Avatar
josephb
Bonjour / Bonsoir

j'ai un classeur dont une feuille sert de "gabarit" pour le traitement
de données importées d'après une autre application. Elle contient entre
autres des listes de validation.
Cette feuille est sécurisée par procédure Workbook_SheetChange et
Workbook_SheetSelection contre toute modification et on ne peut que la
dupliquer (automatiquement) pour travailler sur copie qui, elle, est
libre pour l'utilisateur.

Par contre, je ne trouve pas la stratégie comment protéger cette feuille
gabarit contre un effacement malencontreux de l'utilisateur.
Une (petite) recherche sur le oueb ne m'a pas ouvert de piste.

Auriez-vous une solution ?

Autre question : comment remplacer le principe de la liste de validation
en feuille par une proc VBA, parce que là aussi, je crains que
l'utilisateur, en effaçant des lignes entières sur sa feuille de
travail, efface aussi tout ou partie des listes de validation.

Excel 98 Mac et Excel 2000 Win.

Merci et bon WE à tous.

--
J. B.

10 réponses

1 2
Avatar
michdenis
Bonjour,

En principe, si ta feuille est protégée, on ne peut pas effacer des données,
ni faire des copier-coller dans la feuille, ni faire disparaître des listes de validation.

Sinon, tu dois expliquer davantage comme tu arrives à faire des modifications
dans une feuille protégée.





"Joseph B." a écrit dans le message de groupe de discussion :
1j5wcc2.1b2hk7s11pl85wN%
Bonjour / Bonsoir

j'ai un classeur dont une feuille sert de "gabarit" pour le traitement
de données importées d'après une autre application. Elle contient entre
autres des listes de validation.
Cette feuille est sécurisée par procédure Workbook_SheetChange et
Workbook_SheetSelection contre toute modification et on ne peut que la
dupliquer (automatiquement) pour travailler sur copie qui, elle, est
libre pour l'utilisateur.

Par contre, je ne trouve pas la stratégie comment protéger cette feuille
gabarit contre un effacement malencontreux de l'utilisateur.
Une (petite) recherche sur le oueb ne m'a pas ouvert de piste.

Auriez-vous une solution ?

Autre question : comment remplacer le principe de la liste de validation
en feuille par une proc VBA, parce que là aussi, je crains que
l'utilisateur, en effaçant des lignes entières sur sa feuille de
travail, efface aussi tout ou partie des listes de validation.

Excel 98 Mac et Excel 2000 Win.

Merci et bon WE à tous.

--
J. B.
Avatar
josephb
Bonjour MichDenis

michdenis wrote:

En principe, si ta feuille est protégée, on ne peut pas effacer des données,
ni faire des copier-coller dans la feuille, ni faire disparaître des listes
de validation.



je vais essayer d'être plus clair :

je n'ai pas peur que l'on modifie la feuille "Gabarit" ; la protection
plus le code la protègent des man½uvres indésirables, (sauf
intentionnellement, car il n'y a pas de MdPasse), mais je voudrais
empêcher qu'on puisse la supprimer !
Y a-t-il une autre méthode que de "protéger la structure du classeur" ?
parce que si non, ça va devenir très compliqué de gérer les
protections/déprotections (et les erreurs générées) lors des
interventions utilisateur...

Pour les listes de validation (source dans 2 colonnes masquées) que l'on
retrouve dans les feuilles dupliquées (et entièrement déprotégées) à
partir du "Gabarit", une suppression ou effacement de ligne entière peut
les détruire. D'où ma question de néophite : possible de faire ça en VBA
plutôt qu'en feuille Excel ?

Merci de ton intérêt

--
J. B.
Avatar
michdenis
Si tu veux empêcher de la suppression de la feuille, tu
peux protéger "le classeur", élément Structure.

Attention, dans Excel, si tu as des utilisateurs qui décident
de "bousiller" ton application, ce n'est pas la protection
des feuilles, ou du projet VBA qui vont les empêcher d'arriver
à leur fin. Il existe déjà des petits programmes sur internet
qui font sauter la sécurité du classeur et de ton travail
en une fraction de seconde !

Tout le travail que tu fais dans cette direction est un coup d'épée
dans l'eau ! C'est peut être navrant, mais c'est la réalité.

Si on supprime la ligne au complet, où veux-tu créer la liste de
validation ? Concernant une liste de validation, si tu utilises
l'enregistreur de macro, il te fera ta macro presque complètement .







"Joseph B." a écrit dans le message de groupe de discussion :
1j5wh86.1yp46oo1i1dxq8N%
Bonjour MichDenis

michdenis wrote:

En principe, si ta feuille est protégée, on ne peut pas effacer des données,
ni faire des copier-coller dans la feuille, ni faire disparaître des listes
de validation.



je vais essayer d'être plus clair :

je n'ai pas peur que l'on modifie la feuille "Gabarit" ; la protection
plus le code la protègent des man½uvres indésirables, (sauf
intentionnellement, car il n'y a pas de MdPasse), mais je voudrais
empêcher qu'on puisse la supprimer !
Y a-t-il une autre méthode que de "protéger la structure du classeur" ?
parce que si non, ça va devenir très compliqué de gérer les
protections/déprotections (et les erreurs générées) lors des
interventions utilisateur...

Pour les listes de validation (source dans 2 colonnes masquées) que l'on
retrouve dans les feuilles dupliquées (et entièrement déprotégées) à
partir du "Gabarit", une suppression ou effacement de ligne entière peut
les détruire. D'où ma question de néophite : possible de faire ça en VBA
plutôt qu'en feuille Excel ?

Merci de ton intérêt

--
J. B.
Avatar
LSteph
Bonjour,

>> En principe...

..mais de plus si ces utilisateur peuvent ouvrir le classeur qui la contient
et risquent de supprimer cette feuille c'est qu'ils ont accès au
classeur en écriture pour pouvoir l'enregistrer, sinon ils ne pourront
rien en faire
donc rien ne les empêcherait de le supprimer complètement ou
s'il ne veulent supprimer que cette feuille
copier le reste dans un nouveau classeur qu'ils enregistreront en
écrasant celui d'origine ou après l'avoir supprimé.

Cordialement.

(Il n'existe pas de protection qui ne soit pas contournable)

--
lSteph

Joseph B. a écrit :
Bonjour MichDenis

michdenis wrote:

En principe, si ta feuille est protégée, on ne peut pas effacer des données,
ni faire des copier-coller dans la feuille, ni faire disparaître des listes
de validation.



je vais essayer d'être plus clair :

je n'ai pas peur que l'on modifie la feuille "Gabarit" ; la protection
plus le code la protègent des man½uvres indésirables, (sauf
intentionnellement, car il n'y a pas de MdPasse), mais je voudrais
empêcher qu'on puisse la supprimer !
Y a-t-il une autre méthode que de "protéger la structure du classeur" ?
parce que si non, ça va devenir très compliqué de gérer les
protections/déprotections (et les erreurs générées) lors des
interventions utilisateur...

Pour les listes de validation (source dans 2 colonnes masquées) que l'on
retrouve dans les feuilles dupliquées (et entièrement déprotégées) à
partir du "Gabarit", une suppression ou effacement de ligne entière peut
les détruire. D'où ma question de néophite : possible de faire ça en VBA
plutôt qu'en feuille Excel ?

Merci de ton intérêt



Avatar
LSteph
..j'entends , supprimé depuis l'explorateur Windows!

LSteph a écrit :
Bonjour,

>> En principe...

..mais de plus si ces utilisateur peuvent ouvrir le classeur qui la
contient
et risquent de supprimer cette feuille c'est qu'ils ont accès au
classeur en écriture pour pouvoir l'enregistrer, sinon ils ne pourront
rien en faire
donc rien ne les empêcherait de le supprimer complètement ou
s'il ne veulent supprimer que cette feuille
copier le reste dans un nouveau classeur qu'ils enregistreront en
écrasant celui d'origine ou après l'avoir supprimé.

Cordialement.

(Il n'existe pas de protection qui ne soit pas contournable)

--
lSteph

Joseph B. a écrit :
Bonjour MichDenis

michdenis wrote:

En principe, si ta feuille est protégée, on ne peut pas effacer des
données,
ni faire des copier-coller dans la feuille, ni faire disparaître des
listes
de validation.



je vais essayer d'être plus clair :

je n'ai pas peur que l'on modifie la feuille "Gabarit" ; la protection
plus le code la protègent des man½uvres indésirables, (sauf
intentionnellement, car il n'y a pas de MdPasse), mais je voudrais
empêcher qu'on puisse la supprimer !
Y a-t-il une autre méthode que de "protéger la structure du classeur" ?
parce que si non, ça va devenir très compliqué de gérer les
protections/déprotections (et les erreurs générées) lors des
interventions utilisateur...
Pour les listes de validation (source dans 2 colonnes masquées) que l'on
retrouve dans les feuilles dupliquées (et entièrement déprotégées) à
partir du "Gabarit", une suppression ou effacement de ligne entière peut
les détruire. D'où ma question de néophite : possible de faire ça en VBA
plutôt qu'en feuille Excel ?

Merci de ton intérêt




Avatar
josephb
Bonjour LSteph

LSteph wrote:

(Il n'existe pas de protection qui ne soit pas contournable)



J'entends bien (je "bidouille" l'informatique depuis 1990, donc je ne me
fais aucune illusion à ce sujet), mais pas inutile de le rappeler.
Mon souci, à chaque fois que je "programme" quelque chose c'est d'éviter
à l'utilisateur de se trouver dans une situation inextricable (pour lui
qui ne sait pas comment ça a été programmé) parce que je n'aurais pas
anticipé une "fausse bonne" man½uvre possible de sa part.
L'utilisateur doit pouvoir ajouter des feuilles (par copie programmée du
gabarit) et en supprimer... SAUF ce gabarit, voilà tout.
Il se trouve que je suis "tout jeune" en VBA pour Excel, donc je tatonne
encore dans les stratégies que ce couple peut offir pour donner une
interface utilisateur sécurisée.

Sauf si tu as une autre stratégie à me suggérer, je crois que je vais
masquer la feuille sensible.

Merci pour ta contribution.
Cordialement,

--
J. B.
Avatar
josephb
michdenis wrote:

Attention, dans Excel, si tu as des utilisateurs qui décident
de "bousiller" ton application, ce n'est pas la protection
des feuilles, ou du projet VBA qui vont les empêcher d'arriver
à leur fin.



Bien sûr, mais je ne parle pas de malveillance, juste d'étourderie, ou
méconnaissance, de l'utilisateur que je voudrais éviter à l'avance.

Finalement je crois que je vais utiliser les propriétés de feuille

xlSheetHidden
xlSheetVeryHidden
xlSheetVisible

pour mettre à l'abri le "gabarit" d'une suppression malencontreuse quand
il y aura des dizaines (centaines) de feuilles représentant des mois de
travail dans ce classeur.
Rassure-toi, de toute façon le serveur central en Raid(?) nous assure
des sauvegardes incrémentées.
Ce n'est pas la perte de données qui me soucie, c'est de sécuriser
l'interface de cette modeste "application" contre une fausse man½uvre.

Si tu as une autre stratégie que cacher la feuille à me proposer, je
suis curieux de tout ;-)

Si on supprime la ligne au complet, où veux-tu créer la liste de
validation ?


C'est bien là ma question... je cherche l'alternative, si elle existe ?

Concernant une liste de validation, si tu utilises
l'enregistreur de macro, il te fera ta macro presque complètement .



Ce que j'aurais fait pour un pb analogue, dans un autre environnement,
c'est que j'aurais mis mes items de liste dans une varible non valatile,
à l'abri de tout effacement.
Avec Excel et VBA, je ne sais pas faire. Une piste ?

Merci de tes remarques.
Cordialement,
--
J. B.
Avatar
michdenis
La méthode qui suit ne convient pas à la version Excel 2007.

Comme tu travailles à partir d'une version antérieure, je te
propose ceci pour le plaisir :

Tu peux supprimer la commande "Supprimer..."

Tu copies ces 2 procédures dans le ThisWorkbook de ton classeur.
Tu enregistres, tu fermes et ré-ouvres ton classeur.
'-----------------------
Private Sub Worksheet_Activate()
EnleverLaFonctionSupprimerLignesEtColonnes
End Sub
'-----------------------
Private Sub Worksheet_Deactivate()
RemettreLaFonctionSupprimerCommeAvant
End Sub
'-----------------------

Tu copies tout ce qui suit dans un module Standard :

'-------------------------------------------------
Sub EnleverLaFonctionSupprimerLignesEtColonnes()

'déclaration des variables
Dim Cbar As CommandBar, D As CommandBarControl
Dim C As CommandBarControl

On Error Resume Next
For Each Cbar In Application.CommandBars
For Each C In Cbar.Controls
If C.Caption = "&Supprimer..." Then
C.OnAction = "Bonjour"
End If
Err = 0
For Each D In C.Controls
Err = 0
If D.Caption = "&Supprimer..." Then
D.OnAction = "Bonjour"
End If
Next
Next
Next
End Sub
'-------------------------------------------------
Sub Bonjour()

'Chaque fois que tu vas cliquer sur le bouton
'supprimer, c'est cette macro qui va s'excécuter
'Tu peux inscrire le code que tu veux.
MsgBox "Cette commande n'est pas disponible"

End Sub
'-------------------------------------------------

Sub RemettreLaFonctionSupprimerCommeAvante()

'déclaration des variables
Dim Cbar As CommandBar, D As CommandBarControl
Dim C As CommandBarControl

On Error Resume Next
For Each Cbar In Application.CommandBars
For Each C In Cbar.Controls
If C.Caption = "&Supprimer..." Then
C.OnAction = ""
End If
Err = 0
For Each D In C.Controls
Err = 0
If D.Caption = "&Supprimer..." Then
D.OnAction = ""
End If
Next
Next
Next
End Sub
'-------------------------------------------------




"Joseph B." a écrit dans le message de groupe de discussion :
1j5xfrc.khhxem5tpny0N%
michdenis wrote:

Attention, dans Excel, si tu as des utilisateurs qui décident
de "bousiller" ton application, ce n'est pas la protection
des feuilles, ou du projet VBA qui vont les empêcher d'arriver
à leur fin.



Bien sûr, mais je ne parle pas de malveillance, juste d'étourderie, ou
méconnaissance, de l'utilisateur que je voudrais éviter à l'avance.

Finalement je crois que je vais utiliser les propriétés de feuille

xlSheetHidden
xlSheetVeryHidden
xlSheetVisible

pour mettre à l'abri le "gabarit" d'une suppression malencontreuse quand
il y aura des dizaines (centaines) de feuilles représentant des mois de
travail dans ce classeur.
Rassure-toi, de toute façon le serveur central en Raid(?) nous assure
des sauvegardes incrémentées.
Ce n'est pas la perte de données qui me soucie, c'est de sécuriser
l'interface de cette modeste "application" contre une fausse man½uvre.

Si tu as une autre stratégie que cacher la feuille à me proposer, je
suis curieux de tout ;-)

Si on supprime la ligne au complet, où veux-tu créer la liste de
validation ?


C'est bien là ma question... je cherche l'alternative, si elle existe ?

Concernant une liste de validation, si tu utilises
l'enregistreur de macro, il te fera ta macro presque complètement .



Ce que j'aurais fait pour un pb analogue, dans un autre environnement,
c'est que j'aurais mis mes items de liste dans une varible non valatile,
à l'abri de tout effacement.
Avec Excel et VBA, je ne sais pas faire. Une piste ?

Merci de tes remarques.
Cordialement,
--
J. B.
Avatar
josephb
michdenis wrote:

La méthode qui suit ne convient pas à la version Excel 2007.

Comme tu travailles à partir d'une version antérieure, je te
propose ceci pour le plaisir :

Tu peux supprimer la commande "Supprimer..."



Procédure événementielle (OnAction) interceptée, ça m'ouvre des
perspectives très excitantes :-))

Mais sur mon Excel98/Mac, ça marche pô :-(
Ça m'énerve !!!!
Il n'y a pas que ça d'ailleurs qui ne marche pas comme ça devrait, donc
je n'en tire pas de conclusion,
J'essaierai lundi au boulot avec Excel 2000 sur Xp-pro...

En tout cas vraiment merci beaucoup pour ce code dont je vais tâcher de
faire le meilleur usage.
Cordialement.

--
J. B.
Avatar
LSteph
Bonjour,

j'essayais juste de te dire qu'il me semble inutile de vouloir empêcher
de supprimer cette feuille puisqu'on pourra quand même
en t'expliquant pourquoi et comment?

Sinon je t'aurais proposé une autre stratégie mais le point que j'ai
évoqué me semble prioritairement incontournable.

Si par contre ce n'est pas pour éviter à tout prix que l'on puisse
supprimer cette feuille de là où elle est rangée mais simplement
pour éviter une suppression accidentelle, une sauvegarde ou copie
régulière me semblerait y palier.

Cordialement.

--
lSteph




Joseph B. a écrit :
Bonjour LSteph

LSteph wrote:

(Il n'existe pas de protection qui ne soit pas contournable)



J'entends bien (je "bidouille" l'informatique depuis 1990, donc je ne me
fais aucune illusion à ce sujet), mais pas inutile de le rappeler.
Mon souci, à chaque fois que je "programme" quelque chose c'est d'éviter
à l'utilisateur de se trouver dans une situation inextricable (pour lui
qui ne sait pas comment ça a été programmé) parce que je n'aurais pas
anticipé une "fausse bonne" man½uvre possible de sa part.
L'utilisateur doit pouvoir ajouter des feuilles (par copie programmée du
gabarit) et en supprimer... SAUF ce gabarit, voilà tout.
Il se trouve que je suis "tout jeune" en VBA pour Excel, donc je tatonne
encore dans les stratégies que ce couple peut offir pour donner une
interface utilisateur sécurisée.

Sauf si tu as une autre stratégie à me suggérer, je crois que je vais
masquer la feuille sensible.

Merci pour ta contribution.
Cordialement,



1 2