Fonction VBA : cellules interdites et masquées (à combiner)

Bonjour à tous,

J'ai trouvé 2 fonctions sympa en VBA que j'aimerai intégrer à mon classeur.

Il s'agit d'une fonction qui interdit l'accès à des plages de cellules (insérer dans Feuille 1) :

--//

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Not Intersect(Range("E6:E7"), Target) Is Nothing Then

Target.Offset(0, 1).Select

End If

End Sub

--//

Et l'autre qui masque le contenu des plages de cellules (insérer dans ThisWorkbook) :

--//

Private Sub Masquer_formule()

Selection.Locked = True

Selection.FormulaHidden = True

ActiveSheet.Protect

End Sub

--//

Le problème c'est que les 2 fonctions ne marchent pas ensemble.

Est-il possible de combiner ces 2 fonctions ou de les faire fonctionner ensemble ?

Merci pour votre aide.

François

ah merci

la première fonction va me rendre bcp de service

la deuxième g pas compris comment l'utiliser

Bonjour,

à quoi ça te servirai de les faire fonctionner ensemble ?

Si ta formule est déjà masquée, inutile de le refaire à chaque fois que qq'un clique dessus.

Ce sont 2 opérations qui doivent rester indépendantes.

De plus, à moins d'avoir affaire à un mutant, peu de chance qu'il ait le temps de lire la formule, même non masquée, en sélectionnant la cellule...

L'intérêt de la 1ère c'est de protéger une cellule sans à avoir besoin de protéger la feuille. Si tu es parti pour la protéger et bien sert toi des options lors de la protection pour interdire sa sélection. Pas besoin de macro supplémentaire pour ça.

eric

Bonjour,

En fouillant sur le net j'ai finalement trouvé un code avec déverrouillage par mot de passe (Mdp : TEST) qui pourrait faire mon bonheur.

Le seul soucis c'est qu'il masque uniquement les formules de la feuille en cours de lecture.

Je viens de passer 3 heures à essayer de le forcer à agir sur le classeur complet, mais rien à faire.

Un petit coup de pouce me serait très utile.

Je joins le fichier dans le post.

Merci par avance.

PS : j'ai associé un code dans ThisWorkBook qui permet de réactiver la protection (en cas d'oubli) à la fermeture d'Excel

François

Bonjour,

Sub Masquer_Formules()
    Dim Rg As Range, sh As Worksheet
    'On Error Resume Next ' on ne met pas la poussière sous le tapis
    For Each sh In Worksheets
        With sh
            .Unprotect "TEST"
            Set Rg = .UsedRange.SpecialCells(xlCellTypeFormulas)
            If Not Rg Is Nothing Then    ' toujours tester si un range n'est pas vide avant de l'utiliser
                .Cells.Locked = False
                Rg.Locked = True
                Rg.FormulaHidden = True
            End If
            .Protect "TEST"
        End With
    Next sh
End Sub

On est d'accord que ça ne tient pas plus de 10s à qui le veut...

eric

Bonjour et merci eriiic,

Ça marche super bien !!

Sans vouloir en demander trop, tu penses qu'on peut l'adapter pour déverrouiller toutes les cellules des feuilles du classeur ?

François

Oui et je pense que c'est à ta portée.

eric

Je ne suis pas de mauvaise volonté, mais je n'y arrive pas.

J'ai essayé :

  • sh .Unprotect "TEST"
  • sh.Locked = True
  • etc.

Mais rein y fait.

François

Il suffit de lire, tu l'as dans la macro.

Ce sont les cellules de la feuille qu'il faut déverrouiller, pas la feuille (elle, elle est protégée) :

.Cells.Locked = False

déverrouille toutes les cellules de la feuille de With

eric

Désolé, je ne vois pas. Tant pis.

Peut-être qu'une âme charitable me donnera la solution.

Bonne soirée.

Quand même...

Sub test()
    For Each sh In Worksheets
        With sh
            .Unprotect "TEST"
            .Cells.Locked = False
            .Protect "TEST"
        End With
    Next sh
End Sub

eric

Sauf erreur de ma part, ce deuxième code ne fonctionne pas correctement.

Encore désolé de te solliciter.

Petit récap :

  • le but de la macro est de verrouiller les cellules (tout le classeur) et en même temps de masquer toutes les formules (tout le classeur)
  • Inversement, déverrouillage par mot de passe des cellules (tout le classeur) et affichage de toutes les formules (tout le classeur)

Je joins mon fichier de test.

François

Bonjour,

J'ai répondu à ta dernière question :

Sans vouloir en demander trop, tu penses qu'on peut l'adapter pour déverrouiller toutes les cellules des feuilles du classeur ?

Ton récap était ta 1ère question à laquelle j'ai également répondu.

eric

Bonjour à tous,

Après avoir passé de longues heures à chercher, j'ai finalement réussi à paramétrer mon classeur selon mes besoins.

Ce classeur contient 6 types de fonction permettant de gérer et protéger un formulaire/classeur (la protection n'est pas infaillible, malheureusement).

1. Masquage des cellules contenant des formules

2. Protection du classeur par mot de passe

3. Déverrouillage du classeur par mot de passe

4. Effacement de valeurs de cellules selon des zones définies

5. Verrouillage automatique du classeur à la fermeture

6. Protection de l'éditeur VBE par mot de passe

Je tiens à partager mon travail et mes recherches pour que la communauté puisse en profiter.

N'étant pas du tout expert en VBA, vous pourrez l'améliorer à votre convenance.

Mention spéciale à eriiic qui m'a aidé. Oui, mais pas tant que ça... Je suis venu sur le Forum pour avoir de l'aide, pas pour mendier.

Bonne continuation à tous.

François

Je comprend très bien que certains n'aime pas être poussés à mettre les mains dans le cambouis pour apprendre à programmer.

Pas de soucis, je resterai spectateur dorénavant.

Tu auras bien quelqu'un pour te livrer du tout cuit, beaucoup plus facile.

eric

Rechercher des sujets similaires à "fonction vba interdites masquees combiner"