Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 Actualisation requête sélection tableau struturé

  • Initiateur de la discussion Initiateur de la discussion ZZ59264
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

ZZ59264

XLDnaute Occasionnel
Bonjour à tous,

J'ai un souci avec ma version Excel 2016 : suite à la mise en place d'un code qui permet l'actualisation d'une requête, je souhaite qu'on passe à la cellule du dessous,

Le hic, c'est qu'à la fin de la procédure VBA, il sélectionne tout le tableau structuré,

Merci d'avance pour votre aide,

Cordialement,
 

Pièces jointes

Solution
Re-,
Essaie avec ce code : (juste modifié l'évènement SelectionChange, mais je mets l'entièreté)

VB:
Dim KeyCells As Range, Tgt As Range
Dim Flag As Boolean

Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
If Flag Then Exit Sub
Set KeyCells = Union(Me.Range("t_Exemple[Exemple 1]"), Me.Range("t_Exemple[Exemple 2]"))
If Not Intersect(Target, KeyCells) Is Nothing Then
    Set Tgt = Target.Offset(1)
    Flag = True
    Me.Range("t_Exemple").ListObject.QueryTable.Refresh BackgroundQuery:=False
End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = Range("t_Exemple[#All]").Address Then
    If Not Tgt Is Nothing Then
        Tgt.Select
    Else...
Oui oui, en haut les variables comme ceci sont bien déclarées au dessus des deux codes :

VB:
Dim KeyCells As Range, Tgt As Range
Dim Flag As Boolean

Lorsque je souhaite entrer dans la requête, le TS se selectionne entièrement et le message d'erreur apparait,

Merci d'avance,

Cordialement,
 
Re-
Montre tout le code que tu as dans l'évènement
Le voici :
VB:
Dim KeyCells As Range, Tgt As Range
Dim Flag As Boolean

Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
If Flag Then Exit Sub
Set KeyCells = Union(Me.Range("t_Exemple[Exemple 1]"), Me.Range("t_Exemple[Exemple 2]"))
If Not Intersect(Target, KeyCells) Is Nothing Then
    Set Tgt = Target.Offset(1)
    Flag = True
    Me.Range("t_Exemple").ListObject.QueryTable.Refresh BackgroundQuery:=False
End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = Range("t_Exemple[#All]").Address Then Tgt.Select
Flag = False
End Sub

A la sélection de la requête, le TS se sélectionne et j'ai le message d'erreur 91,

Merci d'avance,

Cordialement,
 
Re-,
ça se provoque tout le temps, ou uniquement si la dernière cellule des colonnes "Exemple 1" ou "Exemple 2" est modifiée?
Si tu modifies une seule cellule du milieu, par exemple, ça bugue aussi?
 
Re-,
ça se provoque tout le temps, ou uniquement si la dernière cellule des colonnes "Exemple 1" ou "Exemple 2" est modifiée?
Si tu modifies une seule cellule du milieu, par exemple, ça bugue aussi?
Non le message d'erreur apparait uniquement si je souhaite entrer dans la requête par le biais du volet de requête,

En cliquant sur celle ci, le TS est sélectionné complètement et la le beug se produit, peu importe ou je me situe auparavant sur la feuille,

Cordialement,
 
Pfffft,
Précise quand même les conditions...
Lorsque tu mets à jour une requête via le volet, ça ne déclenche pas l'évènement "Change", donc ce code n'est pas utilisé.
Donc Tgt n'est pas défini.
Quelle cellule voudrais-tu sélectionner suite à cette actualisation via volet?
 
Hello

j'ai pas lu tout le fil, donc je ne sais pas si la question initiale a trouvé sa réponse
donc.. je propose ceci

VB:
Private Sub Worksheet_Change(ByVal Target As Range)

    On Error Resume Next
    NomTab = Target.ListObject 'vérifie qu'on a cliqué dans la table
    
    If NomTab = "" Then Exit Sub 'si clic en dehors d'une table==> on quitte
    
    Set lo = ActiveSheet.ListObjects(NomTab) 'on set la Table
    
    NomCol = lo.HeaderRowRange(Target.Column) 'on récupère le nom de la colonne
    If NomCol <> "EXEMPLE 1" And NomCol <> "EXEMPLE 2" Then Exit Sub 'si on ne clique pas dans une deux colonnes, on quitte
    
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    
    lo.QueryTable.Refresh BackgroundQuery:=False 'Maj de la requete
    
    Application.EnableEvents = True
    Application.ScreenUpdating = True
    
    'lo.ListRows(lo.ListRows.Count).Range.Offset(1, 0).Activate 'on selectionne la ligne sous la table
    lo.DataBodyRange(lo.ListRows.Count, Target.Column).Offset(1, 0).Select
End Sub
 
Désolé Cousinhub, je pensais avoir été clair au post55 et 61,

Je ne souhaite pas de mise à jour via le volet, je souhaite juste entrer dans la requête uniquement, probablement que cela enclenche l'actualisation quand même,

Je souhaiterai sélectionner celle(s) qui l'étaient avant de vouloir entrer dans la requête via le volet,

Merci d'avance,

Cordialement,
 
Merci vgendron pour votre proposition,

Cependant votre code fait comme els autres, c'est ç dire qu'à la fin de l'actualisation de la requête, c'est le tableau structuré qui est sélectionné et non la cellule du dessous saisi,

Le code proposait par Cousinhub au poste 45 répond à la demande, on échange pour résoudre la cas ou je souhaite entrer dans le requête via le volet,

Cordialement,
 
Vous n'avez clairement pas testé le code...
 
Re-,
Essaie avec ce code : (juste modifié l'évènement SelectionChange, mais je mets l'entièreté)

VB:
Dim KeyCells As Range, Tgt As Range
Dim Flag As Boolean

Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
If Flag Then Exit Sub
Set KeyCells = Union(Me.Range("t_Exemple[Exemple 1]"), Me.Range("t_Exemple[Exemple 2]"))
If Not Intersect(Target, KeyCells) Is Nothing Then
    Set Tgt = Target.Offset(1)
    Flag = True
    Me.Range("t_Exemple").ListObject.QueryTable.Refresh BackgroundQuery:=False
End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = Range("t_Exemple[#All]").Address Then
    If Not Tgt Is Nothing Then
        Tgt.Select
    Else
        Range("t_Exemple[Exemple 2]")(1).Select
    End If
End If
Flag = False
End Sub
 
Vous n'avez clairement pas testé le code...
Bonjour vgendron,

Ah si, je teste toute les propositions faites, c'est la moindre des choses,

Votre code renvoi une ligne en dessous de tableau, mais la fin de l'actualisation de la requête le TS est sélectionné : ce que je ne souhaite pas,

Je vous invite à lire tout le post afin de comprendre ma demande et les problématiques sur les différents codes proposés,

Cordialement,
 
Merci Cousinhub pour votre code,

Je vous confirme que celui me permet d'accéder à la requête sans message d'erreur,

Cordialement,
 
euh...
avec le fichier joint, qui contient mon code
1) si je modifie UNE valeur de la colonne Exemple1
==> la requette est actualisé, et D14 (Donc UNE cellule SOUS la table) est sélectionnée
2) si je modifie une valeur de la colonne Exemple 2, c'est E14 qui est sélectionnée

3) clic droit dans la table, actualiser==> la requete est lancée.. et la table entière n'est PAS selectionnée.. seule la cellule qui était active avant l'actualisation reste active..

et rentrer dans la requete à partir du clic droit dans la table, ou à partir du volet de droite.. bah..ca change rien.. pas de bug chez moi
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
1
Affichages
455
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…