Microsoft 365 Exécution lors d'un changement d'une Cellule

Payne

XLDnaute Nouveau
Bonjour,

J'essai de démarrer une macro lors d'un changement dans une cellule. Voici ce que je pensais utiliser selon plusieurs sites sur le Web.
Mon classeur se nomme "Mensuel" (Contient plusieurs feuilles), et la feuille que j'utilise est "Budget" )

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "B2" Then
Call Copie_Données
End If
End Sub

Lorsque je fais le test, le changement se fait en B2 mais la macro Copie_Données ne s'exécute pas et je n'ai pas d'erreur. Cette macro doit s'exécuter sur la feuille "Budget".
Dans B2 se trouve la fonction =AUJOURDHUI()+7, qui indique le nom du mois et qui change une semaine avant la fin de celui-ci. le changement se fait très bien mais n'exécute pas la macro.

Je suis qu'un novice en VBA et je n'ai pas trouvé de réponse pour mon problème.

Merci de votre aide.
 

Hasco

XLDnaute Barbatruc
Repose en paix
Re,

Le test if est toujours faux car .Address sans paramètre renvoie une adresse de cellule absolue ($B$2) et non relative (B2) :)

Alors essayez

Target.Address(0,0) = "B2" ou Target.Address(False,False) = "B2" ou Target.Address ="$B$2"

Si cela ne fonctionne pas alors c'est qu'il y a autre chose. Joignez un fichier exemple, anonymisé et sans données confidentielles.

Cordialement
 

Payne

XLDnaute Nouveau
Bonjour @Payne , le forum

Essaye ceci:

VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Application.Intersect(Target, Range("B2")) Is Nothing Then
    Call Copie_Données
End If
End Sub

*Sinon un fichier sans donnée confidentiel serait le bienvenu

@Phil69970
Bonjour,
Suite à votre suggestion que j'ai essayé, cela ne fonctionne toujours pas. J'ai joint mon fichier concerné, peut-être pouvez-vous trouver mon erreur.

Merci
 

Pièces jointes

  • Budget.xlsm
    40.8 KB · Affichages: 8

Dranreb

XLDnaute Barbatruc
Une procédure Worksheet_quelque chose doit se mettre dans un module d'objet Worksheet, non dans un module standard.
Et pour ne jamais risquer de vous tromper, installez toujours les procédures de prise en charge d'évènements à l'aide des deux larges listes déroulantes qui surmontent la fenêtre de code.
 

Phil69970

XLDnaute Barbatruc
Le fil

Ce que veut dire Dranreb c'est ceci :

1626031892348.png


Par contre j'ai bien peur que la aussi Dranreb ait raison
Une Worksheet_Change n'est invoqué que lors d'un changement du contenu d'un cellule, non lors d'un changement sa valeur du fait qu'elle contient une formule dont la valeur change.
Donc si tu veux que cela fonctionne il faudra une action dans la cellule B2 en clair un clic dans la dite cellule pour pouvoir déclencher l’événement.
Une piste ==> tu mets une liste déroulante avec les mois de l'année en B2 et tu changes manuellement le mois dans la liste déroulante quand c’est nécessaire.

@Phil69970
 

Dranreb

XLDnaute Barbatruc
Je pense qu'il vaudrait mieux rendre constante la cellule B2 de la feuille Budget et la changer dans une Sub Workbook_Open du module ThisWorkbook.
Mais est-ce normal qu'actuellement cette cellule change tous les jours ?
Remarque: que le format de cellule n'en affiche que le mois ne change rien à cela.
C'est bizarre, n'est ce pas, si vous espériez en vain pouvoir détecter le changement avec une Worksheet_Change parce qu'il semblait que ce qui vous intéressait c'était d'exécuter quelque chose quand le mois affiché changeait et non pas tous les jours.

Figez y donc plutôt un début de mois, et dans le module ThisWorkbook mettez :
VB:
Option Explicit
Private Sub Workbook_Open()
   Dim ProchainMois As Date
   ProchainMois = Feuil1.[B2].Value
   ProchainMois = DateSerial(Year(ProchainMois), Month(ProchainMois) + 1, 1)
   If Date + 7 < ProchainMois Then Exit Sub
   Feuil1.[B2].Value = ProchainMois
   Call CopieDonnées
   End Sub
Évitez de préférence le '_' dans vos noms, car il est utilisé dans les noms des procédures de prise en charge d'évènement comme séparateur entre le nom de l'objet et celui de l'évènement.
 
Dernière édition:

Payne

XLDnaute Nouveau
Bonjour,

Merci à Phil69970 et Dranreb pour vos suggestions. J'ai inscrit dans ThisWorkbook la suggestion de Dranreb mais lorsque je l'exécute cela me donne ceci: "Erreur de compilation: Variable ou procédure attendue et non un module" à la ligne Call CopieDonnées.

J'ai enlevé tous les tirets soulignés ( _ ) dans les noms. Je les mettais pour que ce soit plus facile à lire.

Merci
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Oui c'est à adapter, mettez la procédure que vous voulez exécuter. J'avais vu de toute façon des Call suivis de nom de procédures qui n'existaient pas non plus.
En mettant une majuscule au début de chaque mot du nom composé, comme le fait Excel j'ai toujours trouvé ça pratique et lisible.
 

Payne

XLDnaute Nouveau
Bonjour,

Je viens de trouver mon erreur. Je croyais qu'en appelant le module CopieDonnées que la procédure allait s'effectuer. Après avoir lu la définition de Call, je me rendu compte que je dois appeler la procédure et non le module. La procédure s'appelle CopieDonnéesMois, voilà mon erreur. Lorsque j'ai mis le BON nom de la procédure, cela fonctionne.

Merci Dranreb pour tes précieux conseils, et oui sans ces soulignés c'est aussi lisible.

Merci beaucoup encore à tous ceux qui ont bien voulu m'éclairer.

Bonne journée,
 

Discussions similaires