Verrouiller 7 cellules sur 9 si 2 sont déjà remplies

Résolu
Tomlille -  
 Tomlille -
Bonjour,

la demande est dans le titre !

Je cherche à verrouiller la saisie de cellules de manière conditionnelle : j'ai un choix de 2 formations dans mon entreprise à proposer sur un ensemble de 9. Je souhaite que les personnes puissent s'inscrire sur 2 de ces formations et qu'à partir du moment ou 2 cellules sont remplies, le reste soit insaisissable... j'espère être clair !

En espérant qu'il n'y ai pas un algorithme de dingue à saisir :)

Merci d'avance pour les solutions

2 réponses

  1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour,

    pour votre fichier, pensez a enlever le verrouillage par defaut de cellules de saisie dans format cellule protection. Surtout mettre un mot de passe sur le VBA si c'est necessaire

    fichier exemple: https://www.cjoint.com/c/EKynQ22au8f
    0
    1. Tomlille
       
      Bonjour,

      merci tout d'abord pour votre réponse, toutefois (je ne sais pas si ça vient de ma version d'Excel) mais ça me mets un message de débogage quand je tente de rentrer un 3ème chiffre...et si je clique sur le bouton "fin", le remplissage de la cellule s'effectue quand même. Peut-être ne suis pas assez avancé sur Excel pour utiliser ce genre d'outil ?

      Merci d'avance
      Cdt
      0
      1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717 > Tomlille
         
        Re,

        un message de débogage quand je tente de rentrer un 3ème chiffre dans votre fichier avez-vous fait tout ce qui est dans le "mien"

        si je clique sur le bouton "fin" y a pas de bouton fin dans "mon" fichier !!

        et surtout pour vous simplifier la vie, prenez le fichier exemple de
        eriiic 24 nov. 2015 à 16:24
        0
    2. Tomlille
       
      Bonjour,

      encore un grand merci pour vos réponses, je vais effectivement prendre l'exemple d'Eriiic qui correspond totalement à ce que je recherchais.

      Merci bcp
      Cdt
      0
  2. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonjour,

    Sans vba, avec une validation de données personnalisée : =NBVAL($A$2:$A$8)<=2
    https://www.cjoint.com/c/EKypxJzTr6Z
    eric

    En essayant continuellement, on finit par réussir.
    Donc plus ça rate, plus on a de chances que ça marche.(les Shadoks)
    En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
    0
    1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Bonjour eriiic,

      On reconnait la un pro d'excel, ce qui n'est pas vraiment mon cas
      0
    2. Tomlille
       
      Bonjour Eriiic,

      merci bcp pour votre solution, qui correspond tout à fait à mon besoin !!

      Et merci à tous pour la réactivité dont vous faites preuve : BRAVO !!
      0
    3. Tomlille
       
      Bonjour eriiic,

      je souhaite insérer des dates dans mes cellules, et que le paramétrage bloque à 2 cellules remplies pour la même année (exemple : une cellule avec 30/11/2015 et l'autre avec 6/04/2015. Je peux remplir une troisième cellule avec 2013 ou 2014, mais pas avec 2015...). Est-ce possible ?

      Un grand merci d'avance
      Thomas
      0
    4. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      Bonjour,

      Je n'ai pas trouvé de formule simple, beaucoup trop longue...
      Je te propose une macro en vba.
      Alt+F11 pour voir le code dans le module Feuil1. A copier-coller dans le module de ta feuille, adapter la plage à surveiller.
      https://www.cjoint.com/c/ELbr7BqspNu
      Private Sub Worksheet_Change(ByVal Target As Range)
      ' interdire la saisie de plus de 2 fois la même année dans la plage pl
          Const pl As String = "A2:A10"    ' adapter la plage
      
          Dim Dict As Variant, cle As String, lig As Long
          Dim datas, ok As Boolean
          Set Dict = CreateObject("Scripting.Dictionary")
      
          datas = Range(pl).Value
          For lig = 1 To UBound(datas)
              If datas(lig, 1) <> 0 Then
                  cle = Year(datas(lig, 1))
                  If Dict.exists(cle) Then
                      ' année  connue
                      If Dict.Item(cle) = 2 Then
                          MsgBox "Année " & cle & " déjà présente 2 fois."
                          Application.EnableEvents = False
                          Application.Undo
                          Application.EnableEvents = True
                          Exit For
                      Else
                          ' compter utilisation
                          Dict.Item(cle) = Dict.Item(cle) + 1
                      End If
                  Else
                      ' nouvelle année
                      Dict.Item(cle) = 1
                  End If
              End If
          Next lig
      End Sub

      eric
      0
    5. Tomlille > eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention  
       
      Bonjour eriiic,

      ça marche à merveille chez toi, par contre quand je colle et que j'adapte à ma plage, ça ne fonctionne pas... ma plage de cellules est en horizontal : est-ce que ça change quelque chose ?
      En gros ma plage de sélection est de L4 à T4, et je dois adapter ensuite à la ligne L5:T5, L6:T6, etc.
      Est-ce que je dois adapter quelque chose dans le VBA ?
      A moins que ce ne sois juste une "validation" du VBA ? => une fois que j'ai copié-collé, je dois valider la saisie quelque part ?

      Un grand grand grand merci pour ton aide !!

      Cdt
      Thomas
      0