Sous excel Function Change et selectchange

[Fermé]
Signaler
Messages postés
5
Date d'inscription
dimanche 30 juin 2013
Statut
Membre
Dernière intervention
2 juillet 2013
-
Messages postés
8539
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
20 juillet 2021
-
Tout d'abord merci a tous super le site sé une première pour moi du coup ma essayer d'être facile a comprendre Voici mon code sous excel il marche super bien parcontre je suis complètement noob en programmation et j'aimerait savoir pourquoi tout plante lorseque je l'écrit comme la deuxieme version selon l'évènement change et non selection change même excel plante et m'envoie une erreur de la function Range qui marche plus erreur -2......

Version 1

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

For Each Target In Range("D13:D262")
If Target.Value = "" Or Target.Value = 0 Then
Target.Offset(0, -1) = 0
End If
Next Target

For Each Target In Range("J12:j262")
If Target.Value = "" Or Target.Value = 0 Then
Target = Target.Offset(0, 26)

End If
Next Target

End Sub

'se code marche bien et me permetlorseque l'utilisateur suprime une cellule ou
'encore écrit 0 de remetre la formule original a l'intérieur que je stock dans la plage enoffset
'si vous aver d'autre idée par contre ?

Version 2

Private Sub Worksheet_Change(ByVal Target As Range)
For Each Target In Range("D13:D262")
If Target.Value = "" Or Target.Value = 0 Then
Target.Offset(0, -1) = 0
End If
Next Target

For Each Target In Range("J12:j262")
If Target.Value = "" Or Target.Value = 0 Then
Target = Target.Offset(0, 26)

End If
Next Target

End Sub

'ici par-contre je ne fait que changer l'évènement du moin Je croit ?

3 réponses

Messages postés
5
Date d'inscription
dimanche 30 juin 2013
Statut
Membre
Dernière intervention
2 juillet 2013

J'oubliait de dire je veut changer d'événement déclencheur car comme la plage de cellule et les formule d'écrite dans la plage est asser intense sa commence a ralentir mon ordi a chaque selection allor que si je peut avoir le déclencheure qui démarre uniquement lors du changement de la cellule....
Messages postés
16525
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
18 octobre 2021
3 231
Bpnjour,

Exposé illisible: aucune ponctuation, orthographe désastreuse....

Merci de faire un minimum d'effort
Messages postés
8539
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
20 juillet 2021
1 702
Bonjour,

Bien que ton code version 1 fonctionne, la réutilisation de Target comme variable n'est pas très académique !!!
Il serait plus correct d'écrire :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Cel As Range
For Each Cel In Range("D13:D262").Cells
  If Cel.Value = "" Or Cel.Value = 0 Then
    Cel.Offset(0, -1).Value = 0
  End If
Next Cel
For Each Cel In Range("J12:j262").Cells
  If Cel.Value = "" Or Cel.Value = 0 Then
    Cel.Value = Cel.Offset(0, 26).Value
  End If
Next Cel
End Sub

Pour la version 2, « je ne fait que changer l'évènement » :
Effectivement, mais lorsqu'on travaille avec les évènements il faut toujours se poser la question : Mon code ne provoque-t-il pas cet évènement de façon récursive ?

Question subsidiaire : Quelles sont les cellules dont la modification doit provoquer l'évènement ? Toutes ?
Cordialement
Patrice