Verrouillage automatique après saisie
Résolu
JN
-
eriiic Messages postés 24603 Date d'inscription Statut Contributeur Dernière intervention -
eriiic Messages postés 24603 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
J'ai crée sur Excel une base de donnée utilisant un grand nombre de formule, choix déroulant et validation de donnée.
J'aimerais que lorsque je coche la première cellule d'une ligne, l'ensemble des cellules de cette dites ligne se verrouille (à l'exception de la première pour que je puisse déverrouiller la ligne si nécessaire) dans le but de sécuriser la base de données après chaque nouvelle série de donnée.
Le faire par la validation de donnée est impossible car j'utilise déja cette fonction pour le remplissage des données.
Je pense donc le faire par la feuille de code mais je ne m'y connais du tout en code...
Un grand merci pour le temps que vous passerez a me lire et me répondre...
Jean-Noël
J'ai crée sur Excel une base de donnée utilisant un grand nombre de formule, choix déroulant et validation de donnée.
J'aimerais que lorsque je coche la première cellule d'une ligne, l'ensemble des cellules de cette dites ligne se verrouille (à l'exception de la première pour que je puisse déverrouiller la ligne si nécessaire) dans le but de sécuriser la base de données après chaque nouvelle série de donnée.
Le faire par la validation de donnée est impossible car j'utilise déja cette fonction pour le remplissage des données.
Je pense donc le faire par la feuille de code mais je ne m'y connais du tout en code...
Un grand merci pour le temps que vous passerez a me lire et me répondre...
Jean-Noël
A voir également:
- Verrouillage automatique après saisie
- Téléphone bloqué code verrouillage - Guide
- Réponse automatique thunderbird - Guide
- Saisie gestuelle iphone - Guide
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Logiciel de sauvegarde automatique gratuit - Guide
2 réponses
Bonsoir,
une proposition en vba :
Mettre un x en A1 pour activer la protection générale. Le supprimer pour ôter la protection de la feuille et permettre toutes les modifications (formats, etc) sans être embêté par la protection.
Un x en colonne A verrouille 10 cellules sur la ligne (adapter le 10 dans le code) si A1 n'est pas vide.
Déverrouiller toutes les cellules au départ.
exemple : https://www.cjoint.com/?BIgtUSPpQJF
eric
Jamais tu ne répondras à un mp non sollicité...
Bon, ça c'est fait.
une proposition en vba :
Private Sub Worksheet_Change(ByVal Target As Range) 'activation protection générale If Target = [A1] And [A1] = "" Then ActiveSheet.Unprotect ' protection des lignes If Target.Column = 1 And Target.Row > 1 Then ActiveSheet.Unprotect If LCase(Target) = "x" Then Target.Offset(0, 1).Resize(1, 10).Locked = True Else Target.Offset(0, 1).Resize(1, 10).Locked = False End If End If If [A1] = "x" Then ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True End Sub
Mettre un x en A1 pour activer la protection générale. Le supprimer pour ôter la protection de la feuille et permettre toutes les modifications (formats, etc) sans être embêté par la protection.
Un x en colonne A verrouille 10 cellules sur la ligne (adapter le 10 dans le code) si A1 n'est pas vide.
Déverrouiller toutes les cellules au départ.
exemple : https://www.cjoint.com/?BIgtUSPpQJF
eric
Jamais tu ne répondras à un mp non sollicité...
Bon, ça c'est fait.
Dsl mais même l'exemple que vous m'avez mis en pièce jointe ne fonctionne pas...
Je voudrais que si je mets un "x" dans la case A2, toutes les cellules la ligne 2 soit bloquées (non modifiable) et que si je décoche la cellule A2 les cellules de la ligne 2 redeviennent modifable.
(si je mets le x en A3, ce sera pareil mais uniquement pour la ligne 3; et ainsi de suite...)
Encore merci pour le temps consacré à me répondre...
Je voudrais que si je mets un "x" dans la case A2, toutes les cellules la ligne 2 soit bloquées (non modifiable) et que si je décoche la cellule A2 les cellules de la ligne 2 redeviennent modifable.
(si je mets le x en A3, ce sera pareil mais uniquement pour la ligne 3; et ainsi de suite...)
Encore merci pour le temps consacré à me répondre...
Puis-je abuser????
En fait j'ai adapté le code pour qu'il verrouille 149 cellules de la ligne concernée.
Mais, subtilité que je n'avais pas précisé, certaines colonnes comprennent des formules. Afin que l'agent ne modifie pas ces données j'avais initiallement bloqué ces celulles.
Lorsque que je bloque la ligne avec le "x" dans la première cellule elles sont toutes bloquées (ce que je voulais) mais lorsque je débloque en enlevant le "x" toutes les cellules de la ligne redeviennent accessible, je souhaiterais que les cellules à formule restent bloquées (comme dans la configuration de départ)
Les colonnes qui devraient rester en permanence bloquées sont:
B
U
AO à AX (AO et AX compris)
CX
DB
Encore un grand merci
Et promis après j'arrête ;)
Jean-Noël
En fait j'ai adapté le code pour qu'il verrouille 149 cellules de la ligne concernée.
Mais, subtilité que je n'avais pas précisé, certaines colonnes comprennent des formules. Afin que l'agent ne modifie pas ces données j'avais initiallement bloqué ces celulles.
Lorsque que je bloque la ligne avec le "x" dans la première cellule elles sont toutes bloquées (ce que je voulais) mais lorsque je débloque en enlevant le "x" toutes les cellules de la ligne redeviennent accessible, je souhaiterais que les cellules à formule restent bloquées (comme dans la configuration de départ)
Les colonnes qui devraient rester en permanence bloquées sont:
B
U
AO à AX (AO et AX compris)
CX
DB
Encore un grand merci
Et promis après j'arrête ;)
Jean-Noël
Bonsoir,
On va faire plus général : si une cellule contient une formule elle n'est pas déverrouillée :
J'ai mis le nombre de colonnes en constante au début du code. Ca ne fait qu'une valeur à changer en cas de modif.
Teste et dis.
eric
On va faire plus général : si une cellule contient une formule elle n'est pas déverrouillée :
Private Sub Worksheet_Change(ByVal Target As Range) Const nbcol As Long = 10 Dim col As Long 'activation protection générale If Target = [A1] And [A1] = "" Then ActiveSheet.Unprotect ' protection des lignes If Target.Column = 1 And Target.Row > 1 Then ActiveSheet.Unprotect If LCase(Target) = "x" Then Target.Offset(0, 1).Resize(1, nbcol).Locked = True Else For col = 1 To nbcol If Left(Target.Offset(0, col).Formula, 1) <> "=" Then Target.Offset(0, col).Locked = False Next col End If End If If [A1] = "x" Then ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True End Sub
J'ai mis le nombre de colonnes en constante au début du code. Ca ne fait qu'une valeur à changer en cas de modif.
Teste et dis.
eric