Je souhaite déclencher une action lorsque la cellule A1 est modifiée:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = ("$A$21") Then
Action
End If
End Sub
Mon problème est que l'action est déclenchée uniquement lorsque A1 est
modifiée
manuellement. Comment faire pour que l'action soit exécutée
lorsque la valeur de A1 est modifiée en fonction d'une autre cellule.
Je souhaite déclencher une action lorsque la cellule A1 est modifiée:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = ("$A$21") Then
Action
End If
End Sub
Mon problème est que l'action est déclenchée uniquement lorsque A1 est
modifiée
manuellement. Comment faire pour que l'action soit exécutée
lorsque la valeur de A1 est modifiée en fonction d'une autre cellule.
Je souhaite déclencher une action lorsque la cellule A1 est modifiée:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = ("$A$21") Then
Action
End If
End Sub
Mon problème est que l'action est déclenchée uniquement lorsque A1 est
modifiée
manuellement. Comment faire pour que l'action soit exécutée
lorsque la valeur de A1 est modifiée en fonction d'une autre cellule.
Je souhaite déclencher une action lorsque la cellule A1 est modifiée:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = ("$A$21") Then
Action
End If
End Sub
Mon problème est que l'action est déclenchée uniquement lorsque A1 est
modifiée
manuellement. Comment faire pour que l'action soit exécutée
lorsque la valeur de A1 est modifiée en fonction d'une autre cellule.
Je souhaite déclencher une action lorsque la cellule A1 est modifiée:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = ("$A$21") Then
Action
End If
End Sub
Mon problème est que l'action est déclenchée uniquement lorsque A1 est
modifiée
manuellement. Comment faire pour que l'action soit exécutée
lorsque la valeur de A1 est modifiée en fonction d'une autre cellule.
Je souhaite déclencher une action lorsque la cellule A1 est modifiée:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = ("$A$21") Then
Action
End If
End Sub
Mon problème est que l'action est déclenchée uniquement lorsque A1 est
modifiée
manuellement. Comment faire pour que l'action soit exécutée
lorsque la valeur de A1 est modifiée en fonction d'une autre cellule.
Bonsoir Dégé,
En fait il y a 2 phénomènes qui conduisent à la situation que tu décris :
1 - Tu testes l'égalité entre Target.Address et "$A$21" (les parenthèses
sont superflues). Si tu sélectionnes plusieurs cellules dont $A$21 et
que tu fasses une validation manuelle globale (Ctrl + Enter), Action
ne sera pas déclenchée, car Target.Address ne sera pas égal à "$A$21",
mais à "$A$21:$A$24" (par exemple). Puisque Target peut corres-
pondre à plus d'une cellule, il faut une boucle les parcourant toutes.
2 - D'autre part (extrait de l'aide d'Excel 98 relative à l'événement
Change d'une feuille) : "Cet événement ne se produit pas lorsque les
cellules sont modifiées par un recalcul. Utilisez l'événement Calculate
pour piéger le recalcul d'une feuille de calcul."
Malheureusement, Calculate n'a pas d'argument équiivalent à Target.
Une solution consiste à utiliser l'événement Change en explorant Target
ET les cellules dépendantes (équivalent de Edition, Atteindre..., Bouton
Cellules, Sélectionner Dépendants, Tous niveaux)
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range
Set Target = Union(Target, Target.Dependents)
For Each c In Target
If c.Address = "$A$21" Then
MsgBox "A21 modifiée."
End If
Next c
End Sub
Cette routine provoque une erreur si l'événement Change survient et qu'il
n'y a aucune cellule dépendante de Target. Il faut donc ajouter une gestion
d'erreur, ce qui donne :
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range
On Error Resume Next
Set Target = Union(Target, Target.Dependents)
On Error GoTo 0
For Each c In Target
If c.Address = "$A$21" Then
MsgBox "A21 modifiée."
End If
Next c
End Sub
Voilà ;-))Je souhaite déclencher une action lorsque la cellule A1 est modifiée:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = ("$A$21") Then
Action
End If
End Sub
Mon problème est que l'action est déclenchée uniquement lorsque A1 est
modifiée
manuellement. Comment faire pour que l'action soit exécutée
lorsque la valeur de A1 est modifiée en fonction d'une autre cellule.
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
Bonsoir Dégé,
En fait il y a 2 phénomènes qui conduisent à la situation que tu décris :
1 - Tu testes l'égalité entre Target.Address et "$A$21" (les parenthèses
sont superflues). Si tu sélectionnes plusieurs cellules dont $A$21 et
que tu fasses une validation manuelle globale (Ctrl + Enter), Action
ne sera pas déclenchée, car Target.Address ne sera pas égal à "$A$21",
mais à "$A$21:$A$24" (par exemple). Puisque Target peut corres-
pondre à plus d'une cellule, il faut une boucle les parcourant toutes.
2 - D'autre part (extrait de l'aide d'Excel 98 relative à l'événement
Change d'une feuille) : "Cet événement ne se produit pas lorsque les
cellules sont modifiées par un recalcul. Utilisez l'événement Calculate
pour piéger le recalcul d'une feuille de calcul."
Malheureusement, Calculate n'a pas d'argument équiivalent à Target.
Une solution consiste à utiliser l'événement Change en explorant Target
ET les cellules dépendantes (équivalent de Edition, Atteindre..., Bouton
Cellules, Sélectionner Dépendants, Tous niveaux)
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range
Set Target = Union(Target, Target.Dependents)
For Each c In Target
If c.Address = "$A$21" Then
MsgBox "A21 modifiée."
End If
Next c
End Sub
Cette routine provoque une erreur si l'événement Change survient et qu'il
n'y a aucune cellule dépendante de Target. Il faut donc ajouter une gestion
d'erreur, ce qui donne :
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range
On Error Resume Next
Set Target = Union(Target, Target.Dependents)
On Error GoTo 0
For Each c In Target
If c.Address = "$A$21" Then
MsgBox "A21 modifiée."
End If
Next c
End Sub
Voilà ;-))
Je souhaite déclencher une action lorsque la cellule A1 est modifiée:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = ("$A$21") Then
Action
End If
End Sub
Mon problème est que l'action est déclenchée uniquement lorsque A1 est
modifiée
manuellement. Comment faire pour que l'action soit exécutée
lorsque la valeur de A1 est modifiée en fonction d'une autre cellule.
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
Bonsoir Dégé,
En fait il y a 2 phénomènes qui conduisent à la situation que tu décris :
1 - Tu testes l'égalité entre Target.Address et "$A$21" (les parenthèses
sont superflues). Si tu sélectionnes plusieurs cellules dont $A$21 et
que tu fasses une validation manuelle globale (Ctrl + Enter), Action
ne sera pas déclenchée, car Target.Address ne sera pas égal à "$A$21",
mais à "$A$21:$A$24" (par exemple). Puisque Target peut corres-
pondre à plus d'une cellule, il faut une boucle les parcourant toutes.
2 - D'autre part (extrait de l'aide d'Excel 98 relative à l'événement
Change d'une feuille) : "Cet événement ne se produit pas lorsque les
cellules sont modifiées par un recalcul. Utilisez l'événement Calculate
pour piéger le recalcul d'une feuille de calcul."
Malheureusement, Calculate n'a pas d'argument équiivalent à Target.
Une solution consiste à utiliser l'événement Change en explorant Target
ET les cellules dépendantes (équivalent de Edition, Atteindre..., Bouton
Cellules, Sélectionner Dépendants, Tous niveaux)
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range
Set Target = Union(Target, Target.Dependents)
For Each c In Target
If c.Address = "$A$21" Then
MsgBox "A21 modifiée."
End If
Next c
End Sub
Cette routine provoque une erreur si l'événement Change survient et qu'il
n'y a aucune cellule dépendante de Target. Il faut donc ajouter une gestion
d'erreur, ce qui donne :
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range
On Error Resume Next
Set Target = Union(Target, Target.Dependents)
On Error GoTo 0
For Each c In Target
If c.Address = "$A$21" Then
MsgBox "A21 modifiée."
End If
Next c
End Sub
Voilà ;-))Je souhaite déclencher une action lorsque la cellule A1 est modifiée:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = ("$A$21") Then
Action
End If
End Sub
Mon problème est que l'action est déclenchée uniquement lorsque A1 est
modifiée
manuellement. Comment faire pour que l'action soit exécutée
lorsque la valeur de A1 est modifiée en fonction d'une autre cellule.
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
Re,
Complément : Le défaut d'un test sur une chaîne comme "$A$21" est qu'en
cas d'insertion (ou de suppression) de ligne(s) ou de colonne(s), "$A$21"
peut très bien ne plus correspondre à la cellule à tester.
C'est pourquoi je te conseille de nommer cette cellule ("CellRéf" par
exemple), ce qui rend la Sub insensible aux insertions/suppressions,
moyennant une adaptation légère :
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range, a As String
On Error Resume Next
a = Range("CellRéf").Address
Set Target = Union(Target, Target.Dependents)
On Error GoTo 0
For Each c In Target
If c.Address = a Then
MsgBox "A21 modifiée."
End If
Next c
End Sub
NB - Il est impératif que l'instruction
a = Range("CellRéf").Address
soit entre les 2 "On Error ..." pour éviter qu'une suppression de la
cellule
nommée déclenche un message d'erreur ("La méthode Range de l'objet
Worksheet a échoué".)Bonsoir Dégé,
En fait il y a 2 phénomènes qui conduisent à la situation que tu décris
:
1 - Tu testes l'égalité entre Target.Address et "$A$21" (les parenthèses
sont superflues). Si tu sélectionnes plusieurs cellules dont $A$21 et
que tu fasses une validation manuelle globale (Ctrl + Enter), Action
ne sera pas déclenchée, car Target.Address ne sera pas égal à "$A$21",
mais à "$A$21:$A$24" (par exemple). Puisque Target peut corres-
pondre à plus d'une cellule, il faut une boucle les parcourant toutes.
2 - D'autre part (extrait de l'aide d'Excel 98 relative à l'événement
Change d'une feuille) : "Cet événement ne se produit pas lorsque les
cellules sont modifiées par un recalcul. Utilisez l'événement Calculate
pour piéger le recalcul d'une feuille de calcul."
Malheureusement, Calculate n'a pas d'argument équiivalent à Target.
Une solution consiste à utiliser l'événement Change en explorant Target
ET les cellules dépendantes (équivalent de Edition, Atteindre..., Bouton
Cellules, Sélectionner Dépendants, Tous niveaux)
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range
Set Target = Union(Target, Target.Dependents)
For Each c In Target
If c.Address = "$A$21" Then
MsgBox "A21 modifiée."
End If
Next c
End Sub
Cette routine provoque une erreur si l'événement Change survient et
qu'il
n'y a aucune cellule dépendante de Target. Il faut donc ajouter une
gestion
d'erreur, ce qui donne :
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range
On Error Resume Next
Set Target = Union(Target, Target.Dependents)
On Error GoTo 0
For Each c In Target
If c.Address = "$A$21" Then
MsgBox "A21 modifiée."
End If
Next c
End Sub
Voilà ;-))Je souhaite déclencher une action lorsque la cellule A1 est modifiée:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = ("$A$21") Then
Action
End If
End Sub
Mon problème est que l'action est déclenchée uniquement lorsque A1 est
modifiée
manuellement. Comment faire pour que l'action soit exécutée
lorsque la valeur de A1 est modifiée en fonction d'une autre cellule.
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
Re,
Complément : Le défaut d'un test sur une chaîne comme "$A$21" est qu'en
cas d'insertion (ou de suppression) de ligne(s) ou de colonne(s), "$A$21"
peut très bien ne plus correspondre à la cellule à tester.
C'est pourquoi je te conseille de nommer cette cellule ("CellRéf" par
exemple), ce qui rend la Sub insensible aux insertions/suppressions,
moyennant une adaptation légère :
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range, a As String
On Error Resume Next
a = Range("CellRéf").Address
Set Target = Union(Target, Target.Dependents)
On Error GoTo 0
For Each c In Target
If c.Address = a Then
MsgBox "A21 modifiée."
End If
Next c
End Sub
NB - Il est impératif que l'instruction
a = Range("CellRéf").Address
soit entre les 2 "On Error ..." pour éviter qu'une suppression de la
cellule
nommée déclenche un message d'erreur ("La méthode Range de l'objet
Worksheet a échoué".)
Bonsoir Dégé,
En fait il y a 2 phénomènes qui conduisent à la situation que tu décris
:
1 - Tu testes l'égalité entre Target.Address et "$A$21" (les parenthèses
sont superflues). Si tu sélectionnes plusieurs cellules dont $A$21 et
que tu fasses une validation manuelle globale (Ctrl + Enter), Action
ne sera pas déclenchée, car Target.Address ne sera pas égal à "$A$21",
mais à "$A$21:$A$24" (par exemple). Puisque Target peut corres-
pondre à plus d'une cellule, il faut une boucle les parcourant toutes.
2 - D'autre part (extrait de l'aide d'Excel 98 relative à l'événement
Change d'une feuille) : "Cet événement ne se produit pas lorsque les
cellules sont modifiées par un recalcul. Utilisez l'événement Calculate
pour piéger le recalcul d'une feuille de calcul."
Malheureusement, Calculate n'a pas d'argument équiivalent à Target.
Une solution consiste à utiliser l'événement Change en explorant Target
ET les cellules dépendantes (équivalent de Edition, Atteindre..., Bouton
Cellules, Sélectionner Dépendants, Tous niveaux)
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range
Set Target = Union(Target, Target.Dependents)
For Each c In Target
If c.Address = "$A$21" Then
MsgBox "A21 modifiée."
End If
Next c
End Sub
Cette routine provoque une erreur si l'événement Change survient et
qu'il
n'y a aucune cellule dépendante de Target. Il faut donc ajouter une
gestion
d'erreur, ce qui donne :
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range
On Error Resume Next
Set Target = Union(Target, Target.Dependents)
On Error GoTo 0
For Each c In Target
If c.Address = "$A$21" Then
MsgBox "A21 modifiée."
End If
Next c
End Sub
Voilà ;-))
Je souhaite déclencher une action lorsque la cellule A1 est modifiée:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = ("$A$21") Then
Action
End If
End Sub
Mon problème est que l'action est déclenchée uniquement lorsque A1 est
modifiée
manuellement. Comment faire pour que l'action soit exécutée
lorsque la valeur de A1 est modifiée en fonction d'une autre cellule.
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
Re,
Complément : Le défaut d'un test sur une chaîne comme "$A$21" est qu'en
cas d'insertion (ou de suppression) de ligne(s) ou de colonne(s), "$A$21"
peut très bien ne plus correspondre à la cellule à tester.
C'est pourquoi je te conseille de nommer cette cellule ("CellRéf" par
exemple), ce qui rend la Sub insensible aux insertions/suppressions,
moyennant une adaptation légère :
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range, a As String
On Error Resume Next
a = Range("CellRéf").Address
Set Target = Union(Target, Target.Dependents)
On Error GoTo 0
For Each c In Target
If c.Address = a Then
MsgBox "A21 modifiée."
End If
Next c
End Sub
NB - Il est impératif que l'instruction
a = Range("CellRéf").Address
soit entre les 2 "On Error ..." pour éviter qu'une suppression de la
cellule
nommée déclenche un message d'erreur ("La méthode Range de l'objet
Worksheet a échoué".)Bonsoir Dégé,
En fait il y a 2 phénomènes qui conduisent à la situation que tu décris
:
1 - Tu testes l'égalité entre Target.Address et "$A$21" (les parenthèses
sont superflues). Si tu sélectionnes plusieurs cellules dont $A$21 et
que tu fasses une validation manuelle globale (Ctrl + Enter), Action
ne sera pas déclenchée, car Target.Address ne sera pas égal à "$A$21",
mais à "$A$21:$A$24" (par exemple). Puisque Target peut corres-
pondre à plus d'une cellule, il faut une boucle les parcourant toutes.
2 - D'autre part (extrait de l'aide d'Excel 98 relative à l'événement
Change d'une feuille) : "Cet événement ne se produit pas lorsque les
cellules sont modifiées par un recalcul. Utilisez l'événement Calculate
pour piéger le recalcul d'une feuille de calcul."
Malheureusement, Calculate n'a pas d'argument équiivalent à Target.
Une solution consiste à utiliser l'événement Change en explorant Target
ET les cellules dépendantes (équivalent de Edition, Atteindre..., Bouton
Cellules, Sélectionner Dépendants, Tous niveaux)
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range
Set Target = Union(Target, Target.Dependents)
For Each c In Target
If c.Address = "$A$21" Then
MsgBox "A21 modifiée."
End If
Next c
End Sub
Cette routine provoque une erreur si l'événement Change survient et
qu'il
n'y a aucune cellule dépendante de Target. Il faut donc ajouter une
gestion
d'erreur, ce qui donne :
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range
On Error Resume Next
Set Target = Union(Target, Target.Dependents)
On Error GoTo 0
For Each c In Target
If c.Address = "$A$21" Then
MsgBox "A21 modifiée."
End If
Next c
End Sub
Voilà ;-))Je souhaite déclencher une action lorsque la cellule A1 est modifiée:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = ("$A$21") Then
Action
End If
End Sub
Mon problème est que l'action est déclenchée uniquement lorsque A1 est
modifiée
manuellement. Comment faire pour que l'action soit exécutée
lorsque la valeur de A1 est modifiée en fonction d'une autre cellule.
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
Merci pour tout !
"Michel Gaboly" a écrit dans le message de
news:Re,
Complément : Le défaut d'un test sur une chaîne comme "$A$21" est qu'en
cas d'insertion (ou de suppression) de ligne(s) ou de colonne(s), "$A$21"
peut très bien ne plus correspondre à la cellule à tester.
C'est pourquoi je te conseille de nommer cette cellule ("CellRéf" par
exemple), ce qui rend la Sub insensible aux insertions/suppressions,
moyennant une adaptation légère :
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range, a As String
On Error Resume Next
a = Range("CellRéf").Address
Set Target = Union(Target, Target.Dependents)
On Error GoTo 0
For Each c In Target
If c.Address = a Then
MsgBox "A21 modifiée."
End If
Next c
End Sub
NB - Il est impératif que l'instruction
a = Range("CellRéf").Address
soit entre les 2 "On Error ..." pour éviter qu'une suppression de la
cellulenommée déclenche un message d'erreur ("La méthode Range de l'objet
Worksheet a échoué".)Bonsoir Dégé,
En fait il y a 2 phénomènes qui conduisent à la situation que tu décris
:
1 - Tu testes l'égalité entre Target.Address et "$A$21" (les parenthèses
sont superflues). Si tu sélectionnes plusieurs cellules dont $A$21 et
que tu fasses une validation manuelle globale (Ctrl + Enter), Action
ne sera pas déclenchée, car Target.Address ne sera pas égal à "$A$21",
mais à "$A$21:$A$24" (par exemple). Puisque Target peut corres-
pondre à plus d'une cellule, il faut une boucle les parcourant toutes.
2 - D'autre part (extrait de l'aide d'Excel 98 relative à l'événement
Change d'une feuille) : "Cet événement ne se produit pas lorsque les
cellules sont modifiées par un recalcul. Utilisez l'événement Calculate
pour piéger le recalcul d'une feuille de calcul."
Malheureusement, Calculate n'a pas d'argument équiivalent à Target.
Une solution consiste à utiliser l'événement Change en explorant Target
ET les cellules dépendantes (équivalent de Edition, Atteindre..., Bouton
Cellules, Sélectionner Dépendants, Tous niveaux)
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range
Set Target = Union(Target, Target.Dependents)
For Each c In Target
If c.Address = "$A$21" Then
MsgBox "A21 modifiée."
End If
Next c
End Sub
Cette routine provoque une erreur si l'événement Change survient et
qu'iln'y a aucune cellule dépendante de Target. Il faut donc ajouter une
gestiond'erreur, ce qui donne :
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range
On Error Resume Next
Set Target = Union(Target, Target.Dependents)
On Error GoTo 0
For Each c In Target
If c.Address = "$A$21" Then
MsgBox "A21 modifiée."
End If
Next c
End Sub
Voilà ;-))Je souhaite déclencher une action lorsque la cellule A1 est modifiée:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = ("$A$21") Then
Action
End If
End Sub
Mon problème est que l'action est déclenchée uniquement lorsque A1 est
modifiée
manuellement. Comment faire pour que l'action soit exécutée
lorsque la valeur de A1 est modifiée en fonction d'une autre cellule.
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
Merci pour tout !
"Michel Gaboly" <michel@Suppgaboly.com> a écrit dans le message de
news:4115569E.A57B0371@Suppgaboly.com...
Re,
Complément : Le défaut d'un test sur une chaîne comme "$A$21" est qu'en
cas d'insertion (ou de suppression) de ligne(s) ou de colonne(s), "$A$21"
peut très bien ne plus correspondre à la cellule à tester.
C'est pourquoi je te conseille de nommer cette cellule ("CellRéf" par
exemple), ce qui rend la Sub insensible aux insertions/suppressions,
moyennant une adaptation légère :
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range, a As String
On Error Resume Next
a = Range("CellRéf").Address
Set Target = Union(Target, Target.Dependents)
On Error GoTo 0
For Each c In Target
If c.Address = a Then
MsgBox "A21 modifiée."
End If
Next c
End Sub
NB - Il est impératif que l'instruction
a = Range("CellRéf").Address
soit entre les 2 "On Error ..." pour éviter qu'une suppression de la
cellule
nommée déclenche un message d'erreur ("La méthode Range de l'objet
Worksheet a échoué".)
Bonsoir Dégé,
En fait il y a 2 phénomènes qui conduisent à la situation que tu décris
:
1 - Tu testes l'égalité entre Target.Address et "$A$21" (les parenthèses
sont superflues). Si tu sélectionnes plusieurs cellules dont $A$21 et
que tu fasses une validation manuelle globale (Ctrl + Enter), Action
ne sera pas déclenchée, car Target.Address ne sera pas égal à "$A$21",
mais à "$A$21:$A$24" (par exemple). Puisque Target peut corres-
pondre à plus d'une cellule, il faut une boucle les parcourant toutes.
2 - D'autre part (extrait de l'aide d'Excel 98 relative à l'événement
Change d'une feuille) : "Cet événement ne se produit pas lorsque les
cellules sont modifiées par un recalcul. Utilisez l'événement Calculate
pour piéger le recalcul d'une feuille de calcul."
Malheureusement, Calculate n'a pas d'argument équiivalent à Target.
Une solution consiste à utiliser l'événement Change en explorant Target
ET les cellules dépendantes (équivalent de Edition, Atteindre..., Bouton
Cellules, Sélectionner Dépendants, Tous niveaux)
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range
Set Target = Union(Target, Target.Dependents)
For Each c In Target
If c.Address = "$A$21" Then
MsgBox "A21 modifiée."
End If
Next c
End Sub
Cette routine provoque une erreur si l'événement Change survient et
qu'il
n'y a aucune cellule dépendante de Target. Il faut donc ajouter une
gestion
d'erreur, ce qui donne :
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range
On Error Resume Next
Set Target = Union(Target, Target.Dependents)
On Error GoTo 0
For Each c In Target
If c.Address = "$A$21" Then
MsgBox "A21 modifiée."
End If
Next c
End Sub
Voilà ;-))
Je souhaite déclencher une action lorsque la cellule A1 est modifiée:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = ("$A$21") Then
Action
End If
End Sub
Mon problème est que l'action est déclenchée uniquement lorsque A1 est
modifiée
manuellement. Comment faire pour que l'action soit exécutée
lorsque la valeur de A1 est modifiée en fonction d'une autre cellule.
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
Merci pour tout !
"Michel Gaboly" a écrit dans le message de
news:Re,
Complément : Le défaut d'un test sur une chaîne comme "$A$21" est qu'en
cas d'insertion (ou de suppression) de ligne(s) ou de colonne(s), "$A$21"
peut très bien ne plus correspondre à la cellule à tester.
C'est pourquoi je te conseille de nommer cette cellule ("CellRéf" par
exemple), ce qui rend la Sub insensible aux insertions/suppressions,
moyennant une adaptation légère :
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range, a As String
On Error Resume Next
a = Range("CellRéf").Address
Set Target = Union(Target, Target.Dependents)
On Error GoTo 0
For Each c In Target
If c.Address = a Then
MsgBox "A21 modifiée."
End If
Next c
End Sub
NB - Il est impératif que l'instruction
a = Range("CellRéf").Address
soit entre les 2 "On Error ..." pour éviter qu'une suppression de la
cellulenommée déclenche un message d'erreur ("La méthode Range de l'objet
Worksheet a échoué".)Bonsoir Dégé,
En fait il y a 2 phénomènes qui conduisent à la situation que tu décris
:
1 - Tu testes l'égalité entre Target.Address et "$A$21" (les parenthèses
sont superflues). Si tu sélectionnes plusieurs cellules dont $A$21 et
que tu fasses une validation manuelle globale (Ctrl + Enter), Action
ne sera pas déclenchée, car Target.Address ne sera pas égal à "$A$21",
mais à "$A$21:$A$24" (par exemple). Puisque Target peut corres-
pondre à plus d'une cellule, il faut une boucle les parcourant toutes.
2 - D'autre part (extrait de l'aide d'Excel 98 relative à l'événement
Change d'une feuille) : "Cet événement ne se produit pas lorsque les
cellules sont modifiées par un recalcul. Utilisez l'événement Calculate
pour piéger le recalcul d'une feuille de calcul."
Malheureusement, Calculate n'a pas d'argument équiivalent à Target.
Une solution consiste à utiliser l'événement Change en explorant Target
ET les cellules dépendantes (équivalent de Edition, Atteindre..., Bouton
Cellules, Sélectionner Dépendants, Tous niveaux)
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range
Set Target = Union(Target, Target.Dependents)
For Each c In Target
If c.Address = "$A$21" Then
MsgBox "A21 modifiée."
End If
Next c
End Sub
Cette routine provoque une erreur si l'événement Change survient et
qu'iln'y a aucune cellule dépendante de Target. Il faut donc ajouter une
gestiond'erreur, ce qui donne :
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range
On Error Resume Next
Set Target = Union(Target, Target.Dependents)
On Error GoTo 0
For Each c In Target
If c.Address = "$A$21" Then
MsgBox "A21 modifiée."
End If
Next c
End Sub
Voilà ;-))Je souhaite déclencher une action lorsque la cellule A1 est modifiée:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = ("$A$21") Then
Action
End If
End Sub
Mon problème est que l'action est déclenchée uniquement lorsque A1 est
modifiée
manuellement. Comment faire pour que l'action soit exécutée
lorsque la valeur de A1 est modifiée en fonction d'une autre cellule.
--
Cordialement,
Michel Gaboly
http://www.gaboly.com
--
Cordialement,
Michel Gaboly
http://www.gaboly.com