Comment condamner l'écriture de cellule en fonction de..?

Bonjour à toutes et tous,

Je me retrouve face à une impasse excel... La fois précédente vous m'aviez sortie de cette panade haut là main, je retente donc ma chance sur le forum ! Il me faudrait une macro pour bloquer l'écriture dans certaines cellules en fonction de l'info contenue dans d'autres cellules :

J'ai un tableau avec en colonne A1 "client identifié", colonne B1 "décès déjà connu", colonne C1 "décès renseigné", colonne D1 "montant capital", colonne E1 "date transmission", colonne F1 "montant".

Je souhaite que :

. Si la colonne A (A2, A3, A4....) = "NON", que toues les autres cellules B C D E F de la même ligne soient condamnées en écriture

. Si la colonne A (A2, A3, A4....) = "OUI" et la colonne B (B2, B3, B4...) = "OUI", que la cellule E de la même ligne soit condamnée

. Si la colonne A (A2, A3, A4....) = "OUI" et la colonne B (B2, B3, B4...) = "NON", que toutes les cellules C D E F soient libres

Je joins à ma requête un visuel pour imager ma demande, "KO" = cellule condamnée, impossible d'écrire dans la cellule.

Merci à vous !

Cécile

image001

Bonjour

eviter si possible de poster en double

Cordialement

bonsoir

photo shop ?????

pour consolider la reponse d'Amadeus ;une piece jointe (une vraie) serai bien venue ; desolé je n'ai rien vu

cordialement

cecileuh a écrit :

Bonjour à toutes et tous,

Je me retrouve face à une impasse excel... La fois précédente vous m'aviez sortie de cette panade haut là main, je retente donc ma chance sur le forum ! Il me faudrait une macro pour bloquer l'écriture dans certaines cellules en fonction de l'info contenue dans d'autres cellules :

J'ai un tableau avec en colonne A1 "client identifié", colonne B1 "décès déjà connu", colonne C1 "décès renseigné", colonne D1 "montant capital", colonne E1 "date transmission", colonne F1 "montant".

Je souhaite que :

. Si la colonne A (A2, A3, A4....) = "NON", que toues les autres cellules B C D E F de la même ligne soient condamnées en écriture

. Si la colonne A (A2, A3, A4....) = "OUI" et la colonne B (B2, B3, B4...) = "OUI", que la cellule E de la même ligne soit condamnée

. Si la colonne A (A2, A3, A4....) = "OUI" et la colonne B (B2, B3, B4...) = "NON", que toutes les cellules C D E F soient libres

Je joins à ma requête un visuel pour imager ma demande, "KO" = cellule condamnée, impossible d'écrire dans la cellule.

Merci à vous !

Cécile

Public Sub Worksheet_Change(ByVal Target As Range)
'Worksheet_change se declenche a chaque tentative de modification
'Elle transmet via Target la cellule que l'on modifie

On Error GoTo NEVER_Protected

'on desactive temporairement la protection de la feuille
ActiveSheet.Unprotect

        'Si on est dans la colonne A pour analyse NON
        derlign_a = Sheets("Feuil1").Range("A" & Rows.Count).End(xlUp).Row
        If Not Application.Intersect(Target, Range("A2:A" & derlign_a)) Is Nothing Then

        'cas special : si le client etait non (erreur de saisie par exemple) puis devient oui
        'je libere les colonnes de droite pour autoriser saisie colonne B ensuite selon OUI/NON colonne B
        'mes boucles IF feront le travail à autoriser ou non
        If Target.Value <> "" And Target.Value = "OUI" Then
            Target.Offset(0, 1).Locked = False 'Colonne B
            Target.Offset(0, 2).Locked = False 'Colonne C
            Target.Offset(0, 3).Locked = False 'Colonne D
            Target.Offset(0, 4).Locked = False 'Colonne E
            Target.Offset(0, 5).Locked = False 'Colonne F
        End If

        ' on analyse si la cellule sur laquelle on est fait bien partie de la colonne A
            If Target.Value <> "" And Target.Value = "NON" Then
            'MsgBox "cas non"
            Target.Offset(0, 1).Locked = True 'Colonne B
            Target.Offset(0, 2).Locked = True 'Colonne C
            Target.Offset(0, 3).Locked = True 'Colonne D
            Target.Offset(0, 4).Locked = True 'Colonne E
            Target.Offset(0, 5).Locked = True 'Colonne F
            End If

                If Target.Value <> "" And Target.Value = "OUI" And Target.Offset(0, 1) = "OUI" Then
               ' MsgBox "cas oui oui"
                Target.Offset(0, 1).Locked = False 'Colonne B
                Target.Offset(0, 2).Locked = False 'Colonne C
                Target.Offset(0, 3).Locked = False 'Colonne D
                Target.Offset(0, 4).Locked = True 'Colonne E
                Target.Offset(0, 5).Locked = False 'Colonne F
                End If

                If Target.Value <> "" And Target.Value = "OUI" And Target.Offset(0, 1) = "NON" Then
                'MsgBox "cas oui non"
                Target.Offset(0, 1).Locked = False 'Colonne B
                Target.Offset(0, 2).Locked = False 'Colonne C
                Target.Offset(0, 3).Locked = False 'Colonne D
                Target.Offset(0, 4).Locked = False 'Colonne E
                Target.Offset(0, 5).Locked = False 'Colonne F
                End If

        End If

        'si on est dans la colonne b je force le passage a la colonne A pour activer les contrôles ci-dessus
        'je force le passage sur B pour activer les controles saisie colonne A/B
        'Si on est dans la colonne B
        derlign_b = Sheets("Feuil1").Range("B" & Rows.Count).End(xlUp).Row
        If Not Application.Intersect(Target, Range("B2:B" & derlign_b)) Is Nothing Then
        Target.Offset(0, -1).Activate
        Target.Offset(0, -1).Value = Target.Offset(0, -1).Value
        End If

'Cas classeur non protégé , le on error me fait passer ici et en dessous la protection s'active à la deuxième boucle ce sera bon
'ou je peux afficher un message à l'ouverture attention classeur non protégé et je ferme ma boucle
NEVER_Protected:

'on réactive la protection de la feuille
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True

End Sub

Bonsoir

Voici le code que je propose.

Merci de tester avec la PJ le comportement

Cdt

47classeur1.xlsm (20.96 Ko)

Bonjour,

Autre propositionen m'aidant du classeur de tichou3 :

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim c As Range
    ActiveSheet.Unprotect
    Application.EnableEvents = False
    For Each c In Target
        If Target.Column = 1 Then
            Cells(Target.Row, 2).Resize(, 5) = IIf(LCase(Target) = "non", "KO", "")
            Cells(Target.Row, 2).Resize(, 5).Locked = LCase(Target) = "non"
        ElseIf Target.Column = 2 Then
            Cells(Target.Row, 5) = IIf(LCase(Target) = "oui", "KO", "")
            Cells(Target.Row, 5).Locked = LCase(Target) = "oui"
        End If
        ActiveSheet.Protect
    Next c
    Application.EnableEvents = True
End Sub

Supprime les lignes avec Iif(...) si tu ne désires pas y mettre KO ou conserver des mentions déjà saisies

Tu peux modifier plusieurs cellules en une fois (collé, suppression)

eric

Bonjour à tous,

Merci Ti_chou et Eriiic c'est super !!! Je ne comprends pas comment vous faites, c'est un peu la 4ème dimension pour moi mais à chaque fois je suis bluffée !

Je vous confirme que ca marche bien ! Encore un grand merci pour le temps que vous y avez consacré ! Merci merci !

cecileuh a écrit :

Bonjour à tous,

Merci Ti_chou et Eriiic c'est super !!! Je ne comprends pas comment vous faites, c'est un peu la 4ème dimension pour moi mais à chaque fois je suis bluffée !

Je vous confirme que ca marche bien ! Encore un grand merci pour le temps que vous y avez consacré ! Merci merci !

Bonjour

Ravi que cela vous plaise

Cdt,

Rechercher des sujets similaires à "comment condamner ecriture fonction"