protection feuille

Darnel

XLDnaute Impliqué
Bonjour à vous tous


voilà, j'ai une base de donnée qui est alimentée via une fiche de saisie.
sur ma base de donnée, j'ai mis des boutons Flottant (voir lien suivant)
Lien supprimé

avant de mettre en place ces boutons, il y avait des boutons 'formulaire'
et maintenant se sont des boutons 'commande'

mon problème est le suivant : ma base de données était protégées avec une protection de feuille activée et désactivée pour permettre l'enregistrement de nouvelles données et empecher les utilisateurs de tout foutre en l'air

pour cela j'utilisais le code :
Sheets('Données').Select
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True

et ActiveSheet.Unprotect
pour désactiver la chose.

mais depuis boutons flottants, toutes les macros qui contenaient ce code ne passent plus et pour que cela fonctionne il faut que je désactive les lignes de code sitées ci dessus.

l'erreur qui s'affiche est la suivante :
erreur 1004 : 'la méthode unprotect de la class worksheet a échoué'

si quelqu'un entrevoi le pourkoi de la chose, je veu bien un petit coup de main.
sinon, une solution qui me permette de garder les boutons flottants et une feuille protégée se serai cool.

PS: je sais que ca fait exigent, mais c'est pour mon taff et si les solutions pouvaient m'éviter de restructurer tout mon fichier ça serait cool.
j'y ai passer pas mal de temps (plusieurs semaines (je suis autodidacte donc un peu long à la détente) et j'ai pas envie de voir tout ce que j'ai fait devoir etre changer, refait, ou autre...
s'il vous plais, aidez moi, il faut que cette feuille soit protégée.


Merci d'avance à tous ceux qui vont répondre et tous les autres aussi.

Message édité par: darnel, à: 14/03/2006 10:56

Message édité par: Darnel, à: 14/03/2006 11:59
 

Darnel

XLDnaute Impliqué
bonjour pierrejean

merci de ton aide

je n' ai pas encore essayer, mais l'erreur apparait des que le code est soit
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
ou bien
ActiveSheet.Unprotect
donc je veux bien essayer pour protect mais l'autre je voi pas.
je tien à préciser que je suis sur excel 97 (
:eek: )et que je n'ai pas choisi mon ordinateur :p ni les logiciels qui l'équipent...
(un de mes collègues vient de se faire remplacer son PC il y a 2 semaines et enfin on lui a changer son P 233MHz avec 64 Mo de RAM et un DD de 3 Go contre un P IV et 512 de DDR

il était tps
mais moi c'est pas encore fait donc j'attend mais mon cas est moins désespéré ( P III avec win NT (mais excel 97 :angry: ))

bref pour vous dire que je m'amuse pas trop et que je compte vraiment sur votre aide et vos super capacités à résoudre les problèmes
merci à vous tous
 

Charly2

Nous a quittés en 2006
Repose en paix
Bonjour Darnel et pierrejean, bonjour à toutes et à tous :)

Tu peux placer ce code dans ThisWorkbook (à adapter, of course) :

Option Explicit

Const Msg = 'Cette cellule ne peut être modifiée'

Dim InEvent As Boolean

Private Sub Workbook_SheetChange(ByVal Sh As Object, _
          ByVal Target As Excel.Range)
  '
  ' Si un événement est déjà en cours de traitement, on sort
  If Not InEvent Then
    '
    ' Sinon, on indique par InEvent qu'une procédure événementielle
    ' est en cours d'exécution
    InEvent = True
    '
    ' Si la cellule est verrouillée
    If Target.Locked Then
      '
      ' alors on annule la modif
      Application.Undo
      '
      ' Et on prévient l'utilisateur
      MsgBox Msg, vbCritical + vbOKOnly
    End If
    '
    ' InEvent redevient False à la sortie
    InEvent = False
  End If

End Sub

Tiens-nous au courant.

A+ ;)
 

Darnel

XLDnaute Impliqué
bonjour charly2 et merci de t'intersser à mon problème

en gros si je comprend bien ce qu'il faut que je fasse, je doit mettre ce code dans thisworkbook, tel qu'il est sauf que je remplace les noms des feuilles et que je tappe les messages que je veux mettre...


sinon juste une precision, ce code revien à dire que des que je suis sur la feuille en question, elle est vérouillée et le reste du temps elle ne l'est pas? est ce que ca va me permettre via d'autre macro activées par des boutons sur d'autres feuilles de m'enregistrer mes modifs dans ma base de donnée et empecher quelqu'un de saisir directement des trucs dans la base de données. parceque les booleens, on a déjà essyer de m'expliquer leur fonctionnement mais la ca va pas être évident pôur moi de tout comprendre, je ne supporte pas de pas savoir exactement ce que je fais et de pas etre capable de le refaire sans faire un copier coller...


encore un truc... je sais je suis lourd mais j'essai de comprendre :pinch: et c'est pas facile : dans ton code, que représente cette ligne, et dois je y modifier un truc?

MsgBox Msg, vbCritical + vbOKOnly



merci de ton aide.
je ne manquerai pas de vous tenir informé
 

Charly2

Nous a quittés en 2006
Repose en paix
re,

Darnel écrit:
en gros si je comprend bien ce qu'il faut que je fasse, je doit mettre ce code dans thisworkbook, tel qu'il est sauf que je remplace les noms des feuilles et que je tappe les messages que je veux mettre...

Tu places effectivement ce code dans ThisWorkbook mais c'est une procédure événementielle qui est activée à chaque modification, dans une feuille quelconque du classeur, d'une cellule.

Je n'ai pas utilisé le paramètre Sh mais si tu souhaites limiter l'action à une feuille déterminée, il te suffit de tester Sh.Name par exemple.


sinon juste une precision, ce code revien à dire que des que je suis sur la feuille en question, elle est vérouillée et le reste du temps elle ne l'est pas? est ce que ca va me permettre via d'autre macro activées par des boutons sur d'autres feuilles de m'enregistrer mes modifs dans ma base de donnée et empecher quelqu'un de saisir directement des trucs dans la base de données. parceque les booleens, on a déjà essyer de m'expliquer leur fonctionnement mais la ca va pas être évident pôur moi de tout comprendre, je ne supporte pas de pas savoir exactement ce que je fais et de pas etre capable de le refaire sans faire un copier coller...

En fait, je ne verrouille pas ta feuille, mais j'empêche la modification des cellules dont la protection est 'verrouillée' (à voir dans Format / Cellule).

Si tu souhaites travailler sur les feuilles de ton classeur (ou celle que tu auras ciblée comme expliqué précédemment), alors il vaut mieux déclarer la variable InEvent dans un module comme ceci :

Public InEvent As Boolean

Ainsi, à chaque fois que tu souhaiteras effectuer des modifs, il suffira de placer avant ton code :

InEvent = True

Et de réactiver la procédure Private Sub Workbook_SheetChange par un simple :

InEvent = False


encore un truc... je sais je suis lourd mais j'essai de comprendre :pinch: et c'est pas facile : dans ton code, que représente cette ligne, et dois je y modifier un truc?

MsgBox Msg, vbCritical + vbOKOnly

Cette ligne permet d'afficher un message d'erreur. Comme tu l'as déjà deviné, tu peux modifier la valeur de Msg, déclarée en constante en début de module, pour afficher un message plus adapté que celui que j'ai prévu.

Pour les boutons, j'ai pensé qu'un simple bouton OK suffisait (pas d'annulation possible, comme quand la feuille est verrouillée) avec un signe d'alerte du type croix blanche sur fond rouge (vbCritical).

En espérant avoir été clair :ermm:

A+ ;)

Message édité par: Charly2, à: 14/03/2006 15:41
 

Darnel

XLDnaute Impliqué
Salut Charly2

je te remercie de ta patience et de tes explications claires et précises, cependant, je pense que mon niveau de vb reste pour l'instant trop limité pour tout comprendre, mais je suis sur la bonne voie ... en tout cas je pense... bon ben j'espere ... vais-je y arriver ??? :unsure: pas sur pour l'instant
tout ca pour te dire que je commence à peine à comprendre l'effet de la macro: si j'ai bien tout lu, je verrouille mes cellules (arf hypra simple B) ) et la macro fait que si je modifi la ou les cellules en direct sur la feuille, ca me met un message m'interdisant de modifier, et si c'est par le biai d'une autre macro actionnée par un bouton (événementielle ?... :unsure: ) ca accepte la modif .
bon si c'est ca ton trucc'est cool.
sinon ce qui m'embete c'est quand meme de pas comprendre pourquoi tout marchais avec bouton formulaire et marche plus avec bouton commande, alors que j'ai pas changer le code de mes macro, mais bon, tu m'enlève déjà une belle épine du pied.
merci
 

Charly2

Nous a quittés en 2006
Repose en paix
Salut Darnel,

Pour ce qui est des boutons créés avec la barre d'outils Commandes, peut-être pourrais-tu essayer, en mode création (icône équerre/règle/crayon de la barre Visual Basic) de mettre leur propriété TakeFocusOnClick à False.

Je sais que chez moi (XL97), je ne peux pas travailler sur les cellules ou les feuilles si je n'ai pas pris cette précaution...

A+ ;)
 

Darnel

XLDnaute Impliqué
Re:protection feuille (résolu)

Françaises, Français
Belges, Belges
Exceliennes excellentes,
Excellents Exceliens,

Forum chéri

Très cher Charly2

Après maintes discussions où tu as fait preuve d'une grande sagesse et d'une patience à toute épreuve envers un nigaud de première catégorie, je précise qu'il s'agit de moi, tu viens enfin de m'enlever le clou de 60 qui se trouvait fiché dans la partie la plus basse de moi même puisqu'elle touche le sol, autrement dit mon pied.
Quelle joie pour moi, après avoir réactivé toutes mes lignes de code concernées par le bug qui m'empechait de tourner non pas 'en rond' mais 'rond', de voir que tout allait de nouveau circulairement.
je suis ravis que ton brillant esprit ait pu rencontrer le mien encore que la politesse aurait voulu que je formula cette phrase en précisant que c'est moi qui ait eu la chance de te rencontrer et non pas le contraire, enfin bref on s'est compris là ? Non?...
Tout ça pour dire que tu as solutionner mon problème, que tu as eclairer ma lanterne, ensoleillée ma morne et triste existence par ton éclaire de lucidité en ce qui concerne excel 97.

Je te quitte le coeur gros de ne pouvoir mieux te remercier. Après trois semaines de galère, un fil resté sans réponse et un certain nombre de post sur ce fil, je suis ravis de t'offrir ce message un tant soit peu inspiré de Pierre Desproges (que je salue au passage et qu'il ne me tienne pas rigueur des fautes d'orthographes de là où il nous observe) sans qui je saurai pas causer le Français comme c'est que lui il le parlait.
je te remercie donc car il suffisait bien de changer la valeur de TakeFocusOnClick pour que ça marche

bonne journée à toi que ta vie soit longue et prospère.

Message édité par: darnel, à: 15/03/2006 12:20
 

Charly2

Nous a quittés en 2006
Repose en paix
Re:protection feuille (résolu)

Mon très cher Bastien,

Je vois que tu as de bonnes références mais je vais peut-être te faire découvrir un des plus grands philosophes du 20ème siècle avec celui dont tu dont tu t'inspiras dans tes plus récents propos.

J'ai nommé : Pierre DAC

[ul][li]La véritable modestie consiste à ne jamais se prendre pour moins que ce qu'on estime qu'on croit qu'on vaut.[/li]

[li]N'importe quoi vaut souvent mieux que rien du tout, et réciproquement, de même que quiconque n'est pas souvent quelqu'un, et inversement.[/li]

[li]Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. Ecouter.[/li]

[li]Si la fortune vient en dormant, ça n'empêche pas les emmerdements de venir au réveil.[/li]

[li]Quand à la Saint Médard il tombe de la pluie, de la neige, de la grêle, des hallebardes et de la suie, on est tranquille pour quarante jours plus tard, parce que, à part tout ça, qu'est-ce que vous voulez qu'il tombe ? Oui, je sais, mais enfin c'est plutôt rare.[/li]

[li]Si la semaine de 40 heures était réduite de moitié, les fins de mois auraient lieu tous les quinze jours.[/li]

[li]L'homme accompli et complet est celui qui sait suffisamment se retourner dans la vie pour faire face, au risque de se trouver nez à nez avec ce qu'il a dans le dos.[/li]

[li]En hiver, on dit souvent ' Fermez la porte, il fait froid dehors' et quand la porte est fermée, il fait toujours aussi froid dehors ![/li][/ul]

Source : http://pierredac.free.fr/Pensees1.htm

:) :) :p :silly: :woohoo:
 

Darnel

XLDnaute Impliqué
Re:protection feuille (résolu)

cher Charly2
je connais en effet Pierre Dac pour ses sitations, mais aussi pour un sketch avec un certain Francis Blanche.
Il me semble que la phrase: L'avenir, c'est du passé en préparation est également de Pierre Dac dont je n'oserais jamais n'écrire que les initiales... ;)
j'ajouterai parmis les bonnes references du 20 ème siècle l'inevitable coluche (loin du registre d'un desproges, mais avec des idées et des tournures loins de ne rien signifier)

il doit y en avoir d'autres évidemment mais je ne vais pas en faire la Liste.
Il est à regretter que les quelques uns que nous avons siter soient morts et sans aucune relève de leur finesse ou niveau de français.

si tu aime coluche je te conseil 'et vous trouvez ça drole' ou l'on retrouve un pacquet de sitations forts sympatiques du genre

-on fait pas d'aveugle sans casser des yeux
-le capitalisme c'est l'exploitaion de l Homme par l'homme et le syndicalisme c'est le contraire.
-il a des idées sur tout, enfin il a surtout des idées ...

etc, etc
 

Darnel

XLDnaute Impliqué
Re:protection feuille (résolu)

Juste comme ca, pour se marrer, un petit lien vers un fil que j'avais ouvert et ou Thierry m'a repondu avec un fichier amusant comme tout et qui revient sur ce dont on parlait précédement

Lien supprimé

++
 

Discussions similaires

Statistiques des forums

Discussions
312 332
Messages
2 087 367
Membres
103 528
dernier inscrit
maro