Probléme avec la structure Workbook_SheetChange

Résolu
Thomeux Messages postés 58 Date d'inscription mercredi 15 mars 2006 Statut Membre Dernière intervention 14 janvier 2010 - 4 avril 2006 à 12:13
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

3 réponses

econs Messages postés 4030 Date d'inscription mardi 13 mai 2003 Statut Membre Dernière intervention 23 décembre 2008 24
4 avril 2006 à 12:50
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
3
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
4 avril 2006 à 13:09
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.
0
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, 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
0
Rejoignez-nous