Function Selection range et range
Pseudoquires
Messages postés
5
Statut
Membre
-
eriiic Messages postés 25847 Date d'inscription Statut Contributeur Dernière intervention -
eriiic Messages postés 25847 Date d'inscription Statut Contributeur Dernière intervention -
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 ?
Tous sa car trop long de calcul mon ordi ralenti avec le prmier calcul
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 ?
Tous sa car trop long de calcul mon ordi ralenti avec le prmier calcul
A voir également:
- Function Selection range et range
- Vba range avec variable ✓ - Forum VB / VBA
- Input signal out of range - Forum Matériel & Système
- Problème signal out of range - Forum Windows
- Syntaxe VBA Sheets.Range avec Range variable ✓ - Forum VB / VBA
- Range avec une Variable ✓ - Forum VB / VBA
3 réponses
Bonjour,
Target est une variable qui t'est passée en paramètre.
Tu n'as pas à l'utiliser pour y stocker tes valeurs. Mais juste pour récupérer la cellule ayant provoqué l'évènement.
Déclare ta propre variable au début.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c as Range
For Each c In Range("D13:D262")
If c .Value = "" Or c.Value = 0 Then
...
Par contre l'évènement Change est appelé à chaque fois qu'une saisie change le contenu d'une cellule.
C'est peut-être inutile de balayer toute la plage, et tester quel est cette cellule et n'agir qu'à partir de celle-ci est peut-être suffisant.
Si c'est le cas :
Un des défaut des débutants est d'enchainer les questions.
Si celle-ci est résolue tu le marques en le cochant (en haut vers ton titre).
Et si tu en as une nouvelle (n'hésite pas à te servir de la touche F1 avant) tu démarres un nouveau fil.
Et lorsque tu mets du code met-le en forme avec l'icone <>
eric
Jamais tu ne répondras à un mp non sollicité...
Bon, ça c'est fait.
Target est une variable qui t'est passée en paramètre.
Tu n'as pas à l'utiliser pour y stocker tes valeurs. Mais juste pour récupérer la cellule ayant provoqué l'évènement.
Déclare ta propre variable au début.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c as Range
For Each c In Range("D13:D262")
If c .Value = "" Or c.Value = 0 Then
...
Par contre l'évènement Change est appelé à chaque fois qu'une saisie change le contenu d'une cellule.
C'est peut-être inutile de balayer toute la plage, et tester quel est cette cellule et n'agir qu'à partir de celle-ci est peut-être suffisant.
Si c'est le cas :
Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
If Not Intersect(Target, Range("D13:D262")) Is Nothing Then
' si target appartient à cette plage
If Target.Value = "" Or Target.Value = 0 Then
Target.Offset(0, -1) = 0
End If
ElseIf Not Intersect(Target, Range("J12:j262")) Is Nothing Then
' sinon si target appartient à cette plage
If Target.Value = "" Or Target.Value = 0 Then
Target = Target.Offset(0, 26)
End If
End If
Application.ScreenUpdating = True
End Sub
Un des défaut des débutants est d'enchainer les questions.
Si celle-ci est résolue tu le marques en le cochant (en haut vers ton titre).
Et si tu en as une nouvelle (n'hésite pas à te servir de la touche F1 avant) tu démarres un nouveau fil.
Et lorsque tu mets du code met-le en forme avec l'icone <>
eric
Jamais tu ne répondras à un mp non sollicité...
Bon, ça c'est fait.
Numéro Merci Bcp SE qui me bloquait Sé ou t'as écrit se commentaire
' si target appartient à cette plage
Je comprend pas pourquoi si y'a rien D'écrit après Then que ma cellule conserve l'insertion de l'utilisateur y'a un code a rentrer la ? Pour moi sa marche numéro 1 T'as formule Mais tent que je ne comprend pas pourquoi j'ai rien a insérer la je me sentirait pas bien ! ya pas un text qui vas la du genre keepuser entry? Ou
Target = Target.Value ?
' si target appartient à cette plage
Je comprend pas pourquoi si y'a rien D'écrit après Then que ma cellule conserve l'insertion de l'utilisateur y'a un code a rentrer la ? Pour moi sa marche numéro 1 T'as formule Mais tent que je ne comprend pas pourquoi j'ai rien a insérer la je me sentirait pas bien ! ya pas un text qui vas la du genre keepuser entry? Ou
Target = Target.Value ?