Bug sur macro Sub Worksheet_Change(ByVal Target As Range)

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 !

marmotte18

XLDnaute Impliqué
Bonjour,

Je dispose de ces instructions :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target = Worksheets("Calendrier").Range("A1") Then
  • Si je modifie la cellule A1, le traitement qui suit "then" se poursuit normalement.
  • Si je modifie une autre cellule qu'A1, je ne demande rien à la macro.
Donc, tout se passe bien si je modifie n'importe quelle cellule.

Problème :

Si le gestionnaire vient à tirer une donnée ou une formule vers le bas, j'ai l'anomalie (Erreur d'exécution '13' : incompabilité de type")

Je demande donc le débogage.

=> Le curseur s'arrête sur l'instruction "
If Target = Worksheets("Calendrier").Range("A1") Then"

Que faut-il faire pour que la macro ne beugue pas dans cette situation ?

Le copier-coller produit le même effet.
L'effaçage par la touche Suppr de plusieurs cellules non protégées produit également le même effet.

Merci par avance
 
Dernière édition:
Re : Bug sur macro Sub Worksheet_Change(ByVal Target As Range)

🙄 Je vais peut-être dire une bêtise.
J'ai déja eu ce problème, je devais vraiment tirer
une formule vers le bas, ca plantait.
J'ai résolu de facon surement pas orthodoxe
en ajoutant avant la ligne qui buggait
On error resume Next.
Je te dis ca de mémoire en espérant que ca t'aidera.🙄
 
Re : Bug sur macro Sub Worksheet_Change(ByVal Target As Range)

bonjour à tous

si tu veux que ta macro se lance uniquement en cas de modif de la case A1, il te faut tester l'adresse et non la valeur

if target.address<>"$A$1" exit sub

si tu as une selection multiple, Address sera egale à $A$1:$B$3, donc sera different de $A$1
 
Re : Bug sur macro Sub Worksheet_Change(ByVal Target As Range)

Bonjour ERIC S,

Cette instruction est intéressante, cela ne fait plus planter ma macro quand je cherche à effacer par code, toutes les cellules correspondant aux données entrées.

Toutefois, je ne comprends pas pourquoi ce traitement se fait puisque :
if target.count>1 then exit sub
est la 1ère instruction après le Sub. J'aurais dû sortir de la macro tout de suite sans effectuer le moindre traitement (selon tes explications dont au passage, je te remercie)
 
Re : Bug sur macro Sub Worksheet_Change(ByVal Target As Range)

re

a priori tu n'avais pas ce test à l'origine et en cas de sélection multiple, la propriété value n'est pas valide.

La proposition de WILFRIED doit fonctionner aussi, choisir l'une plus que l'autre dépend des macros

Le défaut de la solution de papapaul reste le fait de ne pas traiter l'erreur et si une autre apparaît en cours de macro, tu ne le verras pas
 
Re : Bug sur macro Sub Worksheet_Change(ByVal Target As Range)

Bonjour wilfried_42,

Effectivement ta méthode est excellente "if target.address<>"$A$1" exit sub" !

=> ma macro ne beugue plus et elle fait ce que je lui demande de faire.

BRAVO et merci beaucoup !
 
Re : Bug sur macro Sub Worksheet_Change(ByVal Target As Range)

re

c'est sans doute moi qui n'ai pas compris ta remarque (je parlais de ton premier message

Private Sub Worksheet_Change(ByVal Target As Range)
If Target = Worksheets("Calendrier").Range("A1") Then

ou il n'y avait pas le count)

Par contre, je ne sais pas ce que tu fais dans ta macro et donc il est possible que tu passes plusieurs fois en imbriqué si tu changes des valeurs de cellules

exemple

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
MsgBox passe
Range("A1").Value = 1
End Sub

on imagine que je change A2, la macro se lance et quand elle arrive sur Range("A1")..., elle boucle car une valeur change......
 
Re : Bug sur macro Sub Worksheet_Change(ByVal Target As Range)

Bonjour wilfried

Pour moi target.count donne la même chose que target.cells.count

peut-être est-ce un abus d'écriture, target étant dans la feuille une zone de cellules?
 
Re : Bug sur macro Sub Worksheet_Change(ByVal Target As Range)

Pour ERIC S,

Effectivement ma macro change des valeurs. En fait, j'ai nommé "données" l'ensemble des cellules non protégées et ma macro est sensée supprimer toutes les données saisissables d'un coup :

Application.Goto Reference:="Données"
Selection.ClearContents

Ainsi, la procédure détecte une sélection multiple.
 
- 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
9
Affichages
508
Réponses
4
Affichages
521
Réponses
4
Affichages
586
Retour