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 :

Obtenir le numéro de ligne de la première ligne visible par filtre


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien
    Inscrit en
    Mai 2014
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Mai 2014
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Obtenir le numéro de ligne de la première ligne visible par filtre
    Bonjour à tous,

    En cherchant la solution à la même question que dans cette discussion, et en faisant quelques tests, un eu par hasard, j'arrive à obtenir le numéro de ligne de la première ligne visible, grâce à la commende suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Premiere_Ligne_Filtre = Range("_FilterDataBase").Offset(1, 0).Resize(Range("_FilterDataBase").Rows.Count - 1).SpecialCells(xlCellTypeVisible).Row
    Y aurait-il des personnes qui pourraient me confirmer que ça marche ?

    Et également d'autres qui pourraient m'expliquer exactement le fonctionnement de la commande.


    Merci.

    Jérôme.

  2. #2
    Nouveau Candidat au Club
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Juin 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2008
    Messages : 2
    Points : 0
    Points
    0
    Par défaut
    Je confirme

    J'ai testé cette solution et ça marche pour mon exemple que voici : Un tableau de données filtré par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveSheet.Range("$A$11:$AF$50000").AutoFilter Field:=5, Criteria1:=Target
    Et puis je cherche un indice de colonne et j'accède à la première ligne des données filtrées par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveSheet.Range(Colonnes(I) & Premiere_Ligne_Filtre).Select
    C'est la cellule AZ1599 dans mon cas

  3. #3
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 761
    Points : 28 619
    Points
    28 619
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Y aurait-il des personnes qui pourraient me confirmer que ça marche ?
    Je confirme mais je suppose que tu l'as testée déjà mais pour ma part, je préfère cette syntaxe (dans un bloc With..End..With) plus simple à lire comme dans l'exemple ci-dessous.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim FirstOfRowFilter As Long
    With Range("dBase")
     FirstOfRowFilter = .Offset(1).Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible).Row
    End With
    MsgBox "La première ligne filtrée est " & FirstOfRowFilter
    Et également d'autres qui pourraient m'expliquer exactement le fonctionnement de la commande.
    Extrait de l'aide en ligne

    Range.SpecialCells, méthode
    La méthode SpecialCells d'un objet Range renvoie un objet Range qui représente toutes les cellules correspondant au type et à la valeur spécifiés
    Syntaxe
    expression.SpecialCells(Type, Value)
    expression Variable qui représente un objet Range.

    donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("dBase").SpecialCells(xlCellTypeVisible)
    Renvoie un objet Range représentant les cellules visibles de la plage nommée dBase
    la propriété Row, renvoie la première ligne de cet objet or comme la première ligne de cette plage de données filtrée contient les étiquettes de colonnes, elle ne répond pas aux critères du filtre et est donc visible.
    Ce qui fait que Row renverrait 1.
    C'est la raison pour laquelle on doit ajouter la propriété Offset avec comme valeur de l'argument RowOffset le chiffre 1 afin de se déplacer d'une ligne sur la plage de données visible.
    La prochaine ligne visible est donc bien la première des lignes filtrées
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Offset(1).Resize(.Rows.Count - 1)
    Et pour être complet, on ajoute la propriété Resize pour enlever une ligne de trop suite au décalage de une ligne d'Offset

    CQFD
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  4. #4
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 72
    Points : 149
    Points
    149
    Par défaut
    Et pour finir l'explication de Philippe le .Resize(.Rows.Count - 1) réduit d'une ligne la plage sélectionnée, et on procède ainsi car on décalé une fois en bas avec la fameux Offset.

    DeathZarakai.

    P.S. : Dsl j'avais pas vu que l'avais finalement abordé^^ Méaculpa et merci pour description très précise et clair de ta part.

  5. #5
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Par contre on préfère en général faire le Resize avant le Offset
    Car si on est à la dernière ligne du classeur on aura une erreur !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FirstOfRowFilter = .Resize(.Rows.Count - 1).Offset(1).SpecialCells(xlCellTypeVisible).Row
    Par pitié !!!! :Si vous ne savez pas faire cliquez ici !
    Citation Envoyé par Marc-L
    C'est dommage que parfois tu sois aussi lourd que tu as l'air intelligent…

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 761
    Points : 28 619
    Points
    28 619
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Par contre on préfère en général faire le Resize avant le Offset
    Car si on est à la dernière ligne du classeur on aura une erreur !
    Bonne remarque cerede2000 , je n'avais jamais pensé à ce cas possible même si je doute rencontrer un jour ce type de problème il est évident qu'à l'avenir j'en tiendrai compte.
    Je vote
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  7. #7
    Membre expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Points : 3 338
    Points
    3 338
    Par défaut
    Merci

    En effet maintenant qu'on à 1000000 de lignes
    En fait on à plus facilement le cas quand on fait un resize+offset montant
    Par pitié !!!! :Si vous ne savez pas faire cliquez ici !
    Citation Envoyé par Marc-L
    C'est dommage que parfois tu sois aussi lourd que tu as l'air intelligent…

  8. #8
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    Hi @cerede
    Je t'ai mis aussi un car c'est vrai il fallait y penser, et c'est toujours important de prendre en compte toutes les éventualités
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

Discussions similaires

  1. Réponses: 4
    Dernier message: 10/01/2014, 07h54
  2. [1.x] Lignes blanches en premières lignes
    Par Legenyes dans le forum Symfony
    Réponses: 2
    Dernier message: 24/10/2011, 14h08
  3. Réponses: 5
    Dernier message: 01/06/2011, 00h40
  4. [E-07] Figer la première ligne ET la première colonne
    Par Space Cowboy dans le forum Excel
    Réponses: 2
    Dernier message: 02/10/2008, 09h54
  5. Figer la première ligne et la première colonne d'un tableau
    Par kcizth dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 09/06/2006, 10h48

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