Verrouiller une cellule en fonction de sa propre valeur

Résolu/Fermé
AndGu Messages postés 7 Date d'inscription jeudi 25 janvier 2018 Statut Membre Dernière intervention 26 janvier 2018 - Modifié le 25 janv. 2018 à 15:14
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 - 26 janv. 2018 à 00:42
Bonjour,

Je suis un autodidacte sur Excel que je suis loin de maîtriser... mais je me débrouille (avec de lointaines bases en programmation) pour l'utilité que j'en ai. J'ai épluché des dizaines de sujets qui ressemblent à mon projet mais je ne trouve pas un cas parfaitement similaire au mien.

Voici mon cas :

Je partage un tableau avec mes collègues dans lequel je "bloque" certaines cases en les remplissant avec un "x" : le but étant que ce "x" ne soit pas malencontreusement effacé. L'entrée de ces "x" est aléatoire, il ne s'agit pas de bloquer une ligne ou une colonne. En gros, l'idée serait qu'on ne puisse plus saisir une autre entrée dès lors qu'une case s'est vue attribuer la valeur "x". Et pour aller au bout des choses, imaginons que je doive corriger une entrée, l'idéal serait que cela ne s'applique qu'à condition qu'une case possède une valeur "1" (par exemple).

Je n'ai pas de pièce jointe à fournir vu que je ne peux pas sortir mon fichier du boulot mais je peux créer un simple tableau avec quelques "x" si ça peut aider... bien que je n'en voie pas vraiment l'intérêt ^^

D'avance merci :)

2 réponses

ccm81 Messages postés 10903 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 19 novembre 2024 2 428
25 janv. 2018 à 16:15
Bonjour

Un petit exemple
https://www.cjoint.com/c/HAzppJ6OWtB

Cdlmnt
1
AndGu Messages postés 7 Date d'inscription jeudi 25 janvier 2018 Statut Membre Dernière intervention 26 janvier 2018
Modifié le 25 janv. 2018 à 19:00
Hé ben... pas grand chose à dire, si ce n'est que c'est ce que j'ai demandé.

Sans vouloir abuser :
- Serait-il possible de rendre la macro active sur tout le classeur ?

J'ai également quelques petites questions :
- Peut-on ajouter une autre condition de blocage ? (je pense à la majuscule)
- Vous avez utilisé le "ctrl+d" pour annuler le blocage (et ça fonctionne bien) mais est-il envisageable de créer une condition dans une cellule ? => if A1 = 1 then lock else unlock
- Serait-il possible que vous ajoutiez les explications des différentes étapes de VB ? Comme je l'ai expliqué, je suis autodidacte... j'aime bien comprendre. Parce que votre macro est géniale mais je suis clairement largué là.

D'avance merci :)
0
AndGu Messages postés 7 Date d'inscription jeudi 25 janvier 2018 Statut Membre Dernière intervention 26 janvier 2018
25 janv. 2018 à 22:29
Encore merci ccm81 mais je retiendrai la solution de eriiic pour sa simplicité en terme d'écriture et son efficacité d'utilisation. Je pense à mes collègues pour qui l'utilisation d'excel se réduit à remplir des cases.

PS: si vous avez le temps, je suis toujours preneur pour une réponse à mes questions... par curiosité ;)
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 247
25 janv. 2018 à 19:11
Bonjour,

une autre approche sans protéger la feuille.
https://www.cjoint.com/c/HAzskGrmYgb
eric
1
AndGu Messages postés 7 Date d'inscription jeudi 25 janvier 2018 Statut Membre Dernière intervention 26 janvier 2018
25 janv. 2018 à 20:24
L'idée est sympa et éviter le pop-up ça m'intéresse bien.
Par contre, j'aurais besoin que ça fonctionne pour tout le classeur.
J'ignore pourquoi mais le 1er "x" (en C2) n'est jamais sélectionnable.

Merci
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 247
Modifié le 25 janv. 2018 à 20:39
J'ignore pourquoi mais le 1er "x" (en C2) n'est jamais sélectionnable.
Ben oui, c'est ça le truc. Si tu ne peux le sélectionner, tu ne peux pas le modifier ! :-)
Met un 1 A2 et tu pourras le modifier. Comme tu ne donnes aucun détail précis ça concerne toute la ligne.

Pour toutes les feuilles, dans thisworkbook :
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    If LCase(Target) = "x" And Sh.Cells(Target.Row, 1) <> 1 Then Target.Offset(, 1).Select
End Sub

eric
0
AndGu Messages postés 7 Date d'inscription jeudi 25 janvier 2018 Statut Membre Dernière intervention 26 janvier 2018
25 janv. 2018 à 22:25
Oups, désolé Eric. Je n'avais pas compris que c'était par ligne. Je pensais que le "1" en A3 était sensé influencer tout le tableau.

Tu penses pouvoir faire en sorte que "autoriser modif" soit concentré sur une seule cellule ?
J'exploite ton savoir jusqu'au bout ;) Sinon pas de soucis, je masquerai une colonne.

Merci :)
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 247
Modifié le 25 janv. 2018 à 22:55
Va falloir à apprendre à être précis... A chaque détail non fourni on improvise et peu de chance que ce soit exactement ce que tu avais en tête.
1 par feuille ou 1 pour tout le classeur ?

avec A1 de chaque feuille :
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    If LCase(Target) = "x" And Sh.[A1] <> 1 Then Target.Offset(, 1).Select
End Sub

Tu pourrais même mettre une case à cocher 'Autoriser corrections' et exploiter le VRAI de la cellule liée :
If LCase(Target) = "x" And Sh.[A1]  Then Target.Offset(, 1).Select
0
AndGu Messages postés 7 Date d'inscription jeudi 25 janvier 2018 Statut Membre Dernière intervention 26 janvier 2018
25 janv. 2018 à 23:42
Une cellule par feuille, désolé. Pas toujours évident de décrire tout ce qu'on a en tête tant ça parait évident quand on est dans le contexte.

Petit détail, à chaque fois que je sélectionne plusieurs cases, j'ai un pop-up de VB : "erreur d'execution '7' : mémoire insuffisante".
Peut-on y remédier ?

Mis à part ce détail, c'est parfait !!!
0