Sous excel Function Change et selectchange
Pseudoquires
Messages postés
5
Statut
Membre
-
Patrice33740 Messages postés 8930 Statut Membre -
Patrice33740 Messages postés 8930 Statut Membre -
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 ?
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 ?
A voir également:
- Sous excel Function Change et selectchange
- Word et excel gratuit - Guide
- Liste déroulante excel - Guide
- Change dns - Guide
- Si et ou excel - Guide
- Déplacer colonne excel - Guide
3 réponses
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....
Bpnjour,
Exposé illisible: aucune ponctuation, orthographe désastreuse....
Merci de faire un minimum d'effort
Exposé illisible: aucune ponctuation, orthographe désastreuse....
Merci de faire un minimum d'effort
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 :
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
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