XL 2021 [Résolu] MFC et tableau structuré

jeff1494

XLDnaute Occasionnel
Bonjour à toutes et tous;
J'ai un TS de plusieurs centaines de lignes, et j'ai une macro qui me permet d'atteindre une ligne sur la base de la saisie de la valeur de la colonne A.
Une fois positionné, je sélectionne la cellule trouvée.

Voici le bout de code utilisé :
VB:
Option Explicit

'
Public Sub atteindre()
    Dim objet As String
    Dim MaLigne As Integer
    Dim Cel As Range
    Dim Plage As Range
    Dim k As Long

    objet = InputBox("Entrez le N° de l'objet recherché (Juste les chiffres)", "Rechercher un Objet")
    If objet = "" Then Exit Sub
    objet = "OBJ" & objet
    Set Plage = ActiveSheet.Range("A:A")
    Set Cel = Plage.Find(objet)
    If Not Cel Is Nothing Then
        MaLigne = Cel.Row
        Cells(MaLigne, 1).Select
    End If

End Sub

Le problème que je tente de résoudre est donc de mettre en évidence la ligne du TS où je suis positionné.
J'ai essayé d'utiliser une MFC avec la formule suivante :
' =LIGNE()=CELLULE("ligne") '
La MFC fonctionne bien, mais si je clique sur une autre ligne, même en dehors du tableau, alors la MFC s'applique aussi sur cette ligne.
Existe-t-il un moyen pour éviter cela?

Merci d'avance pour vos conseils.
Bonne journée à toutes et tous.
 
Dernière édition:

crocrocro

XLDnaute Impliqué
Bonjour le fil,
avec une fichier çà aurait été plus simple de répondre ;).
La fonction CELLULE pose quelques problèmes d'évaluation si le paramètre Référence est omis, ce qui est le cas ici.
1728469408744.png


Il faut demander un recalcul (F9) pour évaluer quelle est la cellule courante
 

crocrocro

XLDnaute Impliqué
Si le but est de repérer la cellule (ce que ne fait pas le select dans ton code vba), un scroll le permettrait (à mettre en fin de ta macro :
VB:
    'pour placer la cellule courante en haut à gauche de la page
  ActiveWindow.ScrollRow = ActiveCell.Row
 

TooFatBoy

XLDnaute Barbatruc
Bonjour,

J'ai un TS de plusieurs centaines de lignes, et j'ai une macro qui me permet d'atteindre une ligne sur la base de la saisie de la valeur de la colonne A.
Tu parles de TS, mais il n'apparaît nul part dans ta macro.


Le problème que je tente de résoudre est donc de mettre en évidence la ligne du TS où je suis positionné.
Tu parles de MFC, mais sans le classeur, il n'est pas possible de voir comment elle est exactement définie.

J'ai essayé d'utiliser une MFC avec la formule suivante :
' =LIGNE()=CELLULE("ligne") '
La MFC fonctionne bien
Chez moi je suis obligé d'appuyer sur <F9> pour que la MFC s'actualise...

si je clique sur une autre ligne, même en dehors du tableau, alors la MFC s'applique aussi sur cette ligne.
Existe-t-il un moyen pour éviter cela?
Je n'ai pas compris la question.


Ci-joint un classeur pour la recherche dans le TS.
 

Pièces jointes

  • MFC et tableau structuré (TFB-001).xlsm
    25.2 KB · Affichages: 2

jeff1494

XLDnaute Occasionnel
Merci @TooFatBoy ;

Concernant le TS, c'est la structure des données dans la feuille. Ne maitrisant pas encore tous le tenants et aboutissants des TS, j'ai cette macro qui me permet de me positionner sur la cellule contenant le N° recherché.

En fait l'idée de la MFC est de mettre en couleur la ligne contenant dans la colonne A la valeur recherchée.
J'ai donc sélectionné les colonnes et lignes de mon TS et appliqué la MFC comme décrit dans mon message de départ.
Cela fonctionne correctement, mais en fait je ne savais pas que cette MFC s'applique à toute la ligne, et non pas aux seules colonnes sélectionnées au départ.

Donc pour l'instant la solution de crocrocro va m'aller.
Mais je vais quand même regarder ta solution de près.

Bonne journée à toi.
 

TooFatBoy

XLDnaute Barbatruc
Concernant le TS, c'est la structure des données dans la feuille. Ne maitrisant pas encore tous le tenants et aboutissants des TS, j'ai cette macro qui me permet de me positionner sur la cellule contenant le N° recherché.
Tu semblais tellement insister sur le fait que tu travaillais sur un TS, et vu que tu semblais vouloir apprendre des choses, je ne comprenais pas que tu travailles par rapport à la feuille et non par rapport à ce fameux TS. ;)


En fait l'idée de la MFC est de mettre en couleur la ligne contenant dans la colonne A la valeur recherchée.
Donc j'ai l'impression que ça n'a pas grand chose à voir avec la sélection d'une cellule et une MFC comme invoqué au départ. 🤔

J'ai donc sélectionné les colonnes et lignes de mon TS et appliqué la MFC comme décrit dans mon message de départ.
Cela fonctionne correctement, mais en fait je ne savais pas que cette MFC s'applique à toute la ligne, et non pas aux seules colonnes sélectionnées au départ.
C'est étrange.
Peut-être t'es-tu trompé dans la plage d'application de la MFC ?

Mais, encore une fois, sans avoir ton classeur il est difficile de le débuguer. ;)
 

jeff1494

XLDnaute Occasionnel
@TooFatBoy ;
J'ai également pensé à une erreur dans la définition de la plage pour la MFC, et j'ai recommencé plusieurs fois.
Rien n'y fait.
Par contre cela n'est pas d'une importance capitale, donc la solution de crocrocro me convient et je pense en rester là.
Néanmoins merci de t'être penché sur mon problème.
Bonne journée.
 

crocrocro

XLDnaute Impliqué
en ajoutant une ligne Calculate à ta macro, tu as le beurre, l'argent du beurre ... mais évidemment seulement dans le cas où la sélection est faite par ta macro.

VB:
Public Sub atteindre()
    Dim objet As String
    Dim MaLigne As Integer
    Dim Cel As Range
    Dim Plage As Range
    Dim k As Long

    objet = InputBox("Entrez le N° de l'objet recherché (Juste les chiffres)", "Rechercher un Objet")
    If objet = "" Then Exit Sub
    objet = "OBJ" & objet
    Set Plage = ActiveSheet.Range("A:A")
    Set Cel = Plage.Find(objet)
    If Not Cel Is Nothing Then
        MaLigne = Cel.Row
        Cells(MaLigne, 1).Select
    End If
    'pour placer la cellule courante en haut à gauche de la page
    ActiveWindow.ScrollRow = ActiveCell.Row
    ActiveSheet.Calculate
End Sub
EDIT : Pour résoudre ton problème de sélection, il faut corriger ta formule de MFC comme suit pour que la correspondance se fasse sur la ligne et la colonne :
VB:
=ET(LIGNE()=CELLULE("ligne");COLONNE()=CELLULE("colonne"))
Et, pour éliminer les problèmes de la fonction CELLULE,
sur l'événement Worksheet Change de la feuille :
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    ActiveSheet.Calculate
End Sub

EDIT :En pj le fichier
 

Pièces jointes

  • Jeff.xlsm
    20.5 KB · Affichages: 1
Dernière édition:

Discussions similaires

Réponses
2
Affichages
192

Statistiques des forums

Discussions
314 963
Messages
2 114 808
Membres
112 255
dernier inscrit
Sandrine03430