Bloquer une cellule...? [Résolu]

Morgan Kermor 20 Messages postés vendredi 9 décembre 2005Date d'inscription 25 janvier 2006 Dernière intervention - 9 déc. 2005 à 18:54 - Dernière réponse : Morgan Kermor 20 Messages postés vendredi 9 décembre 2005Date d'inscription 25 janvier 2006 Dernière intervention
- 14 déc. 2005 à 10:14
hello...

Savez vous comment bloquer une cellule si une condition est réaliser...?
Et bien sûr tout ceci par macro...!!!

Thx all experts
Afficher la suite 

10 réponses

ScSami 1490 Messages postés mercredi 5 février 2003Date d'inscription 3 décembre 2007 Dernière intervention - 13 déc. 2005 à 19:04
+3
Utile
Je ne suis pas un expert VBA, mais en VB, je touche. Pour progresser, il suffit de bien comprendre les bases et de savoir lire et utiliser les aides. Il faut donc être curieux et commencer, pour le VBA, par explorer le fin fond des softs. Pour ce faire, rien de tel qu'une petite personnalisation des barres d'outils (en pensant bien à saver le Normal.dot dans lequel tous ces paramètres sont stockés). Rien de tel pour découvrir rapidement toutes les fonctions d'un soft de la suite Office. Mais il te faut aussi un peu d'imagination pour extrapoler a partir de peu d'infos. Par exemple, la fonction nomée "Coller les instances" (que j'ai inventé pour l'exemple)... Déjà, si tu ne comprends pas ce que sont des instances, donne toi la peinne de regarder dans le dictionnaire. Ensuite, remet la fonction dans son contexte en te posant toujours ces questions : "Qu'est-ce qu'elle est censée faire ? Sur quoi elle doit agir ?" et non "Comment fonctionne-t-elle ?" !!! Bref, en somme, pour progresser, faut se démerder tout seul dans la plupart des cas... Heureusement qu'il y a quelques sites - bien trop rares à mon gout - comme Codes-Sources...

Bon, reprennons ton code...

Private Sub Combobox1_Change()
ActiveSheet.Unprotect motDePasse
Select Case combobox1.Value
Case "Evolution du CA en % "
Range("E20") = "Evolution du CA en % "
Range("G20") = Range("G207")
Range("H20") = Range("H207")
Range("I20") = Range("I207")
Range("J20") = Range("J207")
Range("K20") = Range("K207")
Range("L20") = Range("L207")
Range("M20") = Range("M207")
Range("N20") = Range("N207")
Range("G19:N19").Locked = False
Case "En Valeur"
Range("E20") = "En Valeur"
Range("G20:N20").ClearContents
Range("G19:N19").ClearContents
Range("G19:N19").Locked = True
End Select
ActiveSheet.Protect motDePasse
End Sub

Ceci évitera d'avoir à entrer ton motDePasse à chaque fois!

Mais pour éviter que ce même mot de passe ne se voyent dans le script VBA (le code, le programme quoi!) par d'autres utilisateurs, tu peux le "crypter" ou plutôt, le "camoufler" dans des lignes de code incompréhensibles au commun des mortels que seul toi comprendra.
Mais en réalité, cela ne sera pas nécéssaire si tu t'assures que le document sera toujours protégé lors de son ouverture (et donc, lors de sa fermeture!!!).
Donc, oubli mon précédent message puisque tu n'as pas encore le "niveau" pour comprendre.

Mais n'hésite jamais à user et abuser de l'aide du VBA. Utilise là pour connaître les arguments des fonctions Protect et Unprotect car il n'y a pas que le motDePasse comme argument!!!

Et si tu ne sais pas ce qu'est une "fonction" ou une "instruction", cherche un peu puis demande-le-nous si tu ne comprends toujours pas... Il y aura toujours quelqu'un pour t'aider ici, sur VBFrance

Enjoy

<hr size ="2" width="100%">
( Si une réponse vous convient, cliquez sur le bouton "Réponse acceptée". )
Cette réponse vous a-t-elle aidé ?  
ScSami 1490 Messages postés mercredi 5 février 2003Date d'inscription 3 décembre 2007 Dernière intervention - 11 déc. 2005 à 08:05
0
Utile
Le seul moyen est de jouer avec la propriété de verrouillage de la cellule puis de locker/délocker la feuille !
Autrement dit, il faut que la feuille soit verrouillée par défaut. Si ta condition est réalisée, pof, tu délock la feuille, tu change la propriété (cf. l'aide du VBA) de la cellule voulue puis tu relock la feuille.

Tout le problème se situant dans la gestion du mot de passe si la feuille devait être originellement protégée (sinon, ça ne pose aucun problème).

Enjoy

<hr size="2" width="100%">
( Si une réponse vous convient, cliquez sur le bouton "Réponse acceptée". )
Morgan Kermor 20 Messages postés vendredi 9 décembre 2005Date d'inscription 25 janvier 2006 Dernière intervention - 12 déc. 2005 à 10:32
0
Utile
Merci pour ta réponse Scsami..
Mais hélas le pb est que mon classeur et ma feuille doivent être prtégés...!?!
;-(
So, une autre idée...?
;-)
ScSami 1490 Messages postés mercredi 5 février 2003Date d'inscription 3 décembre 2007 Dernière intervention - 12 déc. 2005 à 16:59
0
Utile
Ben justement, c'est ce qu'il faut (que le classeur soit protégé) !!!
Je pense que ton problème se trouve au niveau des mots de pass...
Le fonction VBA de protection/déprotection accepte les mots de passe (enfin, de mémoire)! En revanche, si tu en change, tu te dois de le changer dans le code! C'est la seule contrainte... Qui peut encore être évitée si tu met, comme pour une compte web, 1 bouton "changer de mot de passe" avec l'ancien code et le nouveau... Enfin, c'est à voir de plus près... probs éventuels de sécurité...

Sinon, il n'y a pas d'autres solutions... du moins, moi, j'en vois pas!
A part... peut-être... via les procédures événmentielles du type "KeyDown" "KeyUp" "Validate" et cie. Mais faut pas en oublier...
Dedans, tu fais systématiquement un test :
If cellule active EST celle à protégée ALORS sort de la fonction et annule la frappe [dans certaines procs uniquement]

Bref, une bonne vieille protection manuelle d'antan bien lourde et bien rigide qui bug de partout

Enjoy

<hr size="2" width="100%">
( Si une réponse vous convient, cliquez sur le bouton "Réponse acceptée". )
Morgan Kermor 20 Messages postés vendredi 9 décembre 2005Date d'inscription 25 janvier 2006 Dernière intervention - 12 déc. 2005 à 17:32
0
Utile
lol...
en fait, je ne veux pas que la personne soit obliger de saisir un mot de passe à chak fois k la macro se réalise...
c'est ça mon problème...
;-(

alors une autre solution...?
ScSami 1490 Messages postés mercredi 5 février 2003Date d'inscription 3 décembre 2007 Dernière intervention - 13 déc. 2005 à 00:59
0
Utile
Ce n'est pas nécessaire avec les fonctions de verrouillage/déverrouillage !!!

WorkSheet.Unprotect arguments
Cells(x, y).Locked = True
WorkSheet.Protect arguments

J'ai l'impression que tu ne connais pas vraiment l'utilisation de la protection sous Office (et en particulier sous Excel donc) !

Voilà comment tout ça fonctionne :
Chaque cellule a une propriété "Locked" (Verrouillée) booléen (i.e. qui ne peut prendre comme valeur uniquement True ou False...). Par défaut, toutes les cellules ont cette propriété à True.
Mais cette propriété est totalement inutile tant que l'utilisateur, via le menu ou via un script VBA, n'active pas la protection.
Il ne faut donc pas confondre protection et verrouillage !!!
Une fois protégées, les cellules ayant leur attribut de verrouillage à True (coché) ne peuvent pas être modifiées alors que les autres le peuvent. Si l'utilisateur essai de modifier une cellule verrouillée lorsque la feuille ou le classeur est protégée un message standard d'avertissement et d'explication apparaît.
L'utilisateur peut protégée soit une feuille, soit un objet (graphique, image, ...), soit le classeur tout entier. Il a également la possibilité de mettre un mot de passe SANS QUE CE DERNIER SOIT NECESSAIRE. Autrement dit, on peut simplement protéger une feuille sans mot de passe - i.e. non pas pour une question de sécurité des données mais pour une question de sécurité des formules.

Ce qui permet, en outre, de protéger les cellules de formules lors de phase de saisies (dans les cellules non verrouillées donc).

Autrement dit, les arguments de fonctions .Protect et .Unprotect sont facultatifs... dont le mot de pass !!!

Donc, ma solution est la meilleur!

Sinon, tu peux toujours te prendre la tête à faire un truc tout bugé, lent et non fiable à la oldschooler :
Dans les procédures événementielles du style "KeyDown" "KeyPress" "DblClick" "Validate" et j'en passe, tester la cellule à protéger et sortir des procédures en annulant ce qui peut l'être - tel le caractère de KeyPress.
Mais là, gare à la galère... surtout en VBA !!!

Sinon, juste un petit mot :
Lorsque tu poses une question sur le forum, PENSE A TOUJOURS NOUS DONNER LA VERSION SOUS LAQUELLE TU TRAVAILLES !!! On est pas dans ta tête pour deviner avec quoi tu bosses !!! Et tu imagines bien qu'avec toutes ces versions et tous les langages BASIC (VBA 97, VBA ME, VB6, VB.NET, VBS, ..., ..., ...) les problèmes que tu peux avoir peuvent être spécifiques à ces mêmes versions!
Pense-y la prochaine fois ok. Sinon...

Enjoy
<hr size ="2" width="100%">
( Si une réponse vous convient, cliquez sur le bouton "Réponse acceptée". )
Morgan Kermor 20 Messages postés vendredi 9 décembre 2005Date d'inscription 25 janvier 2006 Dernière intervention - 13 déc. 2005 à 11:34
0
Utile
lol

Désolé...

J'espère ne pas t'avoir soûlé....
En fait, c'est juste que je suis obligé de mettre un mot de passe, et que personne ne doit l'avoir....
Sinon ma version... je travail avec le pack office 2000... Alors...?


Voilà ce à quoi j'avais pensé, et ça fonctionne, sauf qu'il faut que j'entre le mot de passe à chaque fois....


Private Sub Combobox1_Change()
ActiveSheet.Unprotect
Select Case combobox1.Value
Case "Evolution du CA en % "
Range("E20") = "Evolution du CA en % "
Range("G20") = Range("G207")
Range("H20") = Range("H207")
Range("I20") = Range("I207")
Range("J20") = Range("J207")
Range("K20") = Range("K207")
Range("L20") = Range("L207")
Range("M20") = Range("M207")
Range("N20") = Range("N207")
Range("G19:N19").Locked = False
Case "En Valeur"
Range("E20") = "En Valeur"
Range("G20:N20").ClearContents
Range("G19:N19").ClearContents
Range("G19:N19").Locked = True
End Select
ActiveSheet.Protect
End Sub

Mais j'ai l'impression qu'il n'y a pas de solution à mon problème...
Ou en fait, plus probable... je suis teubé et je ne capte pas les conseils qu'on me donne...
Sorry, I'm a newbe...
ScSami 1490 Messages postés mercredi 5 février 2003Date d'inscription 3 décembre 2007 Dernière intervention - 13 déc. 2005 à 17:55
0
Utile
Bien sûr, si tu mets le mot de passe du fichier dans la macro tout le monde pourra le voir... a condition qu'ils aient la curiosité de regarder la macro !!!
De plus, rien ne t'empêche de brouiller les pistes avec CHR(codeASCIIduCaractère) héhé !

Par Exemple :
Mot de Passe : A s P h A l T e
(cf. table des caractères ASCII dans l'aide du VBA)
Char => Code ASCII :
A => 97
s => 115
P => 90
h => 104
l => 108
T => 84
e => 101

MxTTY = CHR(115) & CHR(104) 'sh [Commentaires à ENLEVER A LA FIN]
... 'Instructions divers
MxTTZ = CHR(108) & CHR(101) 'le
...
MxTtX = CHR(97) & CHR(115) 'As
...
TTzX = Mid(MxTTY, Len(MxTTY) - 1,
Len(MxTTY)
) 'h
...
'AsPhA
MxTTT= MxTtX & CHR(90)
& TTzX
& Mid (MxTtX, Len(
MxTtX) -
1,
Len(MxTtX) -
1)

...
MxTTT=
MxTTT & MxTTZ 'AsPhA + le

...
'AsPhAl + T + e
MxTTT = Mid(MxTTT,
Len(MxTTT)
+ 1 - Len(MxTTT)
, Len(MxTTT) - 1) & CHR(84) & _
Mid(MxTTT, Len(MxTTT) - 1,
Len(MxTTT)
+ 1 - Len(MxTTT)
)

MotDePasse =
MxTTT

ActiveSheet.Protect MotDePasse

C'est ce qu'on appel gruger, mener les gens en bateau

Pi celui qui aura pigé ton mot de passe... ben... il l'aura bien mérité

De toute façon, la sécurité n'est jamais 100%.

Perso, c'est tout ce que je peux te proposer pour te soulager la tache (au lieu d'entrer manuellement le mot de passe à chaque fois!).

Pour le reste (ton code), c'est parfait!

Est-ce que ceci résous ton problème ?

Enjoy

<hr size="2" width="100%">
( Si une réponse vous convient, cliquez sur le bouton "Réponse acceptée". )
Morgan Kermor 20 Messages postés vendredi 9 décembre 2005Date d'inscription 25 janvier 2006 Dernière intervention - 13 déc. 2005 à 18:15
0
Utile
lol

Je suis très très content...merci ça à l'air super...
Mais en fait, j'ai rien compri

Enfin, si j'ai bien compris, cela met le mot de passe sans que sois obliger de le faire à chak fois...?
Et de ce fait, ne m'affiche pas la fenêtre "mot de passe"...?
Si c'est ça c génial... Mais a po tout compris...
Comment je fais pour l'intégrer dans la macro de base...?

Si c po indiscret, tu travailles sur vba depuis combien de temps...?
Il faut longtemps pour commencer, à avoir du niveau...?

Thx.
Morgan Kermor 20 Messages postés vendredi 9 décembre 2005Date d'inscription 25 janvier 2006 Dernière intervention - 14 déc. 2005 à 10:14
0
Utile
Super..!

Merci encore pour tout le temps que tu m'as consacré...!

Je commence à réussir quelques trucs, et à me familiariser avec la logique de vba...
Mais c'est vrai k je débute... moins d'un mois de recul...
Mais j'espère que dans kelk temps je serai à même d'aider les autres via le site...
Et pour ça je vais bosser dur...

Thx...
Tchuss

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.