Bloquer une ligne lorsqu'elle est pleine

Bibi -  
 Bibi -
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

16 réponses

  1. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    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
    1. Bibi
       
      Merci je te réponds demain car je n'ai plus accès au fichier là
      0
    2. Bibi
       
      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
    3. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
       
      Alors ça va être difficile, je part en vacance
      0
    4. Bibi
       
      Ça n'est pas super pressé Mike, ça peut attendre ton retour! Merci pour ta réponse.
      0
  2. Raymond PENTIER Messages postés 58213 Date d'inscription   Statut Contributeur Dernière intervention   17 482
     
    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
  3. Bibi
     
    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
  4. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    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
    1. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
       
      PS: dans mes explications j'ai fait une erreur il ne s'agit pas de A1 à L20 mais
      A1 à K20
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    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
  7. Bibi
     
    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
  8. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    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
  9. Bibi
     
    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
  10. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    Re,

    quel type de code se trouve sur les propriétés de ta feuille, copie le s'il te plait
    0
  11. Bibi
     
    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
  12. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    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
  13. Bibi
     
    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
  14. Mike-31 Messages postés 18405 Date d'inscription   Statut Contributeur Dernière intervention   5 147
     
    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
  15. Bibi
     
    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
  16. Bibi
     
    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
  17. Raymond PENTIER Messages postés 58213 Date d'inscription   Statut Contributeur Dernière intervention   17 482
     
    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
    1. Bibi
       
      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