un Worksheet_Change récalcitrant

  • Initiateur de la discussion Initiateur de la discussion Gruick
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Gruick

XLDnaute Accro
Bonsoir à tous,

Il faut préciser que ce changement vient d'une cellule liée à une liste.
Si par l'action de changer la valeur de ma cellule par l'intermédiaire d'un choix dans ma liste, rien ne se passe. J'ai pris soin au préalable de mettre un
Application.EnableEvents = True dans la macro précédente cette action et de vérifier par un point d'arrêt si elle est sollicitée. Rien !
Alors Quid ???

Si quelqu'un a la solution, je le remercie.

Gruick
 
Re : un Worksheet_Change récalcitrant

Bonjour Gruick,

en effet, j'avais déjà observé ce phénomène, pas d'évènement Change lors d'un choix dans une liste de formulaire ou de la boite à outil contrôles s'ils sont liés à une cellule.

Pour la boite à outil contrôles, c'est plus simple puisque le contrôle a un évènement Change pour lui même, ce qui facilite.

C'est pour le contrôle de Formulaire que ça pose un problème... je viens d'essayer avec une fonction volatile dans la feuille et ça ne marche toujours pas... je cherche encore.
 
Re : un Worksheet_Change récalcitrant

Hello Gruick,

La seule solution que j'ai trouvée est de piégée la valeur dans l'évènement calculate. Comme ci-dessous où C1 contient une liste de validation.
Il faut bien-sûr que le changement de valeur entraine un recalcul de la feuille.


Code:
Dim AncValeur
 
Private Sub Worksheet_Calculate()
 If [C1] <> AncValeur Then
    MsgBox "C1 a changé"
    AncValeur = [C1]
 End If
End Sub


A+
 
Re : un Worksheet_Change récalcitrant

Re,

ah ben c'est assez simple, on peut faire in clic droit sur le contrôle de formulaire, choisir affecter une macro, et elle ne se déclenche qu'au changement de valeur de la liste.

Edit : Bonsoir Hasco, bonne idée le Calculate (avec ma fonction Volatile ça fera la paire 🙂)
 
Re : un Worksheet_Change récalcitrant

Merci les gars, mais il y a un hic,

@Hasco
La macro tourne en rond, car le changement va chercher sur une autre feuille, et va changer une cellule voisine, laquelle est reportée sur la première feuille.
Ca marche avec une macro "normale".
Il faudrait que le calculate ne s'exécute qu'une fois. J'ai bien fait un exit sub, mais elle trouve toujours un truc à calculer, même avec un Application.EnableEvents = False.

@tototiti2008
Sur le mac pas de clic droit.
Le contrôle de formulaire, qu'est-ce ?
Ta fonction volatile itou ?
J'avoue que je n'ai rien compris.

Je désespère, mais on trouvera

Gruick
 
Re : un Worksheet_Change récalcitrant

Re Gruick,

et avec:

Code:
Dim AncValeur
 
Private Sub Worksheet_Calculate()
 If [C1] <> AncValeur Then
   [COLOR=red]Application.Calculation=xlCalculationManual[/COLOR]
    'La macro à lancer
    [COLOR=red]Application.Calculation=xlCalculationAutomatic[/COLOR]    
    AncValeur = [C1]    
 End If
End Sub

A++

[Edit] Je ne connais pas xl 2004.
 
Re : un Worksheet_Change récalcitrant

Bonjour Hasco, tototiti2008,

J'ai fait finalement la solution inspirée par Hasco, mais en l'inversant

If [C1] <> AncValeur Then

devient If [C1] = AncValeur Then exit sub,

en ayant pris soin de mettre un autre exit sub dans la macro, et une égalité [C1] = AncValeur,
Arrivée là, la macro devra recalculer mais tombera sur le premier test et quittera définitivement. Double piège donc.

Reste que pour empêcher un déclenchement intempestif, je dois mettre dans la macro principale et traditionnelle, une instruction de calcul manuel au début, et automatique à la fin (ou un calculate), et une variable publique booléenne qui testée dans la macro worksheet_calculate, la quittera.

Ouf !!!

Merci encore pour vos idées.

Gruick
 
Re : un Worksheet_Change récalcitrant

Bonjour à tous,

désolé, je suis là en pointillés en ce moment...

pour répondre aux questions précedentes, même en retard :

Sur le mac pas de clic droit

oups.. et Ctrl+clic, c'est pas l'équivalent sur Mac ? désolé pas trés calé en Mac

Le contrôle de formulaire, qu'est-ce ?

pour insérer des contrôles dans une feuille Excel, tu peux passer par 2 barres d'outils (en tout cas sur PC) : La barre d'outils Formulaire (qui contient ce que j'appelle des contrôles de formulaire) et la barre d'outils Boîte à outils Contrôles.
Les contrôles de ces 2 barres d'outils se gèrent différement, autant dans la feuille de calcul que si on veut les contrôler par VBA.

Ta fonction volatile itou ?

Les fonctions Excel sont volatiles ou non volatiles. Une fonction volatile est une fonction qui se recalcule automatiquement dès que n'importe quelle cellule de la feuille est modifiée (on avait même observé qu'elles se recalculent si on change une valeur sur une autre feuille, voire un autre classeur).
Exemple de fonction volatile :
=AUJOURDHUI()
=MAINTENANT()
il y en a plein d'autres
Les fonctions non volatiles ne se recalculent que si on modifie des cellules desquelles elles dépendent.
Donc si on met une fonction volatile dans la feuille de calcul, ça va déclencher l'évènement Calculate, et modifié comme Hasco l'a proposé ça devrait fonctionner... peut-être faudra-t-il désactiver le calcul dans l'évènement...
 
Re : un Worksheet_Change récalcitrant

Merci Tototiti,

J'ai été enduit avec de l'erreur, j'avais compris ma fonction volatile comme une fonction personnalisée à toi... que tu aurais nommé "volatile".

Quant à la barre d'outil formulaire, elle me sert le plus souvent à créer un bouton, auquel j'affecte une macro traditionnelle (une sub() , pas une événementielle, d'ailleurs je ne crois pas la chose possible).

Pour Excel2004, c'est une pâle adaptation du XL2003 pour PC, avec beaucoup de choses en moins. Il paraît même que l'XL2008 pour mac ne dispose plus du VBA. (Alors qu'Excel a été d'abord conçu pour le mac et adapté au PC)

Pour info, j'étais sur le sujet des repas de bébé de Nakoshe
https://www.excel-downloads.com/threads/planning-repas-bebe.110972/
et la modification du stock si on désire remplacer un plat (donc +1) par un autre(donc -1). Le reste (confection des repas par semaines) n'a posé aucun problème.
Mais la maman ne donne aucune nouvelle.

En tous cas, j'aurais encore appris quelque chose.

A plus,

Gruick
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
521
Retour