Microsoft 365 pb formule vba

le-croco

XLDnaute Nouveau
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
 
Solution
Code:
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

sylvanu

XLDnaute Barbatruc
Supporter XLD
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 ?
 

Staple1600

XLDnaute Barbatruc
Bonjour sylvanu

Je ne sais pas
J'ai juste pondu ce bout de code VBA le temps que mon frichti du midi refroidisse ;)

Maintenant je serai curieux de connaitre le contenu de Macro1 et Macro2.

PS: Si j'étais (selon le contenu de ces macros), je ferais dans la formule ou dans le PQ
(si c'est possible) ;)
 

le-croco

XLDnaute Nouveau
Bonjour merci pour votre retour

voici le corps de mes macros

Sub Macro1()
Dim OutApp As Object
Dim OutMail As Object
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
With OutMail
.To = ""
.CC = ""
.Subject = ""
.Body = "" & vbCrLf & Worksheets("FEUIL1").Range("B7") & vbCrLf & Worksheets("FEUIL1").Range("C7") & vbCrLf & vbCrLf & "Echéance le " & Worksheets("FEUIL1").Range("G7")

.Attachments.Add ActiveWorkbook.FullName

.Display

End With
Set OutMail = Nothing
Set OutApp = Nothing
End Sub
 

Staple1600

XLDnaute Barbatruc
Re

Mon code n'a aucun problème puisque je l'ai évidemment testé avant de le poster :rolleyes:

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)
 
Dernière édition:

le-croco

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

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Lecroco, 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 ?
Worksheet_Change ne s'exécute que si la touche Entrée est pressée sur la bonne cellule. ( post #3)
Ensuite, saisis en A1 des nombres de à 0 à 30
Donc ici comme les nombres sont saisis en A1, ça marche.

Par contre dans ce cas :
Ma formule ne détecte pas le changement de la valeur de la cellule qui ce fait par un formule.
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.
 

Pièces jointes

  • Macro quand changement valeur.xlsm
    15.9 KB · Affichages: 1

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour LeCroco, Staple, Dranreb,
mais je ne sais pas comment appliqué ton modèle pour faire fonctionner mon code.
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.
 

Discussions similaires

Statistiques des forums

Discussions
315 090
Messages
2 116 102
Membres
112 661
dernier inscrit
ceucri