XL 2013 Insertion Auto Ligne Tableau + Protection lignes précédentes

Amigo

XLDnaute Occasionnel
Bonjour Le Forum
Permettez-moi de revenir vers vous en ce jour ensoleillé et chaud pour solliciter vos lumières.
J'ai créé un tableau qui contient des listes et je souhaite rajouter des lignes automatiquement et protéger les saisies précédentes sauf sur une colonne qui reste déprotéger.
Cordialement
 

Pièces jointes

  • Tableau et Protection.xlsx
    40.7 KB · Affichages: 21

Amigo

XLDnaute Occasionnel
Bonjour Chris, le Forum
vous parliez de ce code ???
je l'ai mis dans la feuille mais rien qui se passe :
- pas de ligne ajoutée au tableau
- je peux toujours modifier la ligne.

Edit : en fait, je souhaite que la cellule soit protégé après sa saisie sauf une colonne qui reste tout le temps non-protégé et à la fin création d'une nouvelle ligne dans le tableau et cette nouvelle ligne reste non-protégée tant qu'on ne la saisie pas.
Cordialement

Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

Dim Y

If Sh.ProtectContents Then
    For Each LO In Sh.ListObjects

        If Target.Row = LO.DataBodyRange.Rows.Count + LO.HeaderRowRange.Row + 1 Then
            If Not (Intersect(Sh.Range(Sh.Cells(1, Target.Column), Sh.Cells(1000000, Target.Column)), LO.Range) Is Nothing) Then
                Sh.Unprotect Password:=Monpass
                Y = Target.Value
                Application.EnableEvents = False
                Application.Undo
                Target = Y
                Sh.Protect UserInterfaceOnly:=True, Password:=Monpass
                Application.EnableEvents = True
                Exit For
            End If
        End If
    Next LO
End If
End Sub
 
Dernière édition:

chris

XLDnaute Barbatruc
Re

Ajoute
Code:
                Target.Locked = Target.Offset(-1, 0).Locked
après Target=Y

Mais la saisie doit être monocellule pour que cela fonctionne

As-tu bien initialisé ta variable Monpass ?

Par ailleurs tu n'as repris qu'une partie du code ce qui ne permet pas de gérer les listes de validation correctement

Ton profil indique 2003 et le préfixe du poste 2013. Tu as quelle version en réalité ?

Edit : en principe sur un tableau le format y compris protection se recopie automatiquement.
Sur le tiens ce n'est pas le cas mais sur les miens cela fonctionne...
Par ailleurs si on remet le code des listes de validation, en cas d'erreur de saisie la protection ne permet pas de corriger...
 
Dernière édition:

Amigo

XLDnaute Occasionnel
Bonjour Chris, Le Forum
Désolé pour la version d'Excel, je viens de changer mon profil. je travaille sur Excel 2013 et 2016.
J'ai recopié ton code et la feuille d'explication. mais rien qui se fait.
"Chris : Par ailleurs si on remet le code des listes de validation, en cas d'erreur de saisie la protection ne permet pas de corriger..." une bonne idée. Est-ce que vaut mieux mettre la protection après validation de toutes les cellules ???
Fichier joint avec modification.
Cordialement
 

Pièces jointes

  • Tableau et Protection V1.xlsm
    17.8 KB · Affichages: 20
Dernière édition:

chris

XLDnaute Barbatruc
Re
L'aspect protégé ou non est bien recopié sur la nouvelle ligne
Cependant comme déjà dit : il y a d'une part un problème avec la validation, et d'autre part il faudrait ne réagir qu'après la saisie en colonne E car sinon c'est verrouillé avant la saisie de cette cellule...
 

Amigo

XLDnaute Occasionnel
Re Chris
J'ai remis le code dans this workbook pareil rien se fait.
Qu'Est-ce que voulez-vous dire par initialiser la variable Monpass$
A votre avis vaut mieux définir une zone que de travailler avec un tableau pour résoudre le problème des listes ?
Cordialement
 
Dernière édition:

chris

XLDnaute Barbatruc
RE

Si avec le code dans le bon module, le code marche au moins pour la cellule C11.
Comme expliqué dans le classeur exemple, il faut que les cellules sous le tableau ne soient pas verrouillée en écriture...

A quoi sert ce tableau concrètement ?
 

Pièces jointes

  • Tableau et Protection V1a.xlsm
    19 KB · Affichages: 15

Amigo

XLDnaute Occasionnel
Re Chris, Le Forum
En essayant votre version, j'arrive à saisir dans la cellule des Colonnes "C" et "D" mais il protège la cellule dans la Colonne "E" avant saisie.
Le but de ce fichier : Plusieurs personnes vont saisir sur ce même fichier, et pour éviter qu'une personne puisse apporter des modifications sur la saisie d'une autre je suis obliger de verrouiller les saisies.
Cordialement
 

chris

XLDnaute Barbatruc
RE

C'est bien ce que j'expliquais !
L'ajout d'une ligne à un tableau reprend le format des lignes précédentes dont le verrouillage. C et E sont verrouillées automatiquement de ce fait ...
Verrouillage qui empêche de gérer correctement la validation puisque dans le code elle ne peut se faire qu'a postériori de l'incorporation au tableau.

De façon générale protéger ce qui vient d'être saisi sans possibilité de correction d'erreur de saisie n'apporte que des problèmes...

De toute évidence ce tableau n'est pas représentatif et tu n'as pas répondu à ma question sur le contexte réel qui permettrait de réfléchir à d'autres pistes plutôt que de coder une usine à gaz non adaptée au cas réel.
 

Amigo

XLDnaute Occasionnel
Bonjour Chris, Le Forum
Merci pour vos explications et je vous joint un fichier représentatif.
Le tableau de saisie est dans la feuille Base que je souhaite rajouter des lignes (avec des listes ) et verrouiller toutes les cellules saisies sauf la colonne "Commentaire"
Cordialement
 

Pièces jointes

  • Base - EDL - V3.xlsm
    31.8 KB · Affichages: 19

chris

XLDnaute Barbatruc
Bonjour

Je pense qu'il serait plus simple de faire la saisie dans un userform où elle serait contrôlée : le clic sur le bouton OK, ajouterait les données à la base en verrouillant les cellules qui doivent l'être...

Si les données de la base doivent être exploitées a postriorei, il est mieux qu'elles soient sous forme de tableau, sinon ce n'est pas une obligation.
 

Amigo

XLDnaute Occasionnel
Bonjour Chris, Le Forum
Merci pour votre suggestion.
Surement c'est une très bonne idée, vu que je suis un novice dans la matière j'essaye de comprendre un peu les codes.
J'ai eu une idée (bonne ou mauvaise : je ne sais pas) de définir le tableau en deux listes dynamiques et rajouter une macro pour ajouter des lignes.
Qu'Est-ce que vous en pensez (Est-ce une usine à gaz ou au Rosé frais :) )
En cherchant sur le Forum, j'ai trouvé c'est deux codes pour les combiner ensemble si c'est faisable.
N.B : ce qui est en Bold c'est mon usine.
Cordialement
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
'Dim List1 As Range
'Dim list2 As Range
Set f3 = Sheets("Base")
Set plage1 = f3.Range("A2:D" & f3.Range("A" & Rows.Count).End(xlUp).Row)
Set plage2 = f3.Range(Cells("F2:F" & Rows.Count)).End(xlUp).Row
Set plage3 = Union(plage1, plage2)
  If Not Intersect(Target, Range(plage3)) Is Nothing And Target.Count = 1 And Not témoin Then
     témoin = True
     ActiveSheet.Unprotect Password:="moi"
     Target.Locked = True
    ' Target.Interior.ColorIndex = 44
     ActiveSheet.Protect Password:="moi"
     témoin = False
  End If
End Sub

Private Sub CommandButton1_Click()

Application.ScreenUpdating = False

X = Range("A65000").End(xlUp).Row
Rows(X).Select
selection.Copy

Y = Range("A65000").End(xlUp).Row + 1
Rows(Y).Select
ActiveSheet.Paste
Application.CutCopyMode = False

deb1 = Cells(Y, 1).Address
fin2 = Cells(Y, 6).Address
Range(deb1 & ":" & fin2).Select
selection.ClearContents

Cells(Y, 1).Activate
'ActiveCell.FormulaR1C1 = "=R[-1]C+1"

Z = Range("a65000").End(xlUp).Row + 3
Rows(Z).Select
selection.Insert Shift:=xlDown
Cells(Y, 1).Activate

End Sub
 

chris

XLDnaute Barbatruc
Re

Ce n'est pas une bonne idée de créer 2 tableaux parallèles car risque de désynchroniser des données et pas logique...
Raisonner plutôt en Base de données : une table est un tout. On peut y ajouter, modifier ou supprimer des enregistrements mais sa structure doit être logique et solide

Avant de coder, il faut mettre à plat le fonctionnement : qui fait quoi, comment.
Saisie initiale, MAJ au fil dont éventuelles corrections d'erreurs de saisie.
Pour chaque action définir l'accès, le déroulement, les contrôles à effectuer et les messages d'erreurs associés, la faon dont les données sont ajoutées ou modifiées ou supprimées dans la table.
Si des actions sont faites dans la table manuellement laisser les cellules non verrouillées.
Définir quand elle doivent le devenir le cas échéant.

Là tu explores des solutions avant d'avoir, il m esemble, mis à plat le problème.
 

Discussions similaires

Statistiques des forums

Discussions
312 149
Messages
2 085 771
Membres
102 970
dernier inscrit
JMaurice