Sous excel Function Change et selectchange

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

  1. 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....
    0
    1. Contributeur
      Bpnjour,

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

      Merci de faire un minimum d'effort
      0
      1. 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
        0