Erreur 1004 avec une méthode not intersect

Bonjour à tous,

Je travaille sur un fichier de calcul de situation de paiement, j'ai déjà bien avancé avec vos conseils lors de mes précédents posts mais là je bloque sur une erreur 1004.

Lorsque je suis sur ma feuille "CPP TITULAIRE-ST" je sélectionne en cellule F1 si il s'agit d'une "AVANCE".

Si c'est une avance, je demande à la macro d'alimenter les cellules D147 et E 147 avec les valeurs contenues dans les cellules K33 et K34 sur la feuille "CALCUL AVANCE TITULAIRE".

Lorsque je fais la sélection en F1 j'obtiens le message "erreur d'exécution 1004. Erreur définie par l'application ou par l'objet".

La macro stoppe à la dernière ligne ci-dessous.

Private Sub Worksheet_Change(ByVal Target As Range)

'déprotege la feuille'

ActiveSheet.Unprotect "CRF"

'vérifie si la cellule F1 est modifiée et fait des calculs en conséquence'

   If Not Intersect(Target, Range("F1")) Is Nothing Then

   If Range("F1") = "AVANCE" Then

        'récupére les montants d'avance du titulaire sur la feuille calcul avance titulaire'

        Worksheets("CPP TITULAIRE-ST").Range("D147") = Worksheets("CALCUL AVANCE TITULAIRE").Range("K33")
        Worksheets("CPP TITULAIRE-ST").Range("E147") = Worksheets("CALCUL AVANCE TITULAIRE").Range("K34")

Mon fichier est sans doute très instable et/ou mal codé mais je n'arrive pas à trouver la solution pour passer au delà de cette erreur.

Auriez vous une idée ?

merci d'avance

Salut,

A mon sens tu te trompe d’événement pour le lancement de ta macro :

Worksheet_Change se traduit par "exécuter ce code dès que l'utilisateur change de feuille"

Worksheet_SelectionChange se traduit par "exécuter ce code dès que l'utilisateur sélectionne une nouvelle case"

A mon avis c'est le deuxième qui est adapté dans ton cas,

Girodo,

Bonjour,

Il semble y avoir de la confusion à l'exécution du code.

Le code, en écrivant dans la feuille, déclenche à répétition l'exécution Private Sub Worksheet_Change(ByVal Target As Range).

Les Unprotect et Protect finissent par se mêler et le code bogue en tentant d'écrire dans une feuille protégée.

Je te suggère de placer ce code dans ThisWorkBook

Private Sub Workbook_Open()
Dim Ws As Worksheet

   For Each Ws In ThisWorkbook.Worksheets
      Ws.Protect "CRF", UserInterfaceOnly:=True
   Next Ws
End Sub

Et d'enlever les Protect et Unprotect. Ainsi, le code pourra s'exécuter et les feuilles seront toujours protégées pour l'utilisateur.

Il peut arriver que certains traitements ne passent pas et qu'il faille quand même déprotéger la feuille. Mais c'est plutôt rare.

J'ai déjà appliqué les changements dans ton fichier.

Vois si ça convient....

ric

Bonjour à tous,

Merci Girodo pour l'explication sur les événements, je n'avais effectivement pas fait attention à ce détail.

et Ric merci beaucoup, ça fonctionne effectivement beaucoup mieux, j'avais pensé à placer le code pour vérouiller / dévérouiller les feuilles mais sans penser à écrire comme tu l'as fait "For each...."

J'ai encore du travail manifestement !

Encore merci à tous les deux et bonne journée !

Rechercher des sujets similaires à "erreur 1004 methode intersect"