Bonsoir le forum, la macro ci dessous répond à mes besoins, même si c'est certain elle n'est bien écrite
, mais j'ai besoin d'ajouter une autre condition, pourriez vous m'aidez svp
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Range("D11") = "" Then
ActiveSheet.Shapes("Rectangle 26").Visible = False
Else
ActiveSheet.Shapes("Rectangle 26").Visible = True
End If
If Range("U29") < Range("V29") Then
ActiveSheet.Shapes("Groupe 38").Visible = False
End If
On Error GoTo 0
If Target.Count > 1 Then Exit Sub
If Target.Address <> "$H$21" Then Exit Sub
If Target.Value = "" Then Exit Sub
If Not Intersect(Target, Range("H21")) Is Nothing Then
Me.Cells(21, "D").Value = Me.Cells(50, "D").Value
End If
end sub
condition à ajouter :
If Range("U29") < Range("V29") Then
activeSheet.Range("D11") = ""
mais cela engendre un bug car incompatible avec la dernière condition ou on demande de remplir D21 avec D50 si on modifie H21 et je suis incapable de combiner les 2 conditions
Bonsoir Pat,
Le problème est que si vous modifiez D11 vous exécuter la macro.
Macro où vous modifiez D11, donc vous exécuter la macro ... ect ect
Généralement ça se termine mal. On appelle ça de la ré entrance.
Pour éviter ça, vous pouvez inhiber tout nouveau événement avec Application.EnableEvents = False
et à la fin vous remettez tout correct avec Application.EnableEvents = True.
Ne pas oublier de mettre un On error goto pour être sur qu'en cas de pn inopiné le flag True sera remis, car sinon cette macro resterait à inactive.
Essayez comme ça pour voir :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Fin
Application.EnableEvents = False
On Error Resume Next
If Range("D11") = "" Then...
Bonsoir Pat,
Le problème est que si vous modifiez D11 vous exécuter la macro.
Macro où vous modifiez D11, donc vous exécuter la macro ... ect ect
Généralement ça se termine mal. On appelle ça de la ré entrance.
Pour éviter ça, vous pouvez inhiber tout nouveau événement avec Application.EnableEvents = False
et à la fin vous remettez tout correct avec Application.EnableEvents = True.
Ne pas oublier de mettre un On error goto pour être sur qu'en cas de pn inopiné le flag True sera remis, car sinon cette macro resterait à inactive.
Essayez comme ça pour voir :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Fin
Application.EnableEvents = False
On Error Resume Next
If Range("D11") = "" Then
ActiveSheet.Shapes("Rectangle 26").Visible = False
Else
ActiveSheet.Shapes("Rectangle 26").Visible = True
End If
If Range("U29") < Range("V29") Then
ActiveSheet.Shapes("Groupe 38").Visible = False
Range("D11") = ""
End If
On Error GoTo 0
If Target.Count = 1 And Target.Address = "$H$21" And Target.Value <> "" Then
If Not Intersect(Target, Range("H21")) Is Nothing Then
Me.Cells(21, "D").Value = Me.Cells(50, "D").Value
End If
End If
Fin:
Application.EnableEvents = True
End Sub
Mais pour être sur de passer sur la Ligne Fin il faut éviter les exit sub, sinon le flag resterait à False, donc j'utilise un AND qui valide la suite.
Par contre, au prochain changement de valeur dans une cellule alors comme D11 et vide ...
A voir si c'est bien ce que vous vouliez, sinon il y a une erreur de raisonnement au départ.
merci pour votre aide, mais en relisant ce fil et en testant votre solution, je me suis rendu compte que je vous ai induit en erreur, en effet ce n'est pas :
If Range("U29") < Range("V29") Then activeSheet.Range("D11") = ""
mais
If Range("U29") < Range("V29") Then activeSheet.Range("D21") = ""
Alors j'ai testé votre solution en remplaçant
If Range("U29") < Range("V29") Then activeSheet.Range("D11") = ""
par
If Range("U29") < Range("V29") Then activeSheet.Range("D21") = ""
et ça à l'air de fonctionner également qu'en pensez vous ?
oui bien sur, je retape toujours à la main car je souhaite essayer de comprendre ce que vous avez la gentillesse de nous aider à solutionner.
J'ai donc pris votre solution en remplaçant activeSheet.Range("D11") = "" par activeSheet.Range("D21") = "", et après plusieurs tests, votre solution fonctionne bien