IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Rretrouver l'index d'une ligne filtrée dans un tableau structuré


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Utilisateur
    Inscrit en
    Septembre 2022
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Utilisateur

    Informations forums :
    Inscription : Septembre 2022
    Messages : 3
    Par défaut Rretrouver l'index d'une ligne filtrée dans un tableau structuré
    Bonjour le forum,

    Voici l'exposé de mon problème.

    J'utilise les super outils proposés par #Laurent Ott# de gestion des tableaux structurés.

    J'ai un tableau structuré possédant pas mal de lignes. Pour gagner en rapidité d'exécution, je filtre le tableau avec la fonction TS_Filtres_Poser

    Je souhaite parcourir mes lignes filtrées et en lire les valeurs, mais je ne parviens pas à récupérer l'index de chacune des lignes de mon tableau filtré. Cet index m'est très utile pour lire les informations (fonction TS_InfoCellule) ou pour en rechercher une (fonction TS_Rechercher), sachant que je ne veux passer en paramètre que les lignes filtrées.

    Voici ma question :

    Comment parcourir mon tableau structuré filtré pour lire chaque ligne et comment obtenir le numéro d'index de la ligne en cours de traitement ?
    Existe-t-il une formule pour lire l'index d'une ligne d'un tableau filtré ou, à défaut, un petit programme qui le ferait ?
    Sachant que je ne cherche pas le numéro de ligne absolue de la cellule, mais sa positon relative dans ma table structurée.

    Et une question subsidiaire : comment savoir si une cellule (qui a été modifiée par exemple) appartient à un tableau structuré et comment obtenir ses coordonnées relatives dans le tableau (le numéro d'index et le numéro de colonne), par exemple la cellule C24 est à la 10ème ligne et la 2ème colonne de mon tableau structuré.

    Je vous remercie par avance des réponses que vous pourriez me donner.

    JM

    PS : j'utilise la version 16 d'Excel pour Mac, mais je souhaite que la ou les solutions proposées soient compatibles avec des versions antérieures fonctionnant sur Windows 10 (Office 2013 version 15)

  2. #2
    Membre éclairé
    Homme Profil pro
    instituteur
    Inscrit en
    Juillet 2018
    Messages
    615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : instituteur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2018
    Messages : 615
    Par défaut
    Bonjour à vous

    Je proposerais d'utiliser la boucle for each pour parcourir de bout à bout les cellules

  3. #3
    Candidat au Club
    Homme Profil pro
    Utilisateur
    Inscrit en
    Septembre 2022
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Utilisateur

    Informations forums :
    Inscription : Septembre 2022
    Messages : 3
    Par défaut
    Citation Envoyé par Mr l'Ashanti Voir le message
    Bonjour à vous

    Je proposerais d'utiliser la boucle for each pour parcourir de bout à bout les cellules
    C'est une solution que j'avais envisagé, mais ma table sera conséquente et je souhaitais parvenir à une solution plus rapide.

    Après maintes recherches, j'ai fait ce petit code qui fonctionne :

    [Index de ma cellule] = Cellule.Row - [Mon tableau].Cells(1).Row + 1

    soit le numéro de ligne physique de ma cellule - le numéro de ligne de la première cellule du tableau + 1
    avec un système de gestion d'erreur si le tableau est vide et et de test d'appartenance de ma cellule avec mon tableau (avec la commande intersect).

    Et ça semble fonctionner...

    En tout cas, merci de votre réponse.

  4. #4
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 178
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 178
    Par défaut
    Hello,
    Citation Envoyé par gstn_lgff Voir le message
    Et une question subsidiaire : comment savoir si une cellule (qui a été modifiée par exemple) appartient à un tableau structuré et comment obtenir ses coordonnées relatives dans le tableau (le numéro d'index et le numéro de colonne), par exemple la cellule C24 est à la 10ème ligne et la 2ème colonne de mon tableau structuré.
    Peut-être que ma fonction CellActiveTS(NomTableau) qui se trouve ici, peut t'aider pour cela.

    Ami calmant, J.P

  5. #5
    Rédacteur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2013
    Messages
    1 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Août 2013
    Messages : 1 010
    Par défaut
    Bonjour,
    Une fonction pour parcourir les lignes visibles d'un tableau "Tableau1" :

    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Boucle_Sur_Lignes_Visibles()
     
    Dim TS As Range
    Set TS = Range("Tableau1")
     
    Dim r As Range
    For Each r In TS.ListObject.DataBodyRange.SpecialCells(xlCellTypeVisible)
        Debug.Print r.Row - TS.Row + 1
    Next r
     
    End Sub

    La fonction de jurassic pork est très pratique également.

    Bonne programmation.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour le fil

    @laurent_ott, petite modification à ton code si je puis me permettre

    Permet de ne parcourir que les cellules de la 1ère colonne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub Boucle_Sur_Lignes_Visibles()  Dim TS As Range, r As Range
      Set TS = Range("Tableau1")
      For Each r In TS.ListObject.ListColumns(1).DataBodyRange.SpecialCells(xlCellTypeVisible)
        Debug.Print r.Row - TS.Row + 1
      Next r
    End Sub
    A+

  7. #7
    Rédacteur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2013
    Messages
    1 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Août 2013
    Messages : 1 010
    Par défaut
    Citation Envoyé par BrunoM45 Voir le message
    Bonjour le fil

    @laurent_ott, petite modification à ton code si je puis me permettre

    Permet de ne parcourir que les cellules de la 1ère colonne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub Boucle_Sur_Lignes_Visibles()  Dim TS As Range, r As Range
      Set TS = Range("Tableau1")
      For Each r In TS.ListObject.ListColumns(1).DataBodyRange.SpecialCells(xlCellTypeVisible)
        Debug.Print r.Row - TS.Row + 1
      Next r
    End Sub
    A+
    Effectivement, et en gérant le cas où aucune cellule est visible :

    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Sub Boucle_Sur_Lignes_Visibles()
     
    Dim TS As Range
    Set TS = Range("Tableau1")
     
    Dim r As Range, c As Range
    On Error Resume Next
    Set c = TS.ListObject.ListColumns(1).DataBodyRange.SpecialCells(xlCellTypeVisible)
    If Not c Is Nothing Then
        For Each r In c
            Debug.Print r.Row - TS.Row + 1
        Next r
    End If
    On Error GoTo 0
    End Sub

    Bonne programmation.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Determiner l'index d'une ligne sélectionnée dans une ComboBox
    Par -Fly- dans le forum VB.NET
    Réponses: 2
    Dernier message: 06/05/2012, 18h43
  2. Réponses: 2
    Dernier message: 07/12/2007, 16h32
  3. [Débutante] Atteindre une ligne aléatoire dans un tableau
    Par rosanne dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 29/10/2007, 13h05
  4. Réponses: 5
    Dernier message: 25/06/2007, 09h51
  5. [HTML] Se placer à une ligne précise dans un tableau
    Par seb55555 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 28/10/2004, 15h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo