evenement après maj d'une cellule

bellemeche

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

Private Sub a15_BeforeUpdate(Cancel As Integer)

End Sub

cmt declencher l'evenement
 

Pierrot93

XLDnaute Barbatruc
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.

@+
 

dmc

XLDnaute Occasionnel
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
 

Pierrot93

XLDnaute Barbatruc
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
@+
 

dmc

XLDnaute Occasionnel
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
 

Pierrot93

XLDnaute Barbatruc
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:

dmc

XLDnaute Occasionnel
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
 

Pierrot93

XLDnaute Barbatruc
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....

@+
 

Pierrot93

XLDnaute Barbatruc
Re : evenement après maj d'une cellule

Re

attention, remplace cette ligne, erreur lors du copier coller

Code:
        ElseIf Target.Address = Range("[B][COLOR="Red"]cel2[/COLOR][/B]").Address Then Range("cel1").Value = Target.Value - 10

@+
 

Discussions similaires

Réponses
29
Affichages
1 K
Réponses
2
Affichages
247
Réponses
1
Affichages
264

Statistiques des forums

Discussions
312 438
Messages
2 088 421
Membres
103 847
dernier inscrit
Girardon