Noms définis et Worksheet_Change(ByVal Target As Range
Bonsoir,
Dans un fichier de plusieurs feuilles,
j'ai des noms définis sans référence à une feuille (Définir nom / référence = !M21 par exemple pour ProvAUTRE)
Dans la feuille base j'ai une macro qui utilise les noms définis sur un Worksheet_Change(ByVal Target As Range)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| Private Sub Worksheet_Change(ByVal Target As Range)
' permet la modification des cellules H11 et i11 pour la provision de fin contrat selon les cellules M19,20 et 21
If Not Application.Intersect(Target, Range("m14:m15")) Is Nothing Then 'ces cellules déterminent la valeur de la cellule M19
ActiveSheet.Unprotect 'dévérouille la feuille pour modifier les range dessous
Application.EnableEvents = False 'permet de bloquer les évènements tant que la macro n'est pas finie
Range("h11").Value = "PROVISION JOUR(S) FIN DE CONTRAT"
Range("i11").Value = Range("ProvDAYRATE").Value
Application.EnableEvents = True 'réactive les évènements
Else
If Not Application.Intersect(Target, Range("ProvAUTRE:SommenonAFFECT")) Is Nothing Then 'modification de M22 ou 23 qui ont la priorité
ActiveSheet.Unprotect 'dévérouille la feuille pour modifier les range dessous
Application.EnableEvents = False
If Range("SommenonAFFECT").Value <> 0 Then
Range("h11").Value = "MONTANT NON AFFECTé"
Range("i11").Value = Range("SommenonAFFECT").Value
Else
If Range("ProvAUTRE").Value <> 0 Then
Range("h11").Value = "PROVISION AUTRE FIN DE CONTRAT"
Range("i11").Value = Range("ProvAUTRE").Value
Else 'si l'un ou l'autre est remis à 0 alors on revient à la provision classique daily rate
Range("h11").Value = "PROVISION JOUR(S) FIN DE CONTRAT"
Range("i11").Value = Range("ProvDAYRATE").Value
End If
End If
Application.EnableEvents = True
ActiveSheet.Protect 'vérouille la feuille
End If
End If
end sub |
Dans une autre feuille, j'ai une case à option et selon le résultat, je viens changer un des paramètres (Cf. code ci-dessous) sur de la feuille BASE mais j'ai une erreur "méthode Range de l'objet Worksheet a échoué sur la macro précédente ligne 11.
Code:
1 2 3 4 5 6 7 8
| If Range("i8").Value = 1 Then 'si CDD alors ..
Worksheets("base").Range("e20").Value = "OUI" ' préca = oui par défaut
Else
Worksheets("base").Range("e20").Value = "NON" ' sinon préca = non par défaut
End If |
Je comprends a priori pourquoi cela bloque mais y trouver une solutions car avant d'avoir défini les noms pour les Range concernés, j'avais les références des cellules dans les Range et cela fonctionnait.
Merci pour votre retour