2 votes

Essayer d'obtenir que le script ne s'exécute pas si une cellule n'est pas vide.

Le code est relativement simple. Si je clique sur une cellule de L8:L98, et que la cellule est vide, alors la cellule est remplie de "T" et les autres cellules concernées sont vidées.

If Intersect(Target, Range("C7:C98")) Is Nothing And Not Intersect(Target, Range("L7:L98")) Is Nothing Then
    Application.EnableEvents = False
    With Intersect(Target, Range("L7:L98"))
        .Value = "T"
        .Offset(, 1).Resize(, Col).ClearContents
End With

Mon problème est que si une cellule de la même ligne dans la colonne C contient des données, je veux que l'instruction if renvoie false et ignore cette cellule. J'ai également essayé le code avec Intersect(target.offset(, -9)... et sans l'intersect. Aucun des deux n'a fonctionné pour moi.

2voto

Scott Craner Points 84329

L'intersection teste si la cellule dans laquelle vous cliquez est dans la plage, à moins que vous ne cliquiez sur une cellule de C et une cellule de L en même temps, vous ne pourrez jamais satisfaire le Si.

Testons donc si la cellule de la colonne C de la même ligne est vide ou non.

If Range("C" & Target.Row)="" And Not Intersect(Target, Range("L7:L98")) Is Nothing Then
    Application.EnableEvents = False
    With Intersect(Target, Range("L7:L98"))
        .Value = "T"
        .Offset(, 1).Resize(, Col).ClearContents
End With

1voto

brettdj Points 26353

Comme VBA ne court-circuite pas, le mieux est de décomposer votre code en deux tests IF (pour que la deuxième condition ne soit pas exécutée inutilement) :

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("L7:L98")) Is Nothing Then
    If Len(Cells(Target.Row, "C")) = 0 Then
        Application.EnableEvents = False
            With Intersect(Target, Range("L7:L98"))
                .Value = "T"
                'presume you set Col elswehere?
                .Offset(, 1).Resize(, Col).ClearContents
            End With
        Application.EnableEvents = True
    End If
End If
End Sub

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X