Bouton vérouillage de feuille avec certaines cases déverouillées

KathRoz Messages postés 12 Date d'inscription jeudi 21 juillet 2011 Statut Membre Dernière intervention 26 juillet 2011 - 26 juil. 2011 à 08:11
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 26 juil. 2011 à 14:59
Bonjour à tous,
je suis une vrai débutante en VBA et j'ai une demande qui va surement paraitre très simple mais je n'y arrive pas du tout, même avec toutes les aides que je peux trouver sur internet.
Alors voilà mon problème:
J'ai un fichier Excel comprenant 7 onglets différents. Le fichier sera tout d'abord rempli par mon entreprise puis il doit être verrouillé par un appui sur un bouton mais il doit laisser certaines cases que le fournisseurs doit remplir déverrouillée pour le remplissage par celui-ci.
J'ai donc crée 2 boutons de commande ayant le code suivant:

Private Sub CommandButton1_Click()

Call locked

MsgBox "File locked!"

End Sub

Private Sub CommandButton2_Click()

Call unlocked

MsgBox "File unlocked!"

End Sub

Puis j'ai crée un module où je veux indiquer que le bouton lock verrouille avec un mot de passe mais que certaines cases restent déverrouillée et je ne sais pas comment faire. Même chose pour le bouton unlock.

Merci de votre aide.


KathRoz

22 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
26 juil. 2011 à 08:21
Bonjour,
As-tu lu cette discussion récente ?
La méthode est la même :
On déprotège tout
On dévérrouille ce que l'on veut rendre accessible
On reprotège tout.


____________________
Utiliser le bouton "REPONSE ACCEPTEE" sur une réponse exacte facilite les recherches ultérieures d'autres forumeurs. PENSEZ-Y SVP
0
KathRoz Messages postés 12 Date d'inscription jeudi 21 juillet 2011 Statut Membre Dernière intervention 26 juillet 2011
26 juil. 2011 à 08:52
Oui, mais le problème est que les cases qui doivent rester déverrouillée ne sont pas les mêmes sur chaque feuille, je pense que je ne peux donc pas utiliser le fonction ActiveSheet!


KathRoz
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
26 juil. 2011 à 09:50
je pense que je ne peux donc pas utiliser le fonction ActiveSheet!


Et qui te demande de copier un code totalement à l'identique ?
Qui t'empêche d'utiliser WorkSheets("nom_de_la_feuille") au lieu de (comme dans l'exemple) ActiveSheet ?
Personne ni rien !
____________________
Utiliser le bouton "REPONSE ACCEPTEE" sur une réponse exacte facilite les recherches ultérieures d'autres forumeurs. PENSEZ-Y SVP
0
KathRoz Messages postés 12 Date d'inscription jeudi 21 juillet 2011 Statut Membre Dernière intervention 26 juillet 2011
26 juil. 2011 à 10:01
Et bien heureusement que j'ai précisé que je débutais en VBA et donc que je ne connaissais rien...!

Merci tout de même.

KathRoz
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kari1987 Messages postés 1 Date d'inscription mardi 26 juillet 2011 Statut Membre Dernière intervention 26 juillet 2011
26 juil. 2011 à 10:15
Bonjour à tous,
je suis une vrai débutante en VB et que je ne connaissais rien...!

Merci tout de même.
kari
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
26 juil. 2011 à 10:24
Débutant, OK !
Mais si ton apperentissage doit ne se traduire que par des copies à l'identique, sans les comprendre, Pas OK du tout !
Commence par te pencher sur certains points indispensables. Une feuille est un objet. Un objet peut être défini comme on l'entend. Une feuille est un membre de la collection WorkSheets.
ActiveSheet n'est qu'un moyen plus pratique de désigner un membre de cette collection (ala feuille active).
Voilà. Tu as dans ce petit "baratin" plusieurs mots, sur lesquels je te conseille de te pencher de près, avant de continuer.
Tu as pour cela ton aide VBA, qui n'attend de toi qu'un seul geste.
C'est là le plus grand service que je puisse te rendre en toute amitié.

____________________
Utiliser le bouton "REPONSE ACCEPTEE" sur une réponse exacte facilite les recherches ultérieures d'autres forumeurs. PENSEZ-Y SVP
0
KathRoz Messages postés 12 Date d'inscription jeudi 21 juillet 2011 Statut Membre Dernière intervention 26 juillet 2011
26 juil. 2011 à 10:29
J'ai à présent deux problèmes:

Alors en prenant le code de l'autre conversation, cela marche mais à la place de l'exemple: Columns("B:B"), comment on peut écrire une plage, par exemple: de A16 à U30 ? Sachant que j'ai essayer en la nommant plage 1 mais il ne reconnait pas.

Et deuxième chose, lors de mon déverrouillage de mon fichier, Excel me demande de taper le mot de passe pour chaque feuille, y'a-t-il moyen d'aller plus vite et de devoir taper un seul mot de passe pour toutes les feuilles?


KathRoz
0
KathRoz Messages postés 12 Date d'inscription jeudi 21 juillet 2011 Statut Membre Dernière intervention 26 juillet 2011
26 juil. 2011 à 10:34
j'essaye de comprendre justement pour pouvoir me servir de VBA pour d'autre application mais je ne trouve pas, même dans l'aide comment on écrit les choses, exemple: la plage ou un nom de champ, j'essaye le + souvent avec des guillemets ou des virgules mais je ne connais pas les règles,du coup je ne sais pas si on a le droit de compiler des feuilles ou si il faut réécrire les lignes à chaque fois ect ect. Donc si tu sais où je peux trouver cela, ça m'intéresse beaucoup!!
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
26 juil. 2011 à 10:36
premier point : as-tu essayé (juste pour voir) de remplacer Columns("B:B") par Range("A16:U30") ?
il faut savoir se lancer un peu dans ce genre d'essai (c'est comme pour monter aux agrè_s dans une salle).

deuxième point : c'est là un autre aspect (rien à voir avec l'aspect protection en soi). Réponse : en utilisant une variable de portée générale. Elle peut (plus astucieusement) être de type booléen. False au départ, à mettre à True lors de l'identification, si réussie.
La suite est évidente : ne redemander le mot de passe que si encore à False.
AZllez ! A toi (essaye un peu seule, s'il te plait).
____________________
Utiliser le bouton "REPONSE ACCEPTEE" sur une réponse exacte facilite les recherches ultérieures d'autres forumeurs. PENSEZ-Y SVP
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
26 juil. 2011 à 10:39
Donc si tu sais où je peux trouver cela, ça m'intéresse beaucoup!!

Je te jure très solennellement que je ne me suis jusqu'à présent servi que de cette aide VBA (ni bouquin, ni rien d'autre) et que toutes mes connaissances ne proviennent QUE de là, pourtant
____________________
Utiliser le bouton "REPONSE ACCEPTEE" sur une réponse exacte facilite les recherches ultérieures d'autres forumeurs. PENSEZ-Y SVP
0
KathRoz Messages postés 12 Date d'inscription jeudi 21 juillet 2011 Statut Membre Dernière intervention 26 juillet 2011
26 juil. 2011 à 10:56
Alors j'ai utlisé ce code:
Worksheets("Delivrables").Range("F10:F43").locked = False
En précisant avant qu'il doit déprotéger tout puis après qu'il reprotège tout, et j'ai un message d'erreur suivant:
Impossible de définir la propriété lock de la classe range
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
26 juil. 2011 à 11:07
et tu as le sentiment d'avoir fait ainsi ce qu'il fallait, à savoir :
1) Déprotéger la feuille
2) ta ligne de code, telle qu'elle est
3) Reprotéger la feuille
Si tu avais lu la discussion que tu as été invitée à lire, tu y aurais vu cet aspect, sur lequel il m'a fallu insister avec une certaine véhémence .
Et, forte de cette prise de conscience, tu aurais appliqué !
Retourne la lire, donc.
PS : moi, je viens de le faire et ===>> aucun problème


____________________
Utiliser le bouton "REPONSE ACCEPTEE" sur une réponse exacte facilite les recherches ultérieures d'autres forumeurs. PENSEZ-Y SVP
0
KathRoz Messages postés 12 Date d'inscription jeudi 21 juillet 2011 Statut Membre Dernière intervention 26 juillet 2011
26 juil. 2011 à 11:36
Je suis désolé mais je ne vois pas à par le téléchargement dont tu parles en dernier. Si c'est cela, ce n'est pas possible, je n'ai aucun droit d'installation sur ma station.
Et sinon, je veux bien que tu me dises quoi parce que vraiment je ne vois pas.

Dans l'aide je trouve ceci:

'La méthode ne peut pas être utilisée dans le contexte. Notamment, certaines méthodes d'objets Range nécessitent une plage qui contient des données. Si la plage ne contient pas de données, la méthode échoue. '


Or, toutes mes cases sont vides puisqu'elles sont à remplir par la suite par le fournisseur, penses-tu que c'est du à cela?
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
26 juil. 2011 à 12:48
Je suis désolé mais je ne vois pas à par le téléchargement dont tu parles en dernier

JE ne parle personnellement d'aucun téléchargement.
Tu te réfères probablement à une DEUXIEME question posée par le demandeur dans la discussion de référence.
Tu devrais y retourner, y lire mon intervention à la suite de l'apparition que tu y a faite
Décidément ! tu as même, apparemment, des difficultés à distinguer une chose de l'autre? TE CONTENTANT DE RECOPIER, sans rien y comprendre.
C'est recopier, qui te contenteraiit donc, c'est tout ?
Alors voilà ===>>
 Worksheets("Delivrables").Unprotect
  Worksheets("Delivrables").Range("F10:F43").Locked = False
  Worksheets("Delivrables").Protect

Testé sans faille à l'instant sur ma machine.
Bonne recopie pure et dure et ne te fatigue pas trop, hein ...
Je suis triste !
____________________
Utiliser le bouton "REPONSE ACCEPTEE" sur une réponse exacte facilite les recherches ultérieures d'autres forumeurs. PENSEZ-Y SVP
0
KathRoz Messages postés 12 Date d'inscription jeudi 21 juillet 2011 Statut Membre Dernière intervention 26 juillet 2011
26 juil. 2011 à 12:51
C'est donc exactement ce que j'ai et j'obtiens l'erreur dont je t'ai parlé précédemment.
0
KathRoz Messages postés 12 Date d'inscription jeudi 21 juillet 2011 Statut Membre Dernière intervention 26 juillet 2011
26 juil. 2011 à 12:55
Voici mon programme complet noté dans un module:

Sub locked()

Worksheets("RFQ").Unprotect
Worksheets("RFQ").Protect Password:="Val"



Worksheets("SPPC Check List").Unprotect
Worksheets("SPPC Check List").Range("H23:AG96").locked = False
Worksheets("SPPC Check List").Protect Password:="Val"


Worksheets("Sample BOM").Unprotect
Worksheets("Sample BOM").Range("A16:U30").locked = False
Worksheets("Sample BOM").Protect Password:="Val"


Worksheets("Delivrables").Unprotect
Worksheets("Delivrables").Range("F10:F43").locked = False
Worksheets("Delivrables").Protect Password:="Val"


Worksheets("Feasibility Check List").Unprotect
Worksheets("Feasibility Check List").Range("J15:V20").locked = False
Worksheets("Feasibility Check List").Protect Password:="Val"


Worksheets("Process Description").Unprotect
Worksheets("Process Description").Range("A13:O27").locked = False
Worksheets("Process Description").Protect Password:="Val"


End Sub

Sub unlocked()

For Each sh In Worksheets
On Error Resume Next
sh.Unprotect
Next

End Sub


Tu va peut être pouvoir me dire s'il y a autre chose que je ne vois pas qui ne conviens pas.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
26 juil. 2011 à 13:29
Ecoute.
Tu es débutante ?
Alors procèdes par étapes et essais dans tyon apprentissage !
Expérience n° 1, donc :
Un NOUVEAU projet, tout neuf et vierge, avec 2 feuilles "Feuil1" et "Feuil2"
Sur Feuil1, un bouton de commande CommandButton1 avec ce code :
Private Sub CommandButton1_Click()
  Worksheets("Feuil2").Unprotect
  Worksheets("Feuil2").Range("H1:I6").Locked = False
  Worksheets("Feuil2").Protect
End Sub

Ca marche, hein ... toute ta feuille Feuil2 est protégée sauf la plage H1:I16 , non ?

Quelle est donc la différence avec toi ? ===>> ton mot de passe, pardi !
Je t'ai déjà dit plus haut qu'il fallait (comme tout le monde, même les plus avancés) consulter l'aide VBA.
Si tu l'avais fait, tu saurais que la déprotection (par Unprotect, donc) ne peut se faire sans mot de passe, si la feuille a déjà été protégée par un mot de passe ! Et c'est logique, non ?
Alors ? Que vas-tu faire ? (pas compliqué à comprendre, non ?)


____________________
Utiliser le bouton "REPONSE ACCEPTEE" sur une réponse exacte facilite les recherches ultérieures d'autres forumeurs. PENSEZ-Y SVP
0
KathRoz Messages postés 12 Date d'inscription jeudi 21 juillet 2011 Statut Membre Dernière intervention 26 juillet 2011
26 juil. 2011 à 13:57
Alors en faite l'erreur n'apparait qu'à partir d'une certaine plage:

Worksheets("SPPC Check List").Range("H23:AG96").locked = False

Serait-ce à cause du AG?

Par rapport à ta dernière réponse, je vois bien que la différence est le mot de passe mais je ne comprend pas ce que tu dis, j'ai bien compris qu'il faut un mot de passe pour Unlock mais c'est à l'utilisateur de le rentrer dans la fenêtre lorsqu'il souhaite déverrouiller les feuilles. Ainsi je ne vois pas de quoi tu me parles. de plus, le code marche pour les deux premières feuilles et bug à partir de la ligne que je t'ai réécrite ci-dessus.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
26 juil. 2011 à 14:08
Rhoooo ...
Alors (tu m'uses) ===>>
Un autre projet tout neuf, comme le précédent
et ceci (dans Feuil1)
Private Sub Worksheet_Activate()
  Worksheets("Feuil2").Protect ("toto")
End Sub


Private Sub CommandButton1_Click()
  Worksheets("Feuil2").Unprotect ("toto")
  Worksheets("Feuil2").Range("H1:I6").Locked = False
  Worksheets("Feuil2").Protect ("toto")
End Sub


Cà, c'est ton deuxième petit test (il faut tester)
Ensuite, si tu veux en plus ceci :
- conduire l'utilisateur, la première fois, à saisir le mot de passe correct, puis, les autres fois, à ne pas être obligé de le ressaisir, ce sera un troisième test (mais j'espère bien, là, vraiment, que tu n'auras pas besoin que quelqu'un te donne encore un autre "biberon"... Autrement, ce sera toute ta vie, que tu attendras des "biberons" ).
____________________
Utiliser le bouton "REPONSE ACCEPTEE" sur une réponse exacte facilite les recherches ultérieures d'autres forumeurs. PENSEZ-Y SVP
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
26 juil. 2011 à 14:21
Allez va ...
Je dois aller à la pêche aux éperlans ==>> générosité ==>>
Nouveau projet de test : ===>>>
Dim identifie As Boolean
Private Sub Worksheet_Activate()
  Worksheets("Feuil2").Protect ("toto")
End Sub


Private Sub CommandButton1_Click()
  If Not identifie Then
    mdp = InputBox("donnez votre mot de passe")
    If mdp = "toto" Then
       identifie = True
    Else
      identifie = False
      MsgBox "vous n'avez rien à tentrer ici ! circulez !"
    End If
  Else
    Worksheets("Feuil2").Unprotect ("toto")
    Worksheets("Feuil2").Range("H1:I6").Locked = False
    Worksheets("Feuil2").Protect ("toto")
  End If
End Sub


J'espère que cela te suffira, maintenant, pour voler un peu de tes propres ailes (y ajouter ta sauce éventuelle, etc...)


____________________
Utiliser le bouton "REPONSE ACCEPTEE" sur une réponse exacte facilite les recherches ultérieures d'autres forumeurs. PENSEZ-Y SVP
0
Rejoignez-nous