Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

impossible d'activer un offset dans un Worksheet_Change

5 réponses
Avatar
François
Bonjour à tous,

Je profite que les rois ne nous aient pas encore rejoints pour vous
soumettre un petit problème ...

Dans un Worksheet_Change, je mets la cellule active (dernière cellule de la
colonne B) en majuscule et j'effectue un tri des colonnes -> sans problème.
Je n'arrive en revanche pas à sélectionner à la fin del a procédure, la
cellule qui se trouvait initialement à la droite de la target ...
J'ai essayé : Target.Offset(, 1).Select qui ne fonctionne pas,
pas plus que la fonction Find !

Par ailleurs, le tableau qui ne comporte que 28 lignes / 6 colonnes est très
lent lors de la procédure (8 sec lorsque j'ajoute un simple nom en B28 !)
Est-ce normal ? (il n'y a aucune formule dans toutes les cellules ...)

Merci pour votre aide,
et bonne année à tous les exceliens contributeur du MPFE

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Cellule As Range, Posit As Long
If Target.Column = 2 And Target.Row > 1 And Target.Count = 1 Then
Application.ScreenUpdating = False
Target.Value = UCase(Target.Value)
' Target.Offset(, 1).Select
ActiveSheet.Range("B2:C" & Range("B1000").End(xlUp).Row) _
.Sort key1:=ActiveSheet.Range("B2"), order1:=xlAscending,
Header:=xlNo
On Error Resume Next
For Each Cellule In ActiveSheet.Range("Noms")
If Cellule.Value <> "" Then
Posit = Application.WorksheetFunction.Find(Target.Value,
Cellule.Value)
If Posit > 0 Then
Cellule.Offset(, 1).Activate
Exit Sub
End If
End If
Next
Application.ScreenUpdating = True
End If

5 réponses

Avatar
LSteph
Bonsoir,

Après ton tri ou Avant ton tri la cellule voisine de target est toujours
la même.
Ainsi si target est ligne33,colonne2 lorsque la worksheet_change est
lancée sa voisine demeurera
Après le tri ou Avant le tri la cellule voisine de ligne33,colonne2
soit par .offset(0,1)
ligne33,colonne3
Que la valeur de la cellule aille (du fait du tri) se promener ailleurs
ne changera rien.
Le offset fonctionne parfaitement, c'est ce que tu souhaiterais qui est
probablement différent de ce que tu demandes.

Est-ce bien ce qu'il fallait te préciser?

En outre, il vaudrait mieux mettre enableeevents à false
avant et à true après.

@+

--
lSteph




Bonjour à tous,

Je profite que les rois ne nous aient pas encore rejoints pour vous
soumettre un petit problèm




e ...

Dans un Worksheet_Change, je mets la cellule active (dernière cellule de la
colonne B) en majuscule et j'effectue un tri des colonnes -> sans problème.
Je n'arrive en revanche pas à sélectionner à la fin del a procédure, la
cellule qui se trouvait initialement à la droite de la target ...
J'ai essayé : Target.Offset(, 1).Select qui ne fonctionne pas,
pas plus que la fonction Find !

Par ailleurs, le tableau qui ne comporte que 28 lignes / 6 colonnes est très
lent lors de la procédure (8 sec lorsque j'ajoute un simple nom en B28 !)
Est-ce normal ? (il n'y a aucune formule dans toutes les cellules ...)

Merci pour votre aide,
et bonne année à tous les exceliens contributeur du MPFE

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Cellule As Range, Posit As Long
If Target.Column = 2 And Target.Row > 1 And Target.Count = 1 Then
Application.ScreenUpdating = False
Target.Value = UCase(Target.Value)
' Target.Offset(, 1).Select
ActiveSheet.Range("B2:C" & Range("B1000").End(xlUp).Row) _
.Sort key1:¬tiveSheet.Range("B2"), order1:=xlAscending,
Header:=xlNo
On Error Resume Next
For Each Cellule In ActiveSheet.Range("Noms")
If Cellule.Value <> "" Then
Posit = Application.WorksheetFunction.Find(Target.Value,
Cellule.Value)
If Posit > 0 Then
Cellule.Offset(, 1).Activate
Exit Sub
End If
End If
Next
Application.ScreenUpdating = True
End If




Avatar
Youky \(BJ\)
Avant que les rois ne rattrappent ta macro mets:
Application.EnableEvents = False
'ceci neutralise les événements exemple Target.Value = UCase(Target.Value)
'la macro repasse par là si changement de target.value
'ensuite en fin de macro remets...
Application.EnableEvents = True

Youky(BJ)



"François" a écrit dans le message de news:

Bonjour à tous,

Je profite que les rois ne nous aient pas encore rejoints pour vous
soumettre un petit problème ...

Dans un Worksheet_Change, je mets la cellule active (dernière cellule de
la colonne B) en majuscule et j'effectue un tri des colonnes -> sans
problème.
Je n'arrive en revanche pas à sélectionner à la fin del a procédure, la
cellule qui se trouvait initialement à la droite de la target ...
J'ai essayé : Target.Offset(, 1).Select qui ne fonctionne pas,
pas plus que la fonction Find !

Par ailleurs, le tableau qui ne comporte que 28 lignes / 6 colonnes est
très lent lors de la procédure (8 sec lorsque j'ajoute un simple nom en
B28 !)
Est-ce normal ? (il n'y a aucune formule dans toutes les cellules ...)

Merci pour votre aide,
et bonne année à tous les exceliens contributeur du MPFE

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Cellule As Range, Posit As Long
If Target.Column = 2 And Target.Row > 1 And Target.Count = 1 Then
Application.ScreenUpdating = False
Target.Value = UCase(Target.Value)
' Target.Offset(, 1).Select
ActiveSheet.Range("B2:C" & Range("B1000").End(xlUp).Row) _
.Sort key1:¬tiveSheet.Range("B2"), order1:=xlAscending,
Header:=xlNo
On Error Resume Next
For Each Cellule In ActiveSheet.Range("Noms")
If Cellule.Value <> "" Then
Posit = Application.WorksheetFunction.Find(Target.Value,
Cellule.Value)
If Posit > 0 Then
Cellule.Offset(, 1).Activate
Exit Sub
End If
End If
Next
Application.ScreenUpdating = True
End If




Avatar
Charabeuh
Bonsoir,

Peut-être en interprétant tes propos:

Private Sub Worksheet_Change(ByVal Target As Range)
'
Dim targetValue
'
Application.EnableEvents = False
'
If Target.Column = 2 And Target.Row > 1 And Target.Count = 1 Then
targetValue = UCase(Target.Value)
Target.Value = targetValue
ActiveSheet.Range("B2:C" & Range("B1000").End(xlUp).Row) _
.Sort key1:¬tiveSheet.Range("B2"), order1:=xlAscending, Header:=xlNo
Range("B2:B" &
Range("B1000").End(xlUp).Row).Find(What:=targetValue).Activate
ActiveCell.Offset(0, 1).Activate
End If
'
Application.EnableEvents = True
'
End Sub

Cdlt


"François" a écrit dans le message de
news:
Bonjour à tous,

Je profite que les rois ne nous aient pas encore rejoints pour vous
soumettre un petit problème ...

Dans un Worksheet_Change, je mets la cellule active (dernière cellule de
la colonne B) en majuscule et j'effectue un tri des colonnes -> sans
problème.
Je n'arrive en revanche pas à sélectionner à la fin del a procédure, la
cellule qui se trouvait initialement à la droite de la target ...
J'ai essayé : Target.Offset(, 1).Select qui ne fonctionne pas,
pas plus que la fonction Find !

Par ailleurs, le tableau qui ne comporte que 28 lignes / 6 colonnes est
très lent lors de la procédure (8 sec lorsque j'ajoute un simple nom en
B28 !)
Est-ce normal ? (il n'y a aucune formule dans toutes les cellules ...)

Merci pour votre aide,
et bonne année à tous les exceliens contributeur du MPFE

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Cellule As Range, Posit As Long
If Target.Column = 2 And Target.Row > 1 And Target.Count = 1 Then
Application.ScreenUpdating = False
Target.Value = UCase(Target.Value)
' Target.Offset(, 1).Select
ActiveSheet.Range("B2:C" & Range("B1000").End(xlUp).Row) _
.Sort key1:¬tiveSheet.Range("B2"), order1:=xlAscending,
Header:=xlNo
On Error Resume Next
For Each Cellule In ActiveSheet.Range("Noms")
If Cellule.Value <> "" Then
Posit = Application.WorksheetFunction.Find(Target.Value,
Cellule.Value)
If Posit > 0 Then
Cellule.Offset(, 1).Activate
Exit Sub
End If
End If
Next
Application.ScreenUpdating = True
End If




Avatar
François
Bonjour Youky,
et Bonjour Lsteph,

Effectivement, ce que je recherchais à faire, c'était d'avoir la cellule
pré-activée par la Worksheet_Change soit celle de droite après classement
(et non d'avant) ...
J'avais aussi essayé de mettre :
For Each Cellule In ActiveSheet.Range("Noms")
If Cellule.Value = valeur Then
Cells(Cellule.Row, Cellule.Column + 1).Activate
Exit Sub ...
mais cela ne fonctionne pas non plus ...

Merci pour votre aide à tous les deux

P.S. j'ai aussi introduit les EnableEvents en début et fin de procédure...

"Youky (BJ)" a écrit dans le message de
news:

Avant que les rois ne rattrappent ta macro mets:
Application.EnableEvents = False
'ceci neutralise les événements exemple Target.Value = UCase(Target.Value)
'la macro repasse par là si changement de target.value
'ensuite en fin de macro remets...
Application.EnableEvents = True

Youky(BJ)



"François" a écrit dans le message de news:

Bonjour à tous,

Je profite que les rois ne nous aient pas encore rejoints pour vous
soumettre un petit problème ...

Dans un Worksheet_Change, je mets la cellule active (dernière cellule de
la colonne B) en majuscule et j'effectue un tri des colonnes -> sans
problème.
Je n'arrive en revanche pas à sélectionner à la fin del a procédure, la
cellule qui se trouvait initialement à la droite de la target ...
J'ai essayé : Target.Offset(, 1).Select qui ne fonctionne pas,
pas plus que la fonction Find !

Par ailleurs, le tableau qui ne comporte que 28 lignes / 6 colonnes est
très lent lors de la procédure (8 sec lorsque j'ajoute un simple nom en
B28 !)
Est-ce normal ? (il n'y a aucune formule dans toutes les cellules ...)

Merci pour votre aide,
et bonne année à tous les exceliens contributeur du MPFE

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Cellule As Range, Posit As Long
If Target.Column = 2 And Target.Row > 1 And Target.Count = 1 Then
Application.ScreenUpdating = False
Target.Value = UCase(Target.Value)
' Target.Offset(, 1).Select
ActiveSheet.Range("B2:C" & Range("B1000").End(xlUp).Row) _
.Sort key1:¬tiveSheet.Range("B2"), order1:=xlAscending,
Header:=xlNo
On Error Resume Next
For Each Cellule In ActiveSheet.Range("Noms")
If Cellule.Value <> "" Then
Posit = Application.WorksheetFunction.Find(Target.Value,
Cellule.Value)
If Posit > 0 Then
Cellule.Offset(, 1).Activate
Exit Sub
End If
End If
Next
Application.ScreenUpdating = True
End If








Avatar
François
Merci Charabeuh,

C'est super ! C'est exactement cela que je recherchais à faire ...

Merci encore et Bon WE

François

"Charabeuh" a écrit dans le message de news:
%23%
Bonsoir,

Peut-être en interprétant tes propos:

Private Sub Worksheet_Change(ByVal Target As Range)
'
Dim targetValue
'
Application.EnableEvents = False
'
If Target.Column = 2 And Target.Row > 1 And Target.Count = 1 Then
targetValue = UCase(Target.Value)
Target.Value = targetValue
ActiveSheet.Range("B2:C" & Range("B1000").End(xlUp).Row) _
.Sort key1:¬tiveSheet.Range("B2"), order1:=xlAscending, Header:=xlNo
Range("B2:B" &
Range("B1000").End(xlUp).Row).Find(What:=targetValue).Activate
ActiveCell.Offset(0, 1).Activate
End If
'
Application.EnableEvents = True
'
End Sub

Cdlt


"François" a écrit dans le message de
news:
Bonjour à tous,

Je profite que les rois ne nous aient pas encore rejoints pour vous
soumettre un petit problème ...

Dans un Worksheet_Change, je mets la cellule active (dernière cellule de
la colonne B) en majuscule et j'effectue un tri des colonnes -> sans
problème.
Je n'arrive en revanche pas à sélectionner à la fin del a procédure, la
cellule qui se trouvait initialement à la droite de la target ...
J'ai essayé : Target.Offset(, 1).Select qui ne fonctionne pas,
pas plus que la fonction Find !

Par ailleurs, le tableau qui ne comporte que 28 lignes / 6 colonnes est
très lent lors de la procédure (8 sec lorsque j'ajoute un simple nom en
B28 !)
Est-ce normal ? (il n'y a aucune formule dans toutes les cellules ...)

Merci pour votre aide,
et bonne année à tous les exceliens contributeur du MPFE

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Cellule As Range, Posit As Long
If Target.Column = 2 And Target.Row > 1 And Target.Count = 1 Then
Application.ScreenUpdating = False
Target.Value = UCase(Target.Value)
' Target.Offset(, 1).Select
ActiveSheet.Range("B2:C" & Range("B1000").End(xlUp).Row) _
.Sort key1:¬tiveSheet.Range("B2"), order1:=xlAscending,
Header:=xlNo
On Error Resume Next
For Each Cellule In ActiveSheet.Range("Noms")
If Cellule.Value <> "" Then
Posit = Application.WorksheetFunction.Find(Target.Value,
Cellule.Value)
If Posit > 0 Then
Cellule.Offset(, 1).Activate
Exit Sub
End If
End If
Next
Application.ScreenUpdating = True
End If