XL 2019 Plusieurs conditions avec Sub Worksheet_Change (ByVal Target As Range)

pat66

XLDnaute Impliqué
Bonjour le forum,

Je reviens vers vous et sollicite votre expertise car j'ai du mal à combiner ces 2 macros, à savoir :

Si Worksheets("Feuil1").Range("F30") = "A" ou si Worksheets("Feuil1").Range ("F30") = "B" ou Worksheets("Feuil1").Range("F30") = "C" then
exit sub
else
Call reinitioption
end if
end sub

Si Worksheets("Feuil1").Range("G195") <> 0 Or Worksheets("Feuil2").Range("AM106") = 2 Or Worksheets("Feuil2").Range("Y151") = "Non" Then
Exit Sub
else
Call reinitioption
end if
end sub



PS : dans les 2 cas il suffit qu'une des 3 valeurs soit différente pour activer Call reinitioption

Un grand merci pour votre aide

Pat66
 
Dernière édition:
Solution
Avec trois feuilles, c'est peut être plus simple de passer par des "Set", ce qui évite plusieurs "With" :
VB:
Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Fin: If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, [F30]) Is Nothing Then
        Set F2 = Sheets("Feuil2")
        Set F3 = Sheets("Feuil3")
        If (Target = "A" Or Target = "B" Or Target = "C") Or _
            F2.[M6] = 1 Or F2.[K17] = "Oui" Or F3.[G5] = 0 Then
                Call Reinitioption
        End If
    End If
Fin:
End Sub
Sub Reinitioption() ' Pour test
    MsgBox "Exécution de Reinitioption."
End Sub

pat66

XLDnaute Impliqué
re,

puisque vous avez trouvé la solution à mon problème, auriez vous la gentillesse de m'aider à ajouter une condition supplémentaire car je viens de m'apercevoir que je dois aussi tester G5 de la feuil3 dans les mêmes conditions, à savoir qu'un changement de F30 sur la feuil1 teste G5 de la feuil3

Si G5 de la feuil3 = 5 then
Call Reinitioption
sinon rien

merci d'avance



VB:
Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Fin: If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, [F30]) Is Nothing Then
        With Sheets("Feuil2")
            If (Target <> "A" Or Target <> "B" Or Target <> "C") Or _
                .[G195] <> 0 Or .[AM106] = 2 Or .[Y151] = "Non" Then
                Call Reinitioption
            End If
        End With
    End If
Fin:
End Sub
Sub Reinitioption() ' Pour test
    MsgBox "Exécution de Reinitioption."
End Sub
 
Dernière édition:

pat66

XLDnaute Impliqué
re,

je me suis inspiré de votre solution et je crois avoir trouvé comment ajouter cette condition
Après quelques tests ça à l'air de fonctionner ?, qu'en pensez vous ?

VB:
Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Fin: If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, [F30]) Is Nothing Then
        With Sheets("Feuil2")
            If (Target <> "A" And Target <> "B" And Target <> "C") Or _
                .[M6] = 1 Or .[K17] = "Oui" Then
                Call Reinitioption
                         End If
        With Sheets("Feuil3")
             If .[G5] = 0 Then
                Call Reinitioption
End If
  End With
   End With
    End If
Fin:
End Sub
Sub Reinitioption() ' Pour test
    MsgBox "Exécution de Reinitioption."
End Sub
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Avec trois feuilles, c'est peut être plus simple de passer par des "Set", ce qui évite plusieurs "With" :
VB:
Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Fin: If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, [F30]) Is Nothing Then
        Set F2 = Sheets("Feuil2")
        Set F3 = Sheets("Feuil3")
        If (Target = "A" Or Target = "B" Or Target = "C") Or _
            F2.[M6] = 1 Or F2.[K17] = "Oui" Or F3.[G5] = 0 Then
                Call Reinitioption
        End If
    End If
Fin:
End Sub
Sub Reinitioption() ' Pour test
    MsgBox "Exécution de Reinitioption."
End Sub
 

Discussions similaires

Réponses
3
Affichages
202

Statistiques des forums

Discussions
312 211
Messages
2 086 291
Membres
103 171
dernier inscrit
clemm