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)
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Merci pour votre retour
Partager