Macro pour verouillage ligne

bonjours à tous,

je voudrais de l'aide pour créer une macro qui verrouille une ligne d'un tableau une fois la dernière cellule renseignée!

le verrouillage doit se faire automatiquement mais le déverrouillage doit se faire par un mot de passe.

cette macro ne verrouillerait pas les lignes non renseignées.

Bonjour POM, bonjour le forum,

Quand va-t-on lancer la macro ?

• Quand toutes les cellules de la ligne sont renseignés (n'accepte pas de cellule vide dans la ligne) ?

• Quand la dernière cellule de la ligne est renseigné (accepte des cellules vides dans la ligne) ?

Quand tu dis Tableau, cela signifie une plage d'un onglet contenant des données ou ou object ListObjects ?

Bref, un complément d'information est nécessaire et le fichier serait l'idéal...

Bonjour TauThème,

- Toutes les cellules de la même ligne doivent etres renseignées

- lorsque que l'on sélectionne "verrouiller "dans la cellule H, toute la ligne doit etre verrouillée sans demander le mot de passe

- si l'on sélectionne Déverrouiller, une boite de dialogue apparait pour renseigner le mot de passe pour déverrouiller

Re,

En pièce jointe ton fichier modifié. J'ai remplacé la validation de données par la macro événementielle double-clic avec le code ci-dessous. J'ai commencé par sélectionner toutes les cellules de l'onglet et par les déverrouiller. Double-clique dans une cellule de la colonne H...

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) 'au double-clic dans l'onglet
'si le double-clic a lieu ailleurs que dans la plage H1:H119, sort de la procédure
If Application.Intersect(Target, Range("H1:H119")) Is Nothing Then Exit Sub
Cancel = True 'annule le mode [Édition] lié au double-clic
Select Case Target.Value 'agit en fonction de la valeur de la cellule double-cliquée
    Case "Verrouiller" 'cas "Verrouiller"
        'condition : si le nombre de valeurs non vides dans la ligne est différent de 7
        If Application.WorksheetFunction.CountA(Cells(Target.Row, 1).Resize(1, 7)) <> 7 Then
            MsgBox "Vous devez renseigner toutes les cellules de la ligne !" 'message
            On Error Resume Next 'gestion des erreur (en cas d'erreur passe à la ligne suivante)
            'sélectionne la première cellule vide en partant de la gauche (génère une erreur si elle se trouve en colonne A)
            Target.End(xlToLeft).Offset(0, -1).Select
            'si une erreur a été générée, supprime l'erreur sélectionne la cellule en colonne A
            If Err <> 0 Then Err.Clear: Cells(Target.Row, 1).Select
            On Error GoTo 0 'annule la gestion des erreur
        Else 'sinon (si le nombre de valeur non vide est égal à 7)
            ActiveSheet.Unprotect "toto" 'déprotège l'onglet avec mot de passe (tu adapteras le MDP)
            Cells(Target.Row, 1).Resize(1, 7).Locked = True 'verrouille la ligne
            Target.Value = "Déverrouiller" 'remplace "Verrouiller" par "Déverrouiller"
            ActiveSheet.Protect "toto" 'protège l'onglet avec mot de passe (tu adapteras le MDP)
        End If 'din de la condition
    Case "Déverrouiller" 'cas "Déverrouiller"
        ActiveSheet.Unprotect 'déprotège l'onget
        Target.Value = "Verrouiller" 'remplace "déverrouiller" par "Verrouiller"
End Select 'fin de l'action en fonction de la valeur de la cellule double-cliquée
End Sub
53pom-v01.xlsm (21.62 Ko)

TOUT SIMPLEMENT GENIAL!!

Exactement ce que je voulais!! une TRES GRAND MERCI ))))))

Merci ThauTeme!!!

Un dernier petit problème à résoudre!

lorsqu'une erreur est produite, je ne voudrais pas que le débogeur apparaisse dans Excel car l'utilisateur peut voir le mot de passe contenu dans la macro...

merci de votre aide!

Re,

Tu peux masquer ton projet VBA. Dans VBE (Visual Basic Editor) menu Outil / Proprietés de VBAProject... / onglet Protection...

re,

j'ai protégé mon projet mais lorsque ce produit une erreur de saisie, il est proposé une boite de dialogue proposant fin ou débogage! et si l'on clic sur débogage, le script apparait!!

Re,

Explique-moi ce qui provoque un bug car je n'arrive pas à reproduire chez moi...

lorsque tu déverrouilles une ligne, il t'es demandé le mot de passe, si tu fais OK sans le mot de passe, il apparait la boite de dialogue MVB avec "Fin" ou Débogage.

si tu clic sur "débogage", tu vois apparaitre le script de la macro, donc le mot de passe...!

Bonjour,

Non, si tu as aussi verrouillé ton projet VBA avec un mot de passe il te faudra donner ce mot de passe pour ouvrir le projet et donc, voir les macros... Toutefois, j'ai remarqué un dysfonctionnement dans le code et j'aimerais savoir si la ligne pourrait être verrouillée automatiquement dès la dernière cellule édité ? Du coup le bouton ne servirait plus qu'à déverrouiller.

Bonjour à toi TauTheme,

Pas de soucis, lors de la saisie de la dernière ligne vour un verrouillage automatique de la ligne. ca pourrait être bien.

J'ai rajouté quelques lignes dans le tableau pour la saisie d'un code pour identifier la personne qui a fait la ligne! c'est pas du grand art comme toi! si tu as mieux, n'hésite pas

11pom-v02.xlsm (34.26 Ko)

Re,

Ooops trop dangereux ton nouveau fichier ! Je sélectionnes la colonne F, je supprime la Mise en Forme Conditionnelle, je mets la police à la taille 10 et je récupère tous les mots de passe édités... Pas la peine alors de masquer le projet VBA. Trouve un autre système car celui-là est trop facile à craquer...

Il faut qu'un administrateur définisse les droits : Utilisateur / Mot de passe et les stocke dans le code mais pas qu'il apparaissent dans le fichier...

Re-bonjour à toi !

j'ai un soucis à propos du codage pour le verrouillage d'une ligne!

j'ai une ligne qui contient des cellules fusionnées. et du coup le codage que tu m'a gentiment fait ne fonctionne pas!!

comment peut-on arranger cela??

Rechercher des sujets similaires à "macro verouillage ligne"