Formule Excel personnalisée

Résolu
Marc-F_70 -  
yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

J'ai un petit problème avec le code suivant :

' Feuil1 :
Function MaFonction()
Dim Feuil As Worksheet
Dim FeuilColl As Collection: Set FeuilColl = New Collection

FeuilColl.Add Worksheets("Feuil2")
FeuilColl.Add Worksheets("Feuil3")
FeuilColl.Add Worksheets("Feuil4")

' Je procède ainsi car je ne veux pas que toutes les feuilles du classeur soient affectées par la boucle qui suit :
For Each Feuil In FeuilColl
Feuil.Range("Cellule").Value = Me.Range("Cellule").Value ' C'est cette ligne qui pose problème. Si je la mets en commentaires, la fonction s'exécute correctement et la valeur 0 s'affiche dans la cellule CelluleDeMaFonction. Tel quel, elle s'interrompt et lqa valeur #Valeur s'affiche dans la cellule. Comment résoudre mon problème ?
Next
End Function

Private Sub Worksheet_Change(ByVal Target As Range)
' Ceci afin d'éviter une itération sans fin, car ce code est également inscrit dans Worksheet_Change de Feuil2.
If ((Me.Range("Cellule").Address = Target.Address) And (TypeName(Application.Caller) = "Error")) Then
Me.Range("CelluleDeMaFonction").Formula = "=Feuil1.MaFonction()"
End If
End Sub

' Feuil2 :
' Code identique, sauf que je remplace FeuilColl.Add Worksheets("Feuil2") par FeuilColl.Add Worksheets("Feuil1").


Ce que j'essai de faire, c'est que lorsque je change de valeur dans la cellule Cellule de la feuille Feuil1, cette même valeur s'inscrive dans la cellule Cellule de la feuille Feuil2, et vice-versa.

Si quelqu'un a une idée pour mon code ou pour une autre façon de procéder, j'attends de vos nouvelles...

1 réponse

  1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    bonjour,
    suggestion:
    Private Sub Worksheet_Change(ByVal Target As Range)
        If [a1].Address = Target.Address Then
            Application.EnableEvents = False
            Sheets("deux").[a1] = Target
            Application.EnableEvents = True
        End If
    End Sub
    0