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 :

nombre de ligne d'une sélection multiple [XL-2019]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Janvier 2020
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Janvier 2020
    Messages : 129
    Par défaut nombre de ligne d'une sélection multiple
    Bonjour à tous,
    Je cherche à compter le nombre de ligne de ma sélection.
    Cette sélection peut être des cellules/lignes/colonnes contiguës ou non contiguës (càd sélectionnées avec ctrl)

    Avec le code ci dessous (sel as range) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For Each sel In Selection
    x = x + sel.Rows.Count
    Next sel
    J'obtient bien un nb de ligne, mais il ajoute une ligne au total pour chaque cellule de la sélection. Si je sélectionne une ligne complète, le résultat est 18384.
    Pour la sélection d'une ligne complète, j'attends x=1
    Pour 3 lignes (contiguës ou non), j'attends x=3
    pour 2 cellules sélectionnées sur 2 lignes différentes, j'attends x=2
    etc...

    Comment puis-je code ça?
    Merci d'avance
    Benoit

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 684
    Par défaut
    Bonjour,

    une proposition:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim r As Long, c As Long, cel as range
    For Each cel In Selection.Cells
    If Not cel.Row = r Then c = c + 1
    r = cel.Row
    Next cel
    MsgBox c
    edit: le code de Mehnir est bien meilleur

  3. #3
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    x = Intersect(Selection.EntireRow, Columns(1)).Cells.Count

  4. #4
    Membre confirmé
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Janvier 2020
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Janvier 2020
    Messages : 129
    Par défaut
    Que de choix !
    Merci Messieurs, les 2 codes fonctionnent impec.
    Je comprends comment fonctionne celui de Halaster, mais pas bien celui de Menhir.

    Pour que je me couche moins ignare, pourrais de m'expliquer stp?

    Bonne fin de journée à tous
    Benoit

  5. #5
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 684
    Par défaut
    Citation Envoyé par BenoitL77 Voir le message
    Pour que je me couche moins ignare, pourrais de m'expliquer stp?
    selection.entirerow selectionne les lignes complètes de tout ce que tu as sélectionné
    Intersect permet de garder uniquement ce qui appartient au deux range qu'on lui passe en paramètre
    Donc ici toutes tes lignes et la colonne 1, il te reste donc la première cellule de chaque ligne et tu en compte le nombre

  6. #6
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Utiliser EntireRow a deux avantages : d'abord ça fusionne les cas de cellules sur une même ligne, ensuite on est sûr que pour chaque ligne il y aura la colonne 1.
    Du coup, il suffit de faire l'intersection avec la colonne 1 pour avoir une cellule par ligne.
    Il ne reste plus alors qu'à compter les cellules restantes pour connaitre le nombre de lignes.

  7. #7
    Membre confirmé
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Janvier 2020
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Janvier 2020
    Messages : 129
    Par défaut
    Merci pour ces explication.
    Mais...j'ai crié victoire trop tôt.
    J'ai opté pour la version Menhir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim x As Integer
    x = Intersect(Selection.EntireRow, Columns(1)).Cells.Count 'compte les lignes de la sélection, même si sélection multiple
    Quand j'ouvre mon fichier, j'ai message d'erreur N°91, la variable Object ou la variable de bloc with non définie.
    Sur la ligne 3.
    J'arrête la macro via débugage et une fois ça passé, ça marche impec.

    Pourquoi ce plantage à l'ouverture?
    J'ai essayé d’enregistrer le fichier avec des sélections différentes pour voir (une cellule, une ligne...) ça n'a pas d'influence

    Merci

  8. #8
    Membre confirmé
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Janvier 2020
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Janvier 2020
    Messages : 129
    Par défaut
    je viens de voir que si j'enregistrais mon fichier en étant sur une autre feuille que la feuil2, je n'avais pas de pb à l'ouverture.
    ça ne règle pas le pb, mais vous apportera peut être une info pour trouver la solution...

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 14/03/2014, 10h15
  2. [C#] Limité le nombre de lignes dans une DataView ...
    Par maitrebn dans le forum Accès aux données
    Réponses: 5
    Dernier message: 08/11/2005, 00h57
  3. nombre de lignes d'une table de ma BD
    Par manikou dans le forum MFC
    Réponses: 4
    Dernier message: 06/07/2005, 11h04
  4. Réponses: 8
    Dernier message: 20/06/2005, 16h10
  5. determination le nombre de ligne d'une table
    Par picoti2 dans le forum Bases de données
    Réponses: 2
    Dernier message: 18/03/2004, 10h25

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