Bonjour je souhaite déclencher une macro en fonction de la valeur d'une cellule (nombre de jour restant) qui change en fonctionne de date dans d'autre cellules.
Mon code VBA fonctionne quand je rentre dans la dite cellule et que je valide avec la touche entrée, mais ne fonctionne pas quand je laisse les choses ce faire seul.
Ma formule ne détecte pas le changement de la valeur de la cellule qui ce fait par un formule.
Qqn peut il m aider ?
mon code:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Cells.Count > 1 Then Exit Sub
If IsNumeric(Target) And Target.Address = "$A$1" Then
Select Case Target.Value
Case 1 To 30: Macro1
Case Is < 1: Macro2
End Select
End If
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Me.[A1].Precedents, Target) Is Nothing Then Exit Sub
Select Case Me.[A1].Value
Case 1 To 30: Macro1
Case Is < 1: Macro2
End Select
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" And IsNumeric(Target) Then
Application.Run "Macro" & IIf(Target Mod 31 = 0, 2, 1)
End If
End Sub
Bonjour LeCroco, Staple,
@Staple,
Si "le changement de la valeur de la cellule qui ce fait par une formule." une Worksheet_Change va t elle détecter un changement de valeur ?
J'aurais opté plutôt pour un Worksheet_Calculate et une variable publique pour mémoriser la valeur.
Me trompais je ?
Mon code n'a aucun problème puisque je l'ai évidemment testé avant de le poster
Et pourquoi avoir deux macros identiques ???
Pour infos: voici mes deux macros de test
Code:
Sub Macro1()
MsgBox Time, vbCritical
End Sub
Sub Macro2()
MsgBox Date, vbInformation
End Sub
Dans un classeur vierge, insère dans un module standard et copie y Macro1 et Macro2
et dans le code de la feuille, copie la macro du message#2
Ensuite, saisis en A1 des nombres de à 0 à 30
Tu verras qu'il se passe quelque chose
(Comme ce fut le cas sur mon PC le 25 mars à 13h38)
Bonjour Staple1600
Je te confirme que ton code a le même problème que moi.
C est ce que je disais dans mon premier message. Si tu avais essayé de cette façon tu aurais vu qu'il ne ce passe rien.
J'ai bien evidament pris le temps d'essayer ce que tu as poster, c est le minimum quand qqn demande de l'aide.
Quand tu entre une valeur dans la case ça fonctionne parfaitement mais quand la valeur change par le biais de la formule il ne ce passe rien.
(Comme ce fut aussi le cas pour moi)
Les 2 macros sont identiques car c est le message du mail qui change.
Worksheet_Change ne marche pas car pas de touche Entrée détectée.
Il faut utiliser Worksheet_Calculate avec mémorisation de la valeur de A1 dans une variable publique.
Un essai en PJ avec :
VB:
Public msValeurSave
Sub Worksheet_Calculate()
On Error GoTo Fin
Application.EnableEvents = False
If [A1] <> msValeurSave Then
msValeurSave = [A1]
MaMacro1
MaMacro2
Else
[F4] = "Valeur en A1 non modifiée": [F5] = ""
End If
Fin:
Application.EnableEvents = True
End Sub
msValeurSave est une variable publique qui mémorise la valeur de A1.
a chaque Recalcul on éxécute cette macro.
Si la valeur courante de A1 est égale à la valeur mémorisée, on sort, sinon on mémorise cette nouvelle valeur et on continue la macro.
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Me.[A1].Precedents, Target) Is Nothing Then Exit Sub
Select Case Me.[A1].Value
Case 1 To 30: Macro1
Case Is < 1: Macro2
End Select
End Sub
On en est au 15éme post sans que vous fournissiez le moindre fichier test.
La/Les solutions vont dépendre de la structure de votre fichier, et vous avez déjà plusieurs solutions potentielles.
Concernant votre question, référer vous à ma PJ.
Dans la feuille concernée, vous copiez le code, rien de plus simple.