evenement après maj d'une cellule

  • Initiateur de la discussion Initiateur de la discussion bellemeche
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

B

bellemeche

Guest
je veux activer un evenement apres la maj d'1 cellule

Private Sub a15_BeforeUpdate(Cancel As Integer)

End Sub

cmt declencher l'evenement
 
Re : evenement après maj d'une cellule

Bonjour Bellemeche

regarde le code ci dessous, se déclenche si modification cellule A1, à placer dans le module de la feuille concernée.


Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count = 1 And Target.Address(0, 0) = "A1" Then MsgBox "cellule A1 modifiée"
End Sub
bonne journée.

@+
 
Re : evenement après maj d'une cellule

Bonjour Bellemeche, Banzai et Pierrot
Je reprends ce fil, car il correspond au besoin que je cherche à satisfaire :
la cellule a1 est destinée à recevoir une valeur x
la cellule a2 correspond à a1 + 10
si l'utilisateur saisit 15 en a1 , la cellule a2 prend la valeur 25 (facile, non?)
mais l'utilisateur peut aussi saisir 45 en a2, auquel cas la cellule a1 prendra la valeur 35.
En reprenant le code pierrot, et en rajoutant une deuxième condition portant sur la cellule a2, j'obtiens une erreur de pile, je pense que EXCEL se met à boucler sur ces 2 changements réciproques.
Comment dois-je faire ?
Comme d'habitude, je sais que vos réponses seront pertinentes, je vous en remercie d'avance.
David
 
Re : evenement après maj d'une cellule

Bonjour David, ftho

une autre solution, avec utilisation d'une variable "static" :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Static b As Boolean
If Target.Count > 1 Or b = True Then Exit Sub
If Not Intersect(Target, Range("A1:A2")) Is Nothing Then
    b = True
    If Target.Address = "$A$1" Then
        Range("A2").Value = Target.Value + 10
        ElseIf Target.Address = "$A$2" Then Range("A1").Value = Target.Value - 10
    End If
    b = False
End If
End Sub

bonne journée
@+
 
Re : evenement après maj d'une cellule

Merci FTHO, et surtout merci Pierrot
En fait la proposition de FTHO, bien que me donnant la marche à suivre, ne réglait pas le problème car elle considérait une action sur des valeurs uniques. (45 et 35)
Or les cellules pouvaient prendre n(importe quelle valeur, et provoquer le recalcul des autres, et ce réciproquement, ce qui provoquait un bouclage sans fin de excel.
La méthode de Pierrot, par contre, règle le probleme.
3 explications s(il vous plait :
1) target.count = 1 : pourquoi ? quand peut-il etre supérieur ?
2) intersect : quoi c'est est-ce pour faire cette chose ?
3) syntaxe : les cellules sont fixes. Peut-on les réferencer autrement ?

Merci pour ce cours que vous pourrez peut etre me donner.

Et grand merci pour les solutions déjà fournies. Bonne journée, je replonge dans mon travail (qui n'a rien à voir avec ce hobby de vouloir m'amuser à bidouiller excel).
David
 
Re : evenement après maj d'une cellule

Bonjour Dmc, Ftho

pour essayer de répondre à tes questions :

1 : target.count = 1, tu peux faire des modifications multiples, par exemple tu selectionnes plusieurs cellules et "supprime" pour les vider ou copier / coller plusieurs valeurs, cela provoquerai une erreur si le test n'est pas fait, enfin dans certains cas...

2 : "intersect" méthode qui permet de déterminer si la cellule modifiée (variable "target" de l'événement) est bien dans la plage concernée par le code, en l'occurence "A1:A2"

3 : pas trop compris la question... peux tu préciser...

en espérant avoir été clair...

bonne journée
@+
 
Dernière édition:
Re : evenement après maj d'une cellule

Merci pierrot pour le cours.
Il est un fait qu'à la relecture, ma troisieme question est nulle et non avenue.
Il s'agit de la syntaxe dans les macros, qui au lieu de figer les cellules référencées sous la forme $a$1 ou [a1] me permettrait de pouvoir faire évoluer la feuille, déplacer les cellules, sans avoir à corriger la macro.
Je pense qu'en les nommant, il doit être possible dans la macro de s'adresser à ces cellules par leur nom. Quelle est alors la syntaxe ?
à te lire
Cordialement
David
 
Re : evenement après maj d'une cellule

Re

essaye le code ci dessous :

Code:
'plages nommées => : maplage = A1:A2 cel1 = A1 cel2 = A2
Private Sub Worksheet_Change(ByVal Target As Range)
Static b As Boolean
If Target.Count > 1 Or b = True Then Exit Sub
If Not Intersect(Target, Range("maplage")) Is Nothing Then
    b = True
    If Target.Address = Range("cel1").Address Then
        Range("cel2").Value = Target.Value + 10
        ElseIf Target.Address = Range("cel1").Address Then Range("cel1").Value = Target.Value - 10
    End If
    b = False
End If
End Sub

plages nommées => : maplage = A1:A2, cel1 = A1, cel2 = A2, à adapter....

@+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
41
Affichages
1 K
Retour