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...
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
C'est parce que vous n'avez pas la même version Excel que la mienne, comme énoncé par Cousinhub,

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
Re-,
Tu as quelle version d'Excel?
 
bon, OK, avec ta version l'actualisation selectionne TOUTE la table
mais après quelque soit la version

lo.DataBodyRange(lo.ListRows.Count, Target.Column).Offset(1, 0).Select

devrait fonctionner non?
Oui cela fonctionne, la sélection se fait sous la table mais l'actualisation n'étant pas terminée, à la fin de celle ci, le TS est de nouveau selectionné,

Regarde un peu le code de cousinhub qui fonctionne, et qui a appréhendé la manière dont parvenir à la bonne détermination de la cible et de contourner ce problème d'actualisation,

Cordialement,
 
Cependant, je souhaite absolument passer par PQ, car le fichier est externe, et surtout c'est une partie que je maitrise beaucoup mieux qu'une procédure VBA,
Je suppose que vous avez testé le classeur sans PQ ?

Le classeur avec PQ a également du Code, vous allez avoir la double peine pour le maintenir , ( voire triple avec excel 2016 )
Vous ne maitrisez pas le code vba mais le pseudo-code de PQ vous est aisément compréhensible ? 🤔

Bonne continuation, j'ai fait ce que j'ai pu .... 😎
Cependant, je souhaite absolument passer par PQ, car le fichier est externe,
Pas besoin de PQ pour récupérer un fichier externe . 🤫
 
Dernière édition:
@Dan, j'ai testé votre code mais celui ci ne fonctionne pas, le TS reste actualisé à al fin de la procédure évènementielle,
Content que vous ayez votre solution avec la proposition de Cousinhub
Juste pour ma gouverne, pouvez-vous aussi tester le code ci-dessous que j'ai amendé par rapport à mes propositions précédentes

Code:
Dim encours As Boolean
Private Sub Worksheet_Change(ByVal Target As Range)
Dim keycells As Range
Dim cel As Range

If encours = True 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
    encours = True
    Range("t_Exemple").ListObject.QueryTable.Refresh BackgroundQuery:=False
    Set cel = Target.Offset(1, 0)
    Call selectionner(cel)
End If
encours = False
End Sub

Sub selectionner(cel As Range)
cel.Select
End Sub

Merci de votre retour. Après j'arrête .. 😅
Cordialement
 
Je suppose que vous avez testé le classeur sans PQ ?

Le classeur avec PQ a également du Code, vous allez avoir la double peine pour le maintenir , ( voire triple avec excel 2016 )
Vous ne maitrisez pas le code vba mais le pseudo-code de PQ vous est aisément compréhensible ? 🤔

Bonne continuation, j'ai fait ce que j'ai pu .... 😎

Pas besoin de PQ pour récupérer un fichier externe . 🤫
Bonjour,
Je peux vous assurer que PQ est bien plus accessible, ce n'est pas un pseudo code mais un code tout autant qu'il l'est dans VBA !

Mais peut être que vous ne vous en servez pas assez,

Enfin je n'entre pas dans ce débat, chacun son opinion quant à l'utilisation de l'un ou de l'autre !

C'est uniquement ma version Excel qui m'empêchait de sélectionner la cible.

Le but était de tenter de répondre à ma demande ce qu'à fait Cousinhub, rien d'autre.

Cordialement
 
Dernière édition:
Content que vous ayez votre solution avec la proposition de Cousinhub
Juste pour ma gouverne, pouvez-vous aussi tester le code ci-dessous que j'ai amendé par rapport à mes propositions précédentes

Code:
Dim encours As Boolean
Private Sub Worksheet_Change(ByVal Target As Range)
Dim keycells As Range
Dim cel As Range

If encours = True 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
    encours = True
    Range("t_Exemple").ListObject.QueryTable.Refresh BackgroundQuery:=False
    Set cel = Target.Offset(1, 0)
    Call selectionner(cel)
End If
encours = False
End Sub

Sub selectionner(cel As Range)
cel.Select
End Sub

Merci de votre retour. Après j'arrête .. 😅
Cordialement
Bonjour Dan,

Pas de soucis, vous pouvez faire autant de test que vous le souhaitez, je le ferai sans problème sous Excel 2016,

Malheureusement ce code proposé ne permet d'aller vers la cellule cible :
après la saisie d'un nombre puis Entrée , la cellule d'en dessous est sélectionné, l'actualisation se lance et le TS est sélectionné, la procédure évènementielle se termine par cette dernière étape.

Merci pour votre test,

Cordialement,
 
- 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
Retour