impossible d'activer un offset dans un Worksheet_Change

Le
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:¬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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
LSteph
Le #18277271
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




Youky \(BJ\)
Le #18277261
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"
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




Charabeuh
Le #18278201
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" 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




François
Le #18278181
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)" 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"
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








François
Le #18282891
Merci Charabeuh,

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

Merci encore et Bon WE

François

"Charabeuh" %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" 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







Publicité
Poster une réponse
Anonyme