Connaitre le "focus" d'une cellule

Bonjour à tous,

Je sollicite votre aide car je n'arrive pas à récupérer un changement de cellule dans une selection multiple:

4tjn

c'est à dire lorsque je sélectionne plusieurs cellule et que j'appuie sur entrée, la selection (ou le focus plutot) change mais vba ne detect pas le changement de selection de la cellule vu que la selection est toujours [A1:A5] alors que pourtant je suis passé (via la touche entrée; mais ça pourrait etre autre chose) de la cellule A1 à A2 en focus.... d'ailleurs dans la zone de nom de cellule cela est bien pris en compte...

Sauriez vous comment faire pour obtenir l'adresse de ce focus à chaque changement/appuie?

N.B : j'ai essayé avec un activecell ça ne marche pas non plus....

Merci beaucoup pour votre aide,

Ced

Bonjour,

Essayer ce code :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim cell As Range, plage As Range

    For Each plage In Target.Areas
        Set cell = plage.Cells(1, 1)
    Next plage

    Debug.Print cell.Address
End Sub

Désolé pour la réponse tardive, merci de ta réponse thev. Je viens de tester ton code, cela ne fonctionne pas malheureusement.... Peut etre est ce l'endroit où on l'a mis qui ne vas pas (ie : en Worksheet_SelectionChange), j'ai l'impression que c'est juste que excel ne considère pas que la sélection ai changée.... car le debug affiche bien l'adresse lors de la 1ère selection avec la souris, mais même problème, lors de l'appui sur entrée pour focuser sur la cellule suivante, ça n'est pas détecté.... ce qui m'amène à penser que il considère que la selection ne change pas donc il ne lance pas la procédure écrite dans le Worksheet_SelectionChange. qu'en penses tu? C'est l'impasse? ;(

N.B: j'ai pas trop saisi le coup du range.cell(1,1) (c'est comme un offset au final?) lol.... range(cells()),cell()) je connais mais alors ça... :O

Merci encore

Bonsoir,

Laissez tomber ma première version de code qui ne répondait à votre problème.

Je pense que cette version devrait convenir avec un changement temporaire de l'action de la touche "Entrée" pour lancer la procédure évènementielle. :

Dim plage_sel As Range

Private Sub worksheet_SelectionChange(ByVal Target As Range)
    Dim cell As Range

    'cas d'une sélection multiple sur une colonne
    If Target.Rows.Count > 1 _
    And Target.Columns.Count = 1 Then
        Set plage_sel = Target
        Application.OnKey "{RETURN}", "" & Me.CodeName & ".entrée"     'personalisation touche Return
    End If

    'récupération focus sur plage sélectionnée
    If Not plage_sel Is Nothing Then
        If Not Intersect(Target, plage_sel) Is Nothing Then
            Set cell = Target.Resize(1, 1)
            MsgBox cell.Address
        Else
            Set plage_sel = Nothing
            Application.OnKey "{RETURN}"  'restauration touche Return
        End If
    End If
End Sub

Private Sub entrée()
    ActiveCell.Offset(1).Activate
    Call worksheet_SelectionChange(ActiveCell)
End Sub

Bonjour thev,

Parfait ça fonctionne!

Par contre, après plusieurs appuis sur entrée et une fois arrivé en bas de la sélection, un dernier appui sur entrée fait sortir de la sélection.... alors que normalement avec une utilisation normale de la touche entrée, on repart au début de la sélection.... Comment fait on du coup pour rétablir cette "spécificité" ?

Merci

Bonne journée

Ced

Bonsoir,

Essayer cette version

Dim first_cell As Range, last_cell As Range

Private Sub worksheet_SelectionChange(ByVal Target As Range)
    Dim cell As Range

    'récupération focus sur plage sélectionnée
    Set cell = Target.Resize(1, 1)
    MsgBox cell.Address

    'cas d'une sélection multiple sur une colonne
    With Selection
        If .Rows.Count > 1 And Selection.Columns.Count = 1 Then
            Set first_cell = .Cells(1, 1): Set last_cell = .Cells(.Rows.Count, 1)
            Application.OnKey "{RETURN}", "" & Me.CodeName & ".entrée"     'personalisation touche Return
        End If
    End With

    'restauration touche Return
    If Not first_cell Is Nothing And Not last_cell Is Nothing Then
        If Intersect(Target, Range(first_cell, last_cell)) Is Nothing Then
            Set first_cell = Nothing: Set last_cell = Nothing
            Application.OnKey "{RETURN}"
        End If
    End If
End Sub

Private Sub entrée()
    If ActiveCell.Address <> last_cell.Address Then ActiveCell.Offset(1).Activate _
    Else first_cell.Activate
    Call worksheet_SelectionChange(ActiveCell)
End Sub

Bonjour,

supprimé (mal lu)

eric

bonjour à tous,

Merci pour ta réponse thev, le weekend a été bon j'espère je vais essayer ça tout de suite et je renvoie un message dès que c'est bon (je mets un peu de temps à comprendre car c'est très complexe, je n'ai pas ton niveau en VBA malheureusement ;( ).

Pas de soucis Eriiic

Bonne journée,

Ced

Ouaou merci thev, ça marche à la perfection!!! Je vais surtout devoir potasser ça pour m’imprégner de la technique! Merci merci merci tu gères trop!

Passe une super journée et une bonne semaine,

Ced

je mets un peu de temps à comprendre

Si tu manipules la complexité de la chimie comme ton pseudo (à des fins honnêtes, bien entendu), tu devrais y arriver sans peine. Néanmoins, n'hésites pas à me demander des précisions si nécessaire.

haha non j'étais (et suis) nul en chimie mais je vais quand même tenter de comprendre. Merci beaucoup

Rechercher des sujets similaires à "connaitre focus"