Actualisation requête & selection de la cellule modifiée

Bonjour à tous,

J'utilise ce code afin d’actualisé à chaque changement d'une des cellules des colonnes Exepmle1 ou Exemple2, ma requête :

Private Sub Worksheet_Change(ByVal Target As Range)

        Application.ScreenUpdating = False

    Set KeyCells = Union(Range("t_Exemple[Exemple1]"), Range("t_Exemple[Exemple2]"))

    On Error Resume Next

    If Not Intersect(Target, KeyCells) Is Nothing Then

        Application.EnableEvents = False

        Range("t_Exemple").ListObject.QueryTable.Refresh BackgroundQuery:=False

        Application.EnableEvents = True

    End If

    Target.Select

End Sub

Le hic c'est que je souhaite, aprés la fin de l'opération de rafraichissement, revenir sur la cellule en dessous de celle modifiée,

Merci d'avance,

Cordialement,

Salut,

Peut etre quelque chose comme ça ?

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim currSel As Range
    Set currSel = Selection

    Application.ScreenUpdating = False

    Set KeyCells = Union(Range("t_Exemple[Exemple1]"), Range("t_Exemple[Exemple2]"))

    On Error Resume Next

    If Not Intersect(Target, KeyCells) Is Nothing Then

        Application.EnableEvents = False

        Range("t_Exemple").ListObject.QueryTable.Refresh BackgroundQuery:=False

        Application.EnableEvents = True
        currSel.Offset(1).Select
    End If
End Sub

Bonjour saboh12617,

Tout d'abord merci pour votre retour, le hic c'est qu'il sélectionne la cellule d'en dessous et seulement après il actualise la requête, de ce fait à la fin c'est tout le

tableau structuré qui est sélectionné et non la cellule d'en dessous,

Merci d'avance,

Cordialement,

Ah… J'ai un peu du mal à saisir. Si vous mettez DoEvents comme ceci, il y a encore le problème ?

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim currSel As Range
    Set currSel = Selection

    Application.ScreenUpdating = False

    Set KeyCells = Union(Range("t_Exemple[Exemple1]"), Range("t_Exemple[Exemple2]"))

    On Error Resume Next

    If Not Intersect(Target, KeyCells) Is Nothing Then

        Application.EnableEvents = False

        Range("t_Exemple").ListObject.QueryTable.Refresh BackgroundQuery:=False

        Application.EnableEvents = True
        DoEvents
        currSel.Offset(1).Select
    End If
End Sub

Bonjour saboh12617,

Non j'ai toujours le même problème, pourtant j'ai cherché sur le net, et j'ai décoché l’actualisation en arrière plan,

Mais rien y fait il actualise la requête mais ne veut pas retourner sur la cellule en dessous de celle modifié, et fini la procédure par sélectionné tout le tableau,

Cordialement,

Oui c'est vrai que les Query se sélectionnent à la fin… Mais excusez-moi, vous relancez une requête à chaque fois que vous modifiez des valeurs ?? Ne serait-ce pas plus simple de lancer une requête une fois tout modifié ? C'est assez "lourd" comme procédure.

Sinon peut être qu'on pourrait mettre un "temps d'attente", mais c'est vraiment pas terrible je trouve. A mon avis le problème se situe autre part, quand vous exécutez le code ci-dessous, que vous affiche la fenêtre immédiate ?

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim currSel As Range
    Set currSel = Selection
    Debug.Print "t:",Target.Address
    Debug.Print "c:", currSel.Address

    Application.ScreenUpdating = False

    Set KeyCells = Union(Range("t_Exemple[Exemple1]"), Range("t_Exemple[Exemple2]"))

    If Not Intersect(Target, KeyCells) Is Nothing Then

        Range("t_Exemple").ListObject.QueryTable.Refresh BackgroundQuery:=False

        DoEvents
        currSel.Offset(1).Select
        Debug.Print "s:", Selection.Address
    End If
End Sub

Bonjour,
Peux-tu essayer ceci et me redire ?
Cdlt.

Dim WithEvents QT As QueryTable
Dim ACell As Range

Private Sub Worksheet_Change(ByVal Target As Range)
    Application.ScreenUpdating = False
    Set KeyCells = Union(Me.Range("t_Exemple[Exemple1]"), Me.Range("t_Exemple[Exemple2]"))
    Set ACell = Target
    If Not Intersect(ACell, KeyCells) Is Nothing Then
        Application.EnableEvents = False
        Set QT = Me.ListObjects("t_exemple").QueryTable
        QT.Refresh BackgroundQuery:=False
        Application.EnableEvents = True
    End If
End Sub

Private Sub QT_AfterRefresh(ByVal Success As Boolean)
    ACell.Offset(1).Select
End Sub

Merci pour vos retours,

Mais non rien y fait il actualise et sélectionne le tableau structuré découlant de la requête, mais ne veut pas après l'actualisation aller sur la cellule en dessous de celle qui a été modifié

Cordialement,

Re,
Que retourne ?

Private Sub QT_AfterRefresh(ByVal Success As Boolean)
    MsgBox ACell.Parent.Name
    MsgBox ACell.Address & " : " & ACell.Value
End Sub

Bonjour Jean Eric,

La partie que vous me proposer ne me retourne rien

Dim WithEvents QT As QueryTable
Dim ACell As Range

Private Sub Worksheet_Change(ByVal Target As Range)
    Application.ScreenUpdating = False
    Set KeyCells = Union(Me.Range("t_Exemple[Exemple1]"), Me.Range("t_Exemple[Exemple2]"))
    Set ACell = Target
    If Not Intersect(ACell, KeyCells) Is Nothing Then
        Application.EnableEvents = False
        Set QT = Me.ListObjects("t_exemple").QueryTable
        QT.Refresh BackgroundQuery:=False
        Application.EnableEvents = True
    End If
End Sub

Private Sub QT_AfterRefresh(ByVal Success As Boolean)
    MsgBox ACell.Parent.Name
    MsgBox ACell.Address & " : " & ACell.Value
End Sub

La requête s’exécute mais pas de msg box à l'horizon !,

Cordialement,

Re,
Un petit classeur pour étudier la chose ?
Cdlt.

Bonsoir à tous et à Jean Eric,

Au départ je penserai qu'on pourrai s'en passer, mais effectivement afin que vous puissiez voir j'ai construit un fichier Test,

Si on entre une valeur sur les colonnes Exemple 1 ou Exemple 2, la procédure évènementielle se déclenche mais je n'arrive pas à passer à la cellule en dessous,

Merci d'avance,

Cordialement,

14test.xlsm (21.17 Ko)

Perso j'ai aucun problème avec le fichier. Le tableau n'est pas sélectionné…

Il y a juste à corriger le currSel.Offset(1).Select à la fin, qu'on peut supprimer même puisque le tableau n'est pas sélectionné. Etrange. @JeanEric aura (j'espère) des explications mais moi je sèche !

Bonsoir saboh12617,

Merci pour votre retour,

Sur ma version Excel2016, moi le tableau est sélectionné à la fin de la procédure

Peut être une option sur ma version Excel?,

Cordialement,

Re,
Macro fonctionnelle !
Pour la démonstration, j'ai modifié le déplacement de la sélection après validation (options avancées).
Par défaut, c'est "en bas", j'ai mis à "à droite".
On sélectionne bien la cellule row + 1.
C'est peut-être en effet, un souci de version Excel.
Un nouvel intervenant sous 2016, 2019 ou 2021 serait apprécié ! 😉
Cdlt.

18test.xlsm (38.83 Ko)

Bonsoir Jean Eric,

Merci pour votre retour,

Je laisse donc le post ouvert pour permettre de savoir quel serait le problème lié à ma version 2016, je tente de chercher sur le net mais je ne trouve pas !

Cordialement,

Bonjour à tous,

Personne qui aurait Excel 2016 pour voir où se situe le problème?,

Merci d'avance,

Cordialement,

Rechercher des sujets similaires à "actualisation requete selection modifiee"