Déverrouiller une ligne entière

Résolu/Fermé
Gontchiflor - 24 juil. 2017 à 15:07
 gontchiflor - 25 juil. 2017 à 16:08
Bonjour,
Je cherche dans un document excel à déverrouiller une ligne entière dans une feuille protégée.
Pour cela j'ai créé un bouton. Lorsque l'on clique sur le bouton, les opérations suivante se font:

1- la page se dé-protège:

ActiveSheet.Unprotect Password:="0000"

2- on fait apparaître une nouvelle ligne juste après la dernière ligne du document existant et gardant la mise en forme de cette dernière ligne:

Application.ScreenUpdating = False
On Error Resume Next
With Selection
.EntireRow.Copy
.EntireRow.Insert x1ShiftDown
.EntireRow.ClearContents
.Cells(1, 1).Select

End With

Application.CutCopyMode = False
On Error GoTo 0
Application.ScreenUpdating = True

3- on sélectionne la première cellule de la nouvelle ligne apparue:

Range("A1048576").End(xlUp).Select

4- Je pensais déverrouiller cette nouvelle ligne:

With Selection
Selection.Offset(1, 0).Select
Selection.EntireRow.Locked = False
End With

5- On protège la feuille entière:

ActiveSheet.Protect Password:="0000"

L'étape 4 ne fonctionne pas. J'arrive à sélectionner la bonne ligne, mais je n'arrive pas à la déverrouiller. La fonction Locked ne semble pas fonctionner ainsi que la fonction protect ou la fonction blockled.


Le but serrai qu'un opérateur puisse écrire dans la nouvelle ligne qu'il vient de faire apparaître sans avoir la possibilité de modifier ce que ces collègues ont écrit auparavant.
Merci pour vos réponses
A voir également:

9 réponses

ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
24 juil. 2017 à 15:21
Bonjour Gontchiflor, bonjour le forum,

Peut-être comme ça :

Selection.EntireRow.Cells.Locked = False 

0
Bonjour ThauTheme,
Quand j'utilise ton code, ça marche pour la première cellule de la ligne mais pas pour toute la ligne. Je suis sûr du fait que je sélectionne toute la ligne car lorsque je remplace:
Cells.Locked = False par: Copy
j'ai réellement toute la ligne sélectionnée.
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
24 juil. 2017 à 16:05
Re,

Aors essaie en point 3 :

Cells(Application.Rows.Count, "A").End(xlUp).Offset(1, 0).EntireRow.Cells.Locked = False

Et supprime le point 4...
0
Avec ce que tu viens de me donner j'ai le même résultat qu'avant. Je peux modifier la première cellule de la ligne mais pas la ligne entière.
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
24 juil. 2017 à 16:54
Re,

Ton code est tellement mal ficelé !... La règle numéro 1 est d'éviter les Select inutiles qui ne font que ralentir l'exécution du code. Essaie comme ça :

Sub Macro1()
Dim DL As Long 'déclare la variable DL (Dernière Ligne)

Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
With ActiveSheet 'prend en compte l'onglet actif
    .Unprotect Password:="0000" 'déprotège l'onglet
    .Cells.Locked = True 'protèges toutes les cellules de l'onglet
    DL = .Cells(Application.Rows.Count, "A").End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne A
    .Rows(DL).Copy 'copie la ligne DL
    .Cells(DL, "A").Insert xlShiftDown 'insère la ligne copiée dans la cellule ligne DL + 1 colonne A
    .Rows(DL + 1).ClearContents 'efface le contenu de la ligne DL +1
    .Rows(DL + 1).Cells.Locked = False 'déverrouille la ligne DL +1
    .Protect Password:="0000" 'protège l'onglet
End With 'fin de la prise en comtpe de l'onglet actif
'Application.ScreenUpdating = True est inutile puisque ça se fait automatiquement
End Sub
0
Gontchiflor > ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022
25 juil. 2017 à 09:41
Bonjour,
Cette fois ci, je peux modifier la première cellule de la dernière ligne utilisée.
0

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

Posez votre question
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
25 juil. 2017 à 10:05
Re,

Chez moi ça fonctionne parfaitement en voici la preuve. Dans le fichier, essaie d'éditer n'importe quelle cellule. L'accès est refusé...
Lance la macro. Tu peux désormais éditer la dernière ligne seulement...
Relance la macro... Idem, seule la dernière ligne est accessible...

Mais c'est quand même un comble que ce soit moi qui soit obligé de fournir un fichier !...

https://www.cjoint.com/c/GGzieUbKx4c
0
re,
Soit... je vois. Je vais revoir mon truc. Désolé de ne pas avoir donné de document précédemment mais je ne jugeai pas cela utile.
En tout cas merci pour ton aide.
0
voila le document en question. Je n'arrive vraiment pas à faire ce que je veux. je ne sais pas ce qui ne marche pas par rapport à ton document.
http://www.cjoint.com/c/GGzlM2ki63C
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
25 juil. 2017 à 14:00
Re,

Dans les options pour la protection de l'onglet tout était décoché !?... Cela ne permettait même pas la sélection des cellules non verrouillées. J'ai rajouté une ligne qui permet de sélectionner ces cellules.
Le code modifié qui chez moi fonctionne avec ton fichier :

Sub Macro1()
Dim DL As Long 'déclare la variable DL (Dernière Ligne)

Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
With ActiveSheet 'prend en compte l'onglet actif
    .Unprotect Password:="0000" 'déprotège l'onglet
    .Cells.Locked = True 'protèges toutes les cellules de l'onglet
    DL = .Cells(Application.Rows.Count, "A").End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne A
    .Rows(DL).Copy 'copie la ligne DL
    .Cells(DL, "A").Insert xlShiftDown 'insère la ligne copiée dans la cellule ligne DL + 1 colonne A
    .Rows(DL + 1).ClearContents 'efface le contenu de la ligne DL +1
    .Rows(DL + 1).Cells.Locked = False 'déverrouille la ligne DL +1
    .Protect Password:="0000" 'protège l'onglet
    .EnableSelection = xlUnlockedCells
End With 'fin de la prise en comtpe de l'onglet actif
'Application.ScreenUpdating = True est inutile puisque ça se fait automatiquement
End Sub

0
Re,
Merci beaucoup pour ton aide, ça marche nickel chez moi aussi
0