XL 2021 Interdire sélection colonne si valeur cellule

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

roopih

XLDnaute Nouveau
Bonjour tt le monde,

Je veux intégrer une "procédure de clôture de saisie d'une colonne", si la valeur de sa première ligne est coché par "X".

Si non, sans la valeur "X" dans la première ligne, les cellules de la colonne peuvent être sélectionnées.

Merci d'avance pour l'aide.
 

Pièces jointes

Bonjour @roopih et bienvenue sur XLD 🙂,
Bonjour @fanfan38 😉,

J'ai aussi traité les cas où la sélection comporte plusieurs plages ou si la plage s'étend sur plus d'une colonne.
On refuse la sélection dès que celle-ci comporte au moins une cellule issue d'une colonne "interdite".
En cas de sélection interdite, on sélectionne la première cellule de la ligne n°1 qui n'est pas égale à "x".

le code est un peu commenté :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim rgPlage As Range, rgPremlig As Range, rgVide, j As Long

   For Each rgPlage In Target.Areas    ' pour chaque plage de la selection
      ' on cherche les cellules de la première ligne (ligne n° 1) correspondant la selection
      Set rgPremlig = Intersect(rgPlage.EntireColumn, Rows(1))
      ' on recherche le numéro de la colonne contenant "x", on retourne 0 si pas de "x"
      j = Application.IfError(Application.Match("x", rgPremlig, 0), 0)
      If j <> 0 Then
         ' il y a un x , on recherche la 1ère cellule de la ligne n° 1 n'est pas égale à "x"
         ' on la sélectionne et on informe l'utilisateur
         For j = 1 To Me.UsedRange.Column + Me.UsedRange.Columns.Count
            If LCase(Cells(1, j)) <> "x" Then Cells(1, j).Select: Exit For
         Next j
         MsgBox "Votre sélection est refusée car elle inclut une ou " & _
            "plusieurs cellules issues de colonnes interdites à la saisie.", vbCritical
      End If
   Next rgPlage
End Sub
 

Pièces jointes

Bonjour roopih, fanfan38, mapomme,

En verrouillant les cellules de la feuille protégée :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
Application.EnableEvents = False 'désactive les évènements
Me.Unprotect "toto" 'ôte la protection de la feuille
Me.EnableSelection = xlUnlockedCells
Cells.Locked = False 'déverrouille tout
Cells.Interior.ColorIndex = xlNone 'aucune couleur
Rows(1).Replace "X", "#N/A", xlWhole, MatchCase:=False
On Error Resume Next 'si aucune Specialcell
With Rows(1).SpecialCells(xlCellTypeConstants, 16) 'valeurs d'erreur
    .Replace "#N/A", "X"
    .EntireColumn.Locked = True 'verrouille les colonnes "X"
    .EntireColumn.Interior.Color = RGB(244, 176, 132) 'orange
End With
Me.Protect "toto" 'protège la feuille
Application.EnableEvents = True 'réactive les évènements
End Sub
A+
 

Pièces jointes

On peut sans inconvénient remplacer la mise en couleur des colonnes par une MFC sur toute la feuille =A$1="X"
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
Application.EnableEvents = False 'désactive les évènements
Me.Unprotect "toto" 'ôte la protection de la feuille
Me.EnableSelection = xlUnlockedCells
Cells.Locked = False 'déverrouille tout
Rows(1).Replace "X", "#N/A", xlWhole, MatchCase:=False
On Error Resume Next 'si aucune Specialcell
With Rows(1).SpecialCells(xlCellTypeConstants, 16) 'valeurs d'erreur
    .Replace "#N/A", "X"
    .EntireColumn.Locked = True 'verrouille les colonnes "X"
End With
Me.Protect "toto" 'protège la feuille
Application.EnableEvents = True 'réactive les évènements
End Sub
 

Pièces jointes

S'il y a un "x" dans toutes les cellules de la 1ère ligne ça ne va pas...
C'est vrai. Mais dans ce cas, toute sélection est interdite. Même n'avoir qu'une seule cellule sélectionnée (la cellule active) devient une chose interdite. On est donc dans un cas qu'on ne peut pas résoudre...
Je préfère donc encore aboutir à une erreur d'exécution révélatrice de cette situation.
nota : évidemment je me place dans le cas de la sélection et pas dans le cas de la méthode par protection😉.
 
Dernière édition:
Bonjour,

Désolé, je rebondis sur le sujet.

J'ai opté pour la solution de mapomme,

Jai rajouté le même code en l'adaptant bien sur pour les lignes cochés en "X".
mais certains utilisateurs et en activant les macros, peuvent sélectionnés les colonnes cochés "X", le code ne fonctionne pas pour certaines feuilles, pour les autres oui.
Sur mon PC, tout fonctionne à merveille.
C'est bizare.
Pouvez vous m'expliquer se phénomène.

Merci d'avance.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour