OVH Cloud OVH Cloud

Worksheet_Change sur plusieurs cellules

5 réponses
Avatar
bartez
bonjour à tous,

J'ai un souci avec le test suivante :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 7 And Target.Value = "" Then
End If
End Sub

La ligne If fonctionne très bien si une seule cellule est effacée,
mais si c'est une plage de cellule, elle me fait l'erreur suivante :

Erreur d'éxécution '13' : incompatibilité de type

Merci pour votre aide !
Philippe

5 réponses

Avatar
AV
....mais si c'est une plage de cellule, elle me fait l'erreur suivante


Private Sub Worksheet_Change(ByVal Target As Range)
If Selection.Count > 1 Then Exit Sub
'blablabla
end sub

AV

Avatar
bartez
Merci pour ta réponse,
J'aurais préféré que l'on m'explique comment faire pour gérer la plage
complète ;)
plutot que de n'autoriser que la sélection simple!

@+
philippe

"AV" a écrit dans le message de news:
e%
....mais si c'est une plage de cellule, elle me fait l'erreur suivante


Private Sub Worksheet_Change(ByVal Target As Range)
If Selection.Count > 1 Then Exit Sub
'blablabla
end sub

AV





Avatar
abcd
plusieurs possibilités selon ce que tu veux faire:

agir pour toutes les cellules modifiées une à une:

dim cell as Range
for each Cell in Target
next Cell


sinon, la possibilité de découper colonne à colonne

dim col as Range
for each col in Target.Columns
next column


( tu vois le genre )


sinon compliquer les tests :
Target.columns.count = 1

ou alors vérifier l'intersection entre les changements et ta colonne:

dim inter as range, cell as range
set inter = intersect (columns(7),Target)
if not inter is nothing then
for each cell in inter
next cell
end if
Avatar
bartez
Merci abcd !

c'est exactement ce que je cherchais :)
ça fonctionne au poil !

philippe


"abcd" a écrit dans le message de news:

plusieurs possibilités selon ce que tu veux faire:

agir pour toutes les cellules modifiées une à une:

dim cell as Range
for each Cell in Target
next Cell


sinon, la possibilité de découper colonne à colonne

dim col as Range
for each col in Target.Columns
next column


( tu vois le genre )


sinon compliquer les tests :
Target.columns.count = 1

ou alors vérifier l'intersection entre les changements et ta colonne:

dim inter as range, cell as range
set inter = intersect (columns(7),Target)
if not inter is nothing then
for each cell in inter
next cell
end if
Avatar
abcd