Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Pb à la fermeture d'un Workbook : conflit entre Sub et fonction volatile INDEX

  • Initiateur de la discussion Initiateur de la discussion azerty6767
  • 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 !

A

azerty6767

Guest
Bonjour,


J'ai fait une "Private Sub" du type "Target change" où, lorsque certains champs d'une Worksheet sont modifiés, il y a une action Enabled=True ou False sur des ComboBox selon la valeur des champs Target.
Cette Sub "Target change" est faite sur une boucle "for i=1 to 100".


Or lorsque je ferme le fichier, Excel détecte systématiquement qu'une modif a été faite : c'est parce qu'il y a une fonction volatile, type INDEX().

Et surtout, Excel relance systématiquement la private sub "target change", en bouclant de i=1 à 100.


Est-ce que quelqu'un pourrait m'indiquer ce qu'il faut faire pour que la Private Sub "target change" ne se lance pas à la fermeture du fichier ?

Peut-être n'ai-je pas été assez clair ?


D'avance merci pour votre aide,


Olivier
 
Re : Pb à la fermeture d'un Workbook : conflit entre Sub et fonction volatile INDEX

Bonsoir à vous,

peut-être en mettant dans ThisWorkbook
Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
  Application.EnableEvents = False
End Sub

Mais il faudra fermer Excel pour ré-activer les évènements 😱

A+
 
Re : Pb à la fermeture d'un Workbook : conflit entre Sub et fonction volatile INDEX

Merci pour la 2ème réponse.

Effectivement, c'est une solution, mais elle ne me satisfait pas à 100%, puisque, comme écrit ci-dessus, on est obligé de fermer totalement Excel pour pouvoir redémarrer en "True"...

N'y a-t-il pas une autre solution ?...

D'avance merci,



Olivier
 
Re : Pb à la fermeture d'un Workbook : conflit entre Sub et fonction volatile INDEX

Bonsoir azerty6767, salut soenda et Bruno 🙂

Peut-être en déclarant Public la variable Flag en haut d'un Module :

Code:
Public Flag As Boolean

Ensuite à la fermeture :

Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Flag = True
End Sub

Et dans la macro Change :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Flag Then
  'le reste du code
End If
Flag = False
End Sub

A+
 
Re : Pb à la fermeture d'un Workbook : conflit entre Sub et fonction volatile INDEX

BOnjour,

Merci pour cette 2ème réponse.

J'ai testé mais le problème persiste. D'ailleurs un collègue de travail m'avait proposé cette même 2ème solution : cela ne fonctionne pas ...!

Sinon une piste serait de remplacer toutes les fonctions INDEX ? Par RECHERCHEV par exemple ?....

Quelqu'un peut me conseiller ?


Merci d'avance,


Olivier
 
Re : Pb à la fermeture d'un Workbook : conflit entre Sub et fonction volatile INDEX

Bonsoir le fil,

Olivier, la fonction INDEX n'est pas volatile il me semble...

Par contre les fonctions DECALER et INDIRECT le sont.

Comme, bien sûr, MAINTENANT, AUJOURDHUI.

A+
 
Re : Pb à la fermeture d'un Workbook : conflit entre Sub et fonction volatile INDEX

Salut Job75, azerty6767

N'est-il pas possible d'avoir ton fichier pour voir cela de plus près ?

A+
 
Re : Pb à la fermeture d'un Workbook : conflit entre Sub et fonction volatile INDEX

Bonsoir le fil,

Olivier, la fonction INDEX n'est pas volatile il me semble...

Par contre les fonctions DECALER et INDIRECT le sont.

Comme, bien sûr, MAINTENANT, AUJOURDHUI.

A+

Job75, je crois, malheureusement, que INDEX est bien une fonction volatile.

Bref !


Sinon ci-dessous le code qui m'embête (placé dans la Feuille 3) :

----------------------------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)

With Sheets("Feuil3")

For i = 2 To 120

If .Target.Cells(1).Name.Name = .Range("filtre_pos_" & i) Then
If .Range("filtre_pos_" & i).Value = "F" Then
.OLEObjects("ComboBox" & i).Enabled = False
Else
.OLEObjects("ComboBox" & i).Enabled = True
End If

End If
Next

End With

End sub
---------------------------------------------


Merci d'avance...
 
Dernière modification par un modérateur:
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

T
Réponses
2
Affichages
2 K
Tibooo
T
S
Réponses
10
Affichages
2 K
sardaucar
S
M
Réponses
0
Affichages
1 K
mathidel13870
M
N
  • Question Question
Réponses
5
Affichages
3 K
B
Réponses
15
Affichages
8 K
Biasloler
B
A
Réponses
0
Affichages
2 K
Aleccharmilles
A
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…