Worksheet_change anomalie avec intersect target

RG75

XLDnaute Nouveau
Bonjour,

Dans le cadre d'un projet je développe un fichier excel comprenant du code VBA.

Souhaitant éviter au maximum les formules & mises en forme conditionnelles, je les remplace donc par du code (ce qui est par ailleurs formateur). Je rencontre cependant un problème avec l'utilisation de l'évènement worksheet_change. Pourriez-vous svp m'éclaircir ?

Je joins un fichier simplifié à mon message.

En bref, si je modifie une cellule dans une des 3 plages de données définies, alors une formule vba de vérification doit se lancer pour déterminer la valeur en colonne "L" dans la même ligne où a eu lieu la modification.
Si je modifie une cellule dans la colonne "BE", alors un second contrôle est effectué pour effectuer une mise en forme en colonnes "BE" et "BF" avec éventuel msgbox en fonction du résultat.

Actuellement, j'utilise dans la feuille 1 en question l'évènement Private Sub WorkSheet_Change(ByVal Target As Range) avec Application.EnableEvents = False en début de code :
Pour ma vérification 1 :
If Not Intersect(Target, Range("O2:AD2000, AG2:AL2000, AN2:BC2000")) Is Nothing Then

Pour ma vérification 2 :
If Not Intersect(Target, Range("BE2:BE2000")) Is Nothing And Target.Count > 1 Then Exit Sub

Je lance ensuite les actions via If Cells(Target.Row, "L") ... Then .

Les difficultés que je rencontre sont les suivantes :
- Les actions pour chacune des 2 vérifications se lancent quelque soit l'emplacement de la cellule modifiée dans la ligne (ex: vérification 1 si modification hors range Intersect, msgbox même si modification hors colonne "BE")
- Après l'exécution d'une seconde macro, cette macro worksheet_change ne se lance plus.
La seconde macro en question ne fait que copier une ligne de la feuille 2 à la 1e ligne vide en feuille 1 (selon contenu en colonne F, avec Dim Lg%) sur clic dans un bouton. Elle est insérée dans un module.

P.e. que le fonctionnement avec Target.Row implique d'office une intersection avec le range défini, ce qui lance automatiquement l'exécution du code ?
Une alternative existe-t-elle?

Merci d'avance!
Et joyeuse année 2013 à toute la communauté excel-downloads!
 

Pièces jointes

  • Test.zip
    16.4 KB · Affichages: 35
  • Test.zip
    16.4 KB · Affichages: 36
  • Test.zip
    16.4 KB · Affichages: 34

néné06

XLDnaute Accro
Re : Worksheet_change anomalie avec intersect target

Bonsoir RG75,

Je pense que sur cette ligne,

If Not Intersect(Target, Range("BE2:BE2000")) Is Nothing And Target.Count > 1 Then Exit Sub 'Ne rien faire si plusieurs cellules sont modifiées à la fois

Avant Exit Sub, placer "Application.EnableEvents = True".

Pour replacer les evenements.

A tester ?

A+
 

RG75

XLDnaute Nouveau
Re : Worksheet_change anomalie avec intersect target

Bonsoir Néné06,

En fait j'avais initialement désactivé l'application.enableEvents car je souhaitais ensuite màj une autre colonne avec la date du jour now au format date jj mm aaaa, qui provoque une erreur range négatif avec le plantage de Excel qui tourne en boucle (mémoire insuffisante ensuite). Mais effectivement si je réactive cette option le 2e point est résolu.

La 1e difficulté persiste cependant : les 2 vérifications interviennent toujours peu importe l'emplacement de la cellule où intervient la modification. Ex : si modification hors colonne BE, le msgbox apparait.

Une autre idée?
Merci en tout cas pour ta 1e réponse rapide:)
 

néné06

XLDnaute Accro
Re : Worksheet_change anomalie avec intersect target

Re,

Pour mieux voir le cheminement de ton programme, je te conseil de placer un point d'arret au début de ta routine "change", de produire une erreur et de suivre le cheminement "pas à pas" .

A+

René
 

Discussions similaires

Statistiques des forums

Discussions
312 294
Messages
2 086 893
Membres
103 404
dernier inscrit
sultan87