Fonction Worksheet_Change

Bonjour

je n'arrive pas a faire fonctionner la fonction Worksheet_Change()

j'ai fait un petit programme test, je ne sais pas ce qui marche pas. J'ai mis ça dans thisWorkBook :

Private Sub Workbook_Open()

    '/ permet de verrouiller la feuille sans empêcher le fonctionnement de la macro (mdp apres .Protect "motdepasse")
    With Worksheets("Calcul")
    .Protect "admin", DrawingObjects:=True, _
    Contents:=True, Scenarios:=True, _
    UserInterfaceOnly:=True
    End With
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
    'Désactive l'évènement
    Application.EnableEvents = False

    Dim note As Integer
    note = Worksheets("Calcul").Range("E2").Value

    If note = 1 Then

        Worksheets("Calcul").Range("A2").Value = "toto et tata dans le prés"

    ElseIf note = 2 Then

        Worksheets("Calcul").Range("A2").Value = "juste toto"

    ElseIf note = 3 Then

        Worksheets("Calcul").Range("A2").Value = "juste tata"

    Else:
        Worksheets("Calcul").Range("A2").Value = "Entrée invalide"
    End If

    'Réactive l'évènement
    Application.EnableEvents = True
End Sub

Je veux que quand je change le chiffre dans E2, cela m'affiche le texte, et le change quand je change de chiffre dans E2

Je joins le fichier excel

merci

Saull

Bonjour

C'est logique que cela ne fonctionne pas puisque vous mettez votre code dans Thisworkbook plutôt que dans la feuille

Mettez votre code Private Sub Worksheet_Change(ByVal Target As Range) dans la feuille CALCUL

Autre chose qu'il est très dangereux de faire, c'est d'utiliser l'instruction Application.EnableEvents. Là vous désactivez l'évènement alors que c'est ce que vous demandez de faire à la macro . Si votre code plante, vous n'aurez plus accès aux évènements. en gros à vous ne saurez plus exécuter votre code ni les autres qui sont dans THisworkbook.

Après analyse de votre code, utilisez plutôt celui-ci

Dim ok As Boolean
Private Sub Worksheet_Change(ByVal Target As Range)
Dim note As String
If ok = True Then Exit Sub
If Not Intersect(Target, Range("E2")) Is Nothing Then
    ok = True
    Select Case Target
        Case Is = 1: note = "toto et tata dans le prés"
        Case Is = 2: note = "juste toto"
        Case Is = 3: note = "juste tata"
        Case Else: note = "Entrée invalide"
    End Select
    Range("A2") = note
End If
ok = False
End Sub

Si ok et terminé, merci de cloturer le fil en cliquant sur le V vert à coté du bouton Editer lors de votre réponse

Cordialement

Bonjour,

Le code "Worksheet_Change" est à mettre dans la feuille concernée et non pas dans "ThisWorbook".

EDIT : Oups ! Je n'avais pas remarqué votre intervention Dan !

Merci Dan

La fonction se lance quand on modifie la valeur de E2 et seulement E2 ?

Si je modifie une autre cellule le code se lance pas pour rien ?

Dernière question, si je veux mettre plusieurs action dans le use case, je les met en dessous ? C est la manière de l écrire que je ne ai jamais utilisé

Re

La fonction se lance quand on modifie la valeur de E2 et seulement E2 ?

Oui

Si je modifie une autre cellule le code se lance pas pour rien

Si, mais il saute les lignes puisque la cellule E2 n'est pas modifiée.

Dernière question, si je veux mettre plusieurs action dans le use case, je les met en dessous ? C est la manière de l écrire que je ne ai jamais utilisé

Exact, vous les mettez en dessous genre

Case =10 : note =....

Case =12 : Note =...

Pour JFL, pas de soucis.

Cordialement

C est bon tout fonctionne au poil

Merci beaucoup Dan

Au plaisir

Rechercher des sujets similaires à "fonction worksheet change"