OVH Cloud OVH Cloud

Déclenchement d'une macro en sortant d'une cellule en mémorisant sa valeur

5 réponses
Avatar
Sylvain Branchu
Comment déclencher une macro en sortant d'une cellule mais surtout en
mémorisant les "coordonnées" et la valeur de cette cellule afin de faire
différents tests ...
Merci à tous

5 réponses

Avatar
Jacky
Ah Bonsoir à toi aussi Sylvain
Ceci peut-être
'---------
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target <> "" Then
MsgBox "Adresse de la cellule : " & Target.Address & Chr$(10) & "Valeur de
la cellule : " & Target.Value
End If
End Sub
'-----------
Salutations
JJ

"Sylvain Branchu" a écrit dans le message de
news:%
Comment déclencher une macro en sortant d'une cellule mais surtout en
mémorisant les "coordonnées" et la valeur de cette cellule afin de faire
différents tests ...
Merci à tous




Avatar
Sylvain Branchu
Génial, mais encore plus dur ...
En fait je souhaite déclencher une macro lorsque la valeur d'un cellule non
précisée change dans une feuille non active.
En fait je travaille sur la feuille 1, il y a un paquet de formule sur la
feuille 2 qui modifie ou pas les valeurs contenus sur cette feuille 2 et si
il y a une modification de valeur, un test est lancé sur le contenu de cette
valeur ...
En gros je change une valeur de la feuille 1 et je teste toute les cellules
de la feuille 2 si elles ont changé.
Merci beaucoup
"Jacky" a écrit dans le message de
news:
Ah Bonsoir à toi aussi Sylvain
Ceci peut-être
'---------
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target <> "" Then
MsgBox "Adresse de la cellule : " & Target.Address & Chr$(10) & "Valeur de
la cellule : " & Target.Value
End If
End Sub
'-----------
Salutations
JJ

"Sylvain Branchu" a écrit dans le message de
news:%
Comment déclencher une macro en sortant d'une cellule mais surtout en
mémorisant les "coordonnées" et la valeur de cette cellule afin de faire
différents tests ...
Merci à tous








Avatar
anonymousA
Bonjour,

Pour faire ça , il faut momnter en mémoire le tableau des valeurs
contenues dans la feuille2 et le comparer lors de calculs aux
résultats de la feuille2 .
Un exemple ci-dessous avec une coloration des cellules en Feuil2 si on
change des cellules de la Feuil1 et que bien sur des cellules de la
feuille 2 dépendent de cellules de la feuille1. Par ailleurs, il faut
que l'option calcul automatique soit en fonction

A mettre dans le module Thisworkbook.

Private Sub Workbook_Open()

Affecttab

End Sub

A mettre dans un module standard

Public Tableau(), colonne, ligne
Sub Affecttab()

Tableau = Sheets("Feuil2").UsedRange.Value
With Sheets("Feuil2").UsedRange.Cells(1, 1)
colonne = .Column
ligne = .Row
End With

End Sub

A mettre dans le module de feuille Feuil2

Private Sub Worksheet_Calculate()

Me.Cells.Interior.ColorIndex = xlNone

For I = 0 To UBound(Tableau, 1) - 1
For J = 0 To UBound(Tableau, 2) - 1
If Me.Cells(ligne + I, colonne + J).Value <> Tableau(I + 1, J +
1) Then Me.Cells(ligne + I, colonne + J).Interior.ColorIndex = 3
Next
Next

Affecttab

End Sub

A toi d'adapter ce principe en fonction de ton besoin.

A+
Avatar
Sylvain Branchu
Ouaou ! ça devient compliqué, il faut que je potasse !
Merci
"anonymousA" a écrit dans le message de
news:
Bonjour,

Pour faire ça , il faut momnter en mémoire le tableau des valeurs
contenues dans la feuille2 et le comparer lors de calculs aux
résultats de la feuille2 .
Un exemple ci-dessous avec une coloration des cellules en Feuil2 si on
change des cellules de la Feuil1 et que bien sur des cellules de la
feuille 2 dépendent de cellules de la feuille1. Par ailleurs, il faut
que l'option calcul automatique soit en fonction

A mettre dans le module Thisworkbook.

Private Sub Workbook_Open()

Affecttab

End Sub

A mettre dans un module standard

Public Tableau(), colonne, ligne
Sub Affecttab()

Tableau = Sheets("Feuil2").UsedRange.Value
With Sheets("Feuil2").UsedRange.Cells(1, 1)
colonne = .Column
ligne = .Row
End With

End Sub

A mettre dans le module de feuille Feuil2

Private Sub Worksheet_Calculate()

Me.Cells.Interior.ColorIndex = xlNone

For I = 0 To UBound(Tableau, 1) - 1
For J = 0 To UBound(Tableau, 2) - 1
If Me.Cells(ligne + I, colonne + J).Value <> Tableau(I + 1, J +
1) Then Me.Cells(ligne + I, colonne + J).Interior.ColorIndex = 3
Next
Next

Affecttab

End Sub

A toi d'adapter ce principe en fonction de ton besoin.

A+
Avatar
anonymousA
Bonjour,

suite à un code de Bill Manville publié hier par un contributeur,et que
j'ai à peine rebricolé, je peux t'indiquer une solution possible sous
réserve que les formules contiennent des références à des cellules
existantes dans le classeur en cours ou à un classeur ouvert.

Si j'ai tout compris à ce que tu veux faire, c'est si tu changes une
cellule de la feuille1 , comment détecter les cellules de la feuille 2
qui sont affectées et ensuite controler la valeur de celles-ci ( ou de
celle-là) pour pouvoir déclencher autre chose.

Dnas l'exemple ci-dessous , on va utiliser l'evenement change ( j'ai
supposé volontairement qu'on ne s'interesse qu'au changement d'une seule
cellule en feuille1) de la feuille 1 et on va activer une procédure qui
stocke les adresses des cellules qui sont dépendantes de la cellule
modifiée. Ensuite une fois obtenu ce tableau d'adresses des cellules,
il devient un jeu d'enfant d'en tester les valeurs

A mettre dans le module de feuille de la feuille 1

Private Sub Worksheet_Change(ByVal Target As Range)

Application.ScreenUpdating = False
Constituer_les_dependents Target
Application.ScreenUpdating = True

End Sub

Dans un module standard, écrire

Sub Constituer_les_dependents(cellule As Range)

'adaptation d'une procédure (FindPrecedents)
'written by Bill Manville, revised by Paul S.
'mpep, August 14, 2001
'Cette procédure détermine les cellules ( y.c dans un autre fichier et
y.c si un nom
'de plage a été donné) d'une cellule contenant une formule

Dim rLast As Range, iLinkNum As Integer, iArrowNum As Integer
Dim bNewArrow As Boolean, tabladdress()
Dim nbaddress

cellule.ShowDependents
Set rLast = cellule
iArrowNum = 1
iLinkNum = 1
bNewArrow = True
Do
Do
Application.Goto rLast
On Error Resume Next
ActiveCell.NavigateArrow TowardPrecedent:úlse,
ArrowNumber:=iArrowNum, LinkNumber:=iLinkNum
If Err.Number > 0 Then Exit Do
On Error GoTo 0

If rLast.Address(external:=True) =
ActiveCell.Address(external:=True) Then Exit Do
nbaddress = nbaddress + 1
ReDim Preserve tabladdress(1 To nbaddress)
tabladdress(nbaddress) = ActiveCell.Address(external:=True)
bNewArrow = False
iLinkNum = iLinkNum + 1

Loop
If bNewArrow Then Exit Do

iLinkNum = 1
bNewArrow = True
iArrowNum = iArrowNum + 1

Loop

rLast.Parent.ClearArrows
Application.Goto rLast


On Error Resume Next

For i = LBound(tabladdress) To UBound(tabladdress)
Range(tabladdress(i)).Interior.ColorIndex = 3
'ou
'MsgBox tabladdress(i)
Next

Application.Goto Range(tabladdress(1))

End Sub

cette procédure te coloriera toutes les cellules qui dépendent de la
cellule que tu viens de changer dans la feuille 1 que ces cellules
soient sur la même feuille ou sur un autre classeur ouvert.
Attention, elle ne colorie les cellules dépendentes des cellules
dépendentes c.à.de les filles des filles.

A+


Ouaou ! ça devient compliqué, il faut que je potasse !
Merci
"anonymousA" a écrit dans le message de
news:
Bonjour,

Pour faire ça , il faut momnter en mémoire le tableau des valeurs
contenues dans la feuille2 et le comparer lors de calculs aux
résultats de la feuille2 .
Un exemple ci-dessous avec une coloration des cellules en Feuil2 si on
change des cellules de la Feuil1 et que bien sur des cellules de la
feuille 2 dépendent de cellules de la feuille1. Par ailleurs, il faut
que l'option calcul automatique soit en fonction

A mettre dans le module Thisworkbook.

Private Sub Workbook_Open()

Affecttab

End Sub

A mettre dans un module standard

Public Tableau(), colonne, ligne
Sub Affecttab()

Tableau = Sheets("Feuil2").UsedRange.Value
With Sheets("Feuil2").UsedRange.Cells(1, 1)
colonne = .Column
ligne = .Row
End With

End Sub

A mettre dans le module de feuille Feuil2

Private Sub Worksheet_Calculate()

Me.Cells.Interior.ColorIndex = xlNone

For I = 0 To UBound(Tableau, 1) - 1
For J = 0 To UBound(Tableau, 2) - 1
If Me.Cells(ligne + I, colonne + J).Value <> Tableau(I + 1, J +
1) Then Me.Cells(ligne + I, colonne + J).Interior.ColorIndex = 3
Next
Next

Affecttab

End Sub

A toi d'adapter ce principe en fonction de ton besoin.

A+