XL 2019 macro conditon

chinel

XLDnaute Impliqué
Bonjour tout le monde, je mets en place une macro qui doit effacer le contenu d'une plage de cellules d'après le contenu d'une autre cellule mais cela ne fonctionne pas, besoin d'aide merci !


Private Sub Worksheet_Change(ByVal Target As Range)
If Range("A9").Value = "à l'arrêt" Then
Range("B8,B10,B11,B12,B13,B14,B15").Select
Selection.ClearContents
End If
End Sub
 

M12

XLDnaute Accro
Bonjour tout le monde, je mets en place une macro qui doit effacer le contenu d'une plage de cellules d'après le contenu d'une autre cellule mais cela ne fonctionne pas, besoin d'aide merci !


Private Sub Worksheet_Change(ByVal Target As Range)
If Range("A9").Value = "à l'arrêt" Then
Range("B8,B10,B11,B12,B13,B14,B15").Select
Selection.ClearContents
End If
End Sub
Bonjour,
Teste comme ceci
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Application.Intersect(Target, Range("A9")) Is Nothing Then
   If Target.Value = "à l'arrêt" Then
     Range("B8,B10:B15").ClearContents
   End If
  End If
End Sub
 

Deadpool_CC

XLDnaute Accro
Bonjour,

Alors comment dire que tu ne peut pas avoir 2 fonction avec le même nom ... regroupe ton code dans une seule et même sub Worsheet_Change()
1672137977798.png


[Edit] Comme le dit si bien @job75 (salut en passant)
 

chinel

XLDnaute Impliqué
Re,
Normal tu places deux fois l'instruction CHANGE

place un des deux codes fournis à la suite de ton premier Change
Comme ça ?

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [B:B,G:G]) Is Nothing Then Exit Sub
Application.EnableEvents = False 'désactive les évènements
If Target.Count > 1 Then Application.Undo: GoTo 1 'annule les entrées ou effacements multiples
If Target = "" Or (Application.CountIf([B:B], Target) + Application.CountIf([G:G], Target)) = 1 Then GoTo 1
Target.Select
MsgBox "Cette personne est déjà dans le planning !", 48, "Doublon"
Target = ""
1 Application.EnableEvents = True 'réactive les évènements
Application.EnableEvents = False
If Range("A9") = "à l'arrêt" Then Range("B8,B10:B15") = ""
Application.EnableEvents = True
End Sub
 

M12

XLDnaute Accro
Comme ça ?

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [B:B,G:G]) Is Nothing Then Exit Sub
Application.EnableEvents = False 'désactive les évènements
If Target.Count > 1 Then Application.Undo: GoTo 1 'annule les entrées ou effacements multiples
If Target = "" Or (Application.CountIf([B:B], Target) + Application.CountIf([G:G], Target)) = 1 Then GoTo 1
Target.Select
MsgBox "Cette personne est déjà dans le planning !", 48, "Doublon"
Target = ""
1 Application.EnableEvents = True 'réactive les évènements
Application.EnableEvents = False
If Range("A9") = "à l'arrêt" Then Range("B8,B10:B15") = ""
Application.EnableEvents = True
End Sub
j'aurais plutôt commencer par l'autre code au-dessus et le tien après, vu que tu places un exit sub sur ton code et des renvois
 

job75

XLDnaute Barbatruc
Donc il faut une seule macro Worksheet_Change :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [A9,B:B,G:G]) Is Nothing Then Exit Sub
Application.EnableEvents = False 'désactive les évènements
If Range("A9") = "à l'arrêt" Then Range("B8,B10:B15") = "": GoTo 1
If Target.Count > 1 Then Application.Undo: GoTo 1 'annule les entrées ou effacements multiples
If Target = "" Or (Application.CountIf([B:B], Target) + Application.CountIf([G:G], Target)) = 1 Then GoTo 1
Target.Select
MsgBox "Cette personne est déjà dans le planning !", 48, "Doublon"
Target = ""
1 Application.EnableEvents = True 'réactive les évènements
End Sub
 

chinel

XLDnaute Impliqué
Donc il faut une seule macro Worksheet_Change :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [A9,B:B,G:G]) Is Nothing Then Exit Sub
Application.EnableEvents = False 'désactive les évènements
If Range("A9") = "à l'arrêt" Then Range("B8,B10:B15") = "": GoTo 1
If Target.Count > 1 Then Application.Undo: GoTo 1 'annule les entrées ou effacements multiples
If Target = "" Or (Application.CountIf([B:B], Target) + Application.CountIf([G:G], Target)) = 1 Then GoTo 1
Target.Select
MsgBox "Cette personne est déjà dans le planning !", 48, "Doublon"
Target = ""
1 Application.EnableEvents = True 'réactive les évènements
End Sub
Merci pour votre aide maintenant, il me reste encore à faire pour les autres groupes de travail
Donc si je comprends bien, pour les autres groupes de travail, je dois mettre:

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [A9,B:B,G:G]) Is Nothing Then Exit Sub
Application.EnableEvents = False 'désactive les évènements
If Range("A9") = "à l'arrêt" Then Range("B8,B10:B15") = "": GoTo 1
if Range("A18")="à l'arrêt" Then Range("B17,B19:B22") = "": GoTo 1
If Target.Count > 1 Then Application.Undo: GoTo 1 'annule les entrées ou effacements multiples
If Target = "" Or (Application.CountIf([B:B], Target) + Application.CountIf([G:G], Target)) = 1 Then GoTo 1
Target.Select
MsgBox "Cette personne est déjà dans le planning !", 48, "Doublon"
Target = ""
1 Application.EnableEvents = True 'réactive les évènements
End Sub
 

Discussions similaires

Réponses
26
Affichages
1 K

Statistiques des forums

Discussions
312 216
Messages
2 086 351
Membres
103 195
dernier inscrit
martel.jg