Probléme avec la structure Workbook_SheetChange [Résolu]

Messages postés
58
Date d'inscription
mercredi 15 mars 2006
Statut
Membre
Dernière intervention
14 janvier 2010
- - Dernière réponse : jmsebaux
Messages postés
9
Date d'inscription
mercredi 14 mai 2003
Statut
Membre
Dernière intervention
27 mai 2011
- 15 janv. 2007 à 17:34
Bonjour à tous,
J'ai programmé une macro en vb dans excel2003, cette macro utilise des valeurs se situant dans des cellules Excel, effectue un calcul qu'elle inscrit dans une autre cellule.
Mon Problème est le suivant:
je voudrais vider la cellule résultat(range("cellule")="") lorsque n'importe quelle cellule de la feuille est modifiée.
j'ai donc utilisé comme on me l'a conseillé la démarche suivante:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Select Case ActiveSheet.Name
Case "Can5480_1966", "Can5480_1974", "Can5480_1986"
Range("G35") = ""
Range("G42") = ""
Case "Can5482_1973"
Range("H19") = ""
Range("h23") = ""
Case Else
'sortir
GoTo H
End Select
H:
End Sub

Le probléme de cette solution est que lorsque je modifie une cellule, je vide bien les cellules résultats, mais comme je les vides, je les modifies également et je relance donc le processus de vidage des cellules résultats indéfiniment(boucle infinie)
il y a t'il une autre façon de procoder?

Merci par avance pour votre aide
Thomeux
Afficher la suite 

3 réponses

Meilleure réponse
Messages postés
4066
Date d'inscription
mardi 13 mai 2003
Statut
Modérateur
Dernière intervention
23 décembre 2008
18
3
Merci
salut,





Avec ceci, la procédure ne devrait pas se déclencher intempestivement.


Dim enCours As Boolean

ou

Public enCours As Boolean (tout dépend de l'endroit où tu le déclares)



enCours=False par défaut (dans Workbook_Open par exemple)







Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

If Not enCours Then

enCours=True

Select Case ActiveSheet.Name

Case "Can5480_1966", "Can5480_1974", "Can5480_1986"

Range("G35") = ""

Range("G42") = ""

Case "Can5482_1973"

Range("H19") = ""

Range("h23") = ""

Case Else

'sortir

GoTo H

End Select

enCours=False

End If


Manu

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 118 internautes nous ont dit merci ce mois-ci

Messages postés
2117
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
7
0
Merci
Salut,

Euh... Juste une remarque, la partie :

Case Else
'sortir
GoTo H


est-il vraiment utile ?

sachant qu'on sortira normalement de Select, juste après End Select...

Amicalement,
Us.
Messages postés
9
Date d'inscription
mercredi 14 mai 2003
Statut
Membre
Dernière intervention
27 mai 2011
0
Merci
bonjour, je tombe sur la discussion par hasard ... c'est un peu tard mais il y a une autre façon de faire qui reste purement excel, c'est de rajouter les instructions suivantes autour du code modifiant le contenu des cellules :

      Application.EnableEvents = False 'bloque les événements pour ne pas générer d'appel à cette même
                                                          'procédure lors de la modification du contenu des cellules

      Application.EnableEvents = True 'rétabli les événements

Jean Marie

Xuabes