Bloquer une ligne lorsqu'elle est pleine

Fermé
Bibi - 31 juil. 2015 à 20:25
 Bibi - 1 août 2015 à 23:47
Bonjour,

Je souhaiterais savoir s'il est possible de bloquer l'accès à une ligne une fois que toutes les cellules de cette ligne sont renseignées?
C'est à dire que fois que cette ligne est pleine, on ne puisse pas la modifier.

Merci d'avance
A voir également:

16 réponses

Mike-31 Messages postés 18351 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 12 décembre 2024 5 110
31 juil. 2015 à 21:22
Bonsoir,

Oui on peut faire quelque chose de simple ou plus compliqué en VBA,
peux tu donner des explications sur la plage à traiter exemple de A2 à D20 et si toutes les cellules de la ligne 4 par exemple A4, B4, C4, D4 ont une valeur on ne peut plus la changer
0
Merci je te réponds demain car je n'ai plus accès au fichier là
0
Merci je te réponds demain car je n'ai plus accès au fichier là
De mémoire il y a 11 colonnes et je souhaite bloquer toutes les données d'une ligne à partir du moment où elle a été remplie.
0
Mike-31 Messages postés 18351 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 12 décembre 2024 5 110
31 juil. 2015 à 22:22
Alors ça va être difficile, je part en vacance
0
Ça n'est pas super pressé Mike, ça peut attendre ton retour! Merci pour ta réponse.
0
Raymond PENTIER Messages postés 58763 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 18 décembre 2024 17 255
1 août 2015 à 01:19
Bonjour.

Je n'ai pas trouvé de solution avec les fonctions classiques d'Excel.
Je crains que la solution ne passe par VBA et une macro ...
0
Merci Raymond,
Pas de pb s'il faut passer par VBA, mais je suis incapable de pondre un tel code..
Merci pour votre aide en tour cas, je pense que c'est faisable mais mes recherches n'ont pour l'instant abouti à rien
0
Mike-31 Messages postés 18351 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 12 décembre 2024 5 110
1 août 2015 à 07:45
Re,

par formule, si par exemple tu veux verrouiller les lignes de la plage A1 à L20

dans une colonne que tu peux masquer exemple M, en M1 tu saisis cette formule
=NBVAL(A1:K1)
et tu incrémentes jusqu'à M20

en suite sélectionne ta plage à protéger A1 à L20 et onglet Données/module Outils de données/Validation des données/onglet Options, dans Autoriser sélectionner Personnalisée et dans Formule coller cette formule
=$M1<11

ce procédé bloquera la ligne dès la saisie de la onzième valeur seul la suppression d'une valeur sera possible parce qu'il faut penser à une saisie erronée que l'on souhaite remplacer

la suppression peut être également bloqué par une simple ligne de VBA

Comme je te l'ai dit je n'ai plus que quelques heures avant de m'absenter, si j'ai une minute je te proposerais plusieurs code VBA
0
Mike-31 Messages postés 18351 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 12 décembre 2024 5 110
1 août 2015 à 11:43
PS: dans mes explications j'ai fait une erreur il ne s'agit pas de A1 à L20 mais
A1 à K20
0

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

Posez votre question
Mike-31 Messages postés 18351 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 12 décembre 2024 5 110
1 août 2015 à 11:42
Re,

vite fait, pour bloquer la plage par VBA
exemple pour la plage A1:K20, commencer par sélectionner la plage/clic droit/Format de cellule/onglet Protection et décocher Verrouillée
protéger la feuille avec un mot de passe exemple dans mon code "open"

puis clic droit sur l'onglet de ta feuille/Visualiser le code et coller ce code

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Application.CountA(Range(Cells(ActiveCell.Row, 1), Cells(ActiveCell.Row, 11))) = 11 Then
ActiveSheet.Unprotect Password:="open"
Range(Cells(ActiveCell.Row, 1), Cells(ActiveCell.Row, 11)).Locked = True
ActiveSheet.Protect Password:="open"
End If
End Sub

0
Salut Mike, encore une fois, merci pour tes réponses.
Je n'ai pas pu essayer tes solutions, mais pour être plus précis, mon tableau va de A2 à N2000.
Bonnes vacances!
0
Mike-31 Messages postés 18351 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 12 décembre 2024 5 110
1 août 2015 à 14:01
Re,

teste mon code parce que demain il sera trop tard pour 3 semaines

donc sélectionne A2:N2000 et déverrouille les

ensuite le code VBA est

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Application.CountA(Range(Cells(ActiveCell.Row, 1), Cells(ActiveCell.Row, 14))) = 14 Then
ActiveSheet.Unprotect Password:="open"
Range(Cells(ActiveCell.Row, 1), Cells(ActiveCell.Row, 14)).Locked = True
ActiveSheet.Protect Password:="open"
End If
End Sub


0
Je viens de tester ton code mais je peux toujours modifier les cellules..
J'ai déjà un code sur cette page, je peux en mettre un autre en suivant?
Aussi, je souhaite que certaines cellules restent verrouillées si cela est possible.
Merci encore pour ton aide.
0
Mike-31 Messages postés 18351 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 12 décembre 2024 5 110
1 août 2015 à 14:55
Re,

quel type de code se trouve sur les propriétés de ta feuille, copie le s'il te plait
0
C'est le suivant, c'est toi qui me l'a donné! Il permet de mettre la date automatiquement en B quand A est renseigné et de ne plus pouvoir modifier la date par la suite.


Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A:A")) Is Nothing Then
If Target = "" Or Target(1, 2) <> "" Then
Exit Sub
Else
ActiveSheet.Unprotect Password:="xxx"
Target(1, 2) = Date
ActiveSheet.Protect Password:="xxx"
End If
End If
End Sub
0
Mike-31 Messages postés 18351 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 12 décembre 2024 5 110
1 août 2015 à 16:20
Re,

les deux codes sont compatibles, par contre as tu mis exactement le même mot de passe dans les deux codes
et dans les deux codes, remplace cette ligne
ActiveSheet.Unprotect Password:="xxx"
par

ActiveSheet.Protect Password:="xxx", DrawingObjects:=True, Contents:=True, Scenarios:=True
ActiveSheet.EnableSelection = xlNoRestrictions
0
J'ai testé et excel me met le message d'erreur suivant :
erreur 1004 : erreur définie par l'application ou par l'objet.
Dois-je absolument déverrouiller toutes les cases? Car certaines cellules contiennent des formules et j'aimerais garder ces cellules en "verrouillées".
0
Mike-31 Messages postés 18351 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 12 décembre 2024 5 110
1 août 2015 à 16:53
Re,

Ah ça c'est nouveau que certaines cellules contiennent des formules et cela pose effectivement problème parce qu'une cellule contenant une formule même si la formule ne renvoie rien elle n'est pas vide puisqu'elle contient une formule et ce soir je n'ai plus le temps de contrôler ou adapter le code qui ne va plus
0
Ok Mike, merci tes réponses, je ne pensais pas que le fait que certaines cellules contiennent des formules changerait la donne, désolé.
Bonnes vacances à toi.
0
Je vais essayer d'être plus précis dans ce cas :
- la colonne A est déverrouillée et ne contient aucune formule : cependant, grâce au 1er code que tu m'as donné, la colonne B se remplie automatiquement par la date du jour quand A est remplie. La colonne B est verrouillée.
- la colonne C est déverrouillée et sans formule
- les colonnes D, H, K et M sont déverrouillées et sans formule mais avec un menu déroulant pour D et H
- les colonnes E, F, G, I sont déverrouillées et sans formule
- les colonnes J et N sont verrouillées avec formule
Mon but est de parvenir à bloquer les colonnes D, F, I et K (ou au moins certaines d'entres elles) quand la ligne est remplie.
C'est à dire qu'une fois que la ligne (de A à N) est renseignée en totalité, les utilisateurs à qui je vais transmettre le tableau ne puissent plus les modifier.
0
Raymond PENTIER Messages postés 58763 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 18 décembre 2024 17 255
1 août 2015 à 19:02
Bibi,
en tenant compte du fait que tu ajoutes régulièrement des contraintes supplémentaires, et pour répondre simplement et efficacement à ta question initiale "Je souhaiterais savoir s'il est possible de bloquer l'accès à une ligne une fois que toutes les cellules de cette ligne sont renseignées", et sachant que "les utilisateurs à qui je vais transmettre le tableau ne puissent plus les modifier", voici ce que tu dois faire :
Tu envoies un faux tableau, sans formules ; l'utilisateur renseigne les cellules qui le concernent et te renvoie le fichier ; tu récupères ces données dans un vrai tableau avec formules.
0
Merci pour ta réponse mais je ne peux malheureusement pas faire comme ça, les formules étant indispensables pour que le tableau se remplisse correctement.
Et vu que je vais diffuser ce tableau à de nombreuses personnes, impossible de leur demander à tous de me le renvoyer..
0