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 :

Compter le nombre de lignes dans un cellule


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 63
    Points : 48
    Points
    48
    Par défaut Compter le nombre de lignes dans un cellule
    Bonjour à tous.

    C'est sans doute une procédure très simple, mais je n'ai pas trouvé dans la junggle du forum.
    Voila, pour des raisons de mise en forme spécifique des cellules, j'ai besoin de connaitre le nombre de lignes affichées dans une cellule lorsque le texte inscrit est long.
    Quelqu'un a la solution?
    Merci.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Vous voulez dire que la cellule est formatée avec : Reenvoyer à la ligne automatiquement ?

    Si oui : regarder la hauteur de ligne lorsque le texte ne nécessite qu'une ligne (exemple 12.75) puis :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ht = 12.75
    htlgn = Rows(1).RowHeight
    nbl = htlgn/ht
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    lgn = ActiveCell.Row
    ht = 12.75
    htlgn = Rows(lgn).RowHeight
    nbl = htlgn/ht

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 63
    Points : 48
    Points
    48
    Par défaut
    Tiens oui, pourquoi pas...
    Votre solution peut faire l'affaire. Merci.
    Y a t-il un truc plus direct comme pour les textbox du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     nb_ligne = texbox1.LineCount
    ???
    merci

    d'autre part, la hauteur automatique ne marche pas s il y a des retours à la ligne.
    Donc vraiment, je suis à la recherche d'un code direct a priori

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Le saut de ligne dans une cellule est le caractère de contrôle chr(10)
    Il suffit de les compter.
    La méthode dada :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    For i = 1 to Len(Cells(NoLig, NoCol))
        Nb = Nb+ ((asc(mid(Cells(NoLig, NoCol),i,1)) = 10) *-1)
    Next
    nb = nb + 1'parce que la première ligne n'est pas comptée
    On doit bien avoir une fonction NbCar comme dans Word, dans Excel, ce serait plus simple. Tu regardes ça ?
    Bonne soirée

  5. #5
    Invité
    Invité(e)
    Par défaut
    A priori le saut de ligne dans une cellule n'est pas reconnu comme le caractère chr(10). J'ai eu des problèmes dans d'autres cas à ce sujet, mais s'il y a une solution je suis preneur.

    On doit bien avoir une fonction NbCar comme dans Word, dans Excel, ce serait plus simple. Tu regardes ça ?
    Oui bien sûr, la fonction Nbcar renvoie le nombre de caractères y compris les espaces et le caractère de passage à la ligne (même s'il n'est pas reconnu, en principe, comme Chr(10)), mais avec ce nombre de caractères comment retrouver le nombre de lignes en fonction de l'endroit où se trouve le caractère de passage à la ligne suivante ?

    Et cela peut se compliquer suivant que le format comprend le retour automatique à la ligne ou non.

    Et là encore, il est très possible que la solution existe, donc à suivre et je vais suivre.
    Dernière modification par ouskel'n'or ; 30/01/2009 à 20h09. Motif: Citation inutile

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Ok, Jacques_Jean, j'ai encore lu trop vite, chr(10) correspond au saut de ligne volontaire (Alt + Entrée)
    Je suis donc d'accord avec toi si ce saut de ligne est provoqué par l'option renvoi à la ligne automatique.

    Je nettoie

    Oui bien sûr, la fonction Nbcar renvoie le nombre de caractères
    Non, je pensais à autre chose (une fonction qui compte le nombre de fois qu'un caractère existe dans une chaîne) mais j'ai vérifié et apparemment ça n'existe pas

    Bonne soirée

  7. #7
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Bonsoir,

    Difficile, en effet, à la seule lecture de la question, de savoir si le nombre de lignes à compter est le nombre de lignes réelles ou celui de la répartition en affichage ou encore la conjugaison des deux ...
    Le demandeur voudra peut-être alors bien préciser ce point essentiel. Nous essaierons ensuite de déterminer la méthode la plus orthodoxe en fonction de cette réponse.
    Une question au demandeur, maintenant, pour le cas où il s'agirait du nombre de lignes (en présentation d'affichage uniquement et non réelles) : dans quel but ?

  8. #8
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Ouskel'n'or et Ucfoutu : en fait j'ai revu ma réponse précédente et en fonction de chacune de vos réponses voila ce que j'ai testé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Sub essai()
    htl = 12.75
    lgn = ActiveCell.Row
    htlgn = Rows(lgn).RowHeight
    txt = Cells(lgn, 1)
    lg = Len(txt)
     
    cpt = 1
     
        For i = 1 To lg
        car = Mid(txt, i, 1)
            If Asc(car) = 10 Then
            cpt = cpt + 1
            End If
        Next i
     
    nbl = htlgn / htl
    MsgBox "Nombre de lignes dans la cellule = " & nbl & Chr(10) & _
    "Dont : " & nbl - cpt & " dûe(s) au format de retour automatique à la ligne" & Chr(10) & _
    "Et   : " & cpt & " par insertion d'un saut de ligne"
    End Sub
    Qu'en pensez-vous ?
    Dernière modification par Invité ; 31/01/2009 à 17h19.

  9. #9
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Bonjour, jacques_jean,

    Oui.
    Mais pourquoi examiner caractère par caractère pour cpt ?
    Un split sur chr(10) ou carrément sur le passe-partout vbnewline puis utilisation du Ubound de l'array en résuiltant devrait faire l'affaire.

  10. #10
    Invité
    Invité(e)
    Par défaut
    Bien évidemment vous avez raison Ucfoutu.

    J'étais persuadé que Chr(10) n'était pas reconnu (mais était-ce parce que j'avais eu ce problème avec un tableau Word copié dans Excel, ou a une erreur de ma part) et comme souvent dans ce cas, je suis reparti avec une méthode un peu archaïque.

    Cela dit, avec la fonction Split, pas de problème (bien sûr on initialise la variable cpt (compteur) à 0 et non plus à 1 comme dans la procédure précédente :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Sub essai2()
    htl = 12.75
    lgn = ActiveCell.Row
    htlgn = Rows(lgn).RowHeight
    txt = Cells(lgn, 1)
    cpt = 0
     
        Tableau = Split(txt, Chr(10))
         For i = 0 To UBound(Tableau)
         cpt = cpt + 1
         Next i
     
    nbl = htlgn / htl
    MsgBox "Nombre de lignes dans la cellule = " & nbl & Chr(10) & _
    "Dont : " & nbl - cpt & "   dûe(s) au format de retour automatique à la ligne" & Chr(10) & _
    "Et     : " & cpt & "   par insertion d'un saut de ligne"
    End Sub

  11. #11
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Re, jacques_jean,

    Pourquoi faire cette boucle ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Tableau = Split(txt, Chr(10))
         For i = 0 To UBound(Tableau)
            cpt = cpt + 1
         Next i
    Alors que tu connais déjà le Ubound ?

  12. #12
    Invité
    Invité(e)
    Par défaut
    Oui, pourquoi ? That is the question !

    Parce que (sans aucun doute) "bêtement".

    Alors :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub essai2()
    htl = 12.75
    lgn = ActiveCell.Row
    htlgn = Rows(lgn).RowHeight
    txt = Cells(lgn, 1)
     
        Tableau = Split(txt, Chr(10))
        cpt = UBound(Tableau) + 1
     
    nbl = htlgn / htl
    MsgBox "Nombre de lignes dans la cellule = " & nbl & Chr(10) & _
    "Dont : " & nbl - cpt & "   dûe(s) au format de retour automatique à la ligne" & Chr(10) & _
    "Et     : " & cpt & "   par insertion d'un saut de ligne"
    End Sub
    On peut encore simplifier ?

  13. #13
    Membre chevronné Avatar de wilfried_42
    Homme Profil pro
    Auto-entrepreneur
    Inscrit en
    Novembre 2006
    Messages
    1 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Auto-entrepreneur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 427
    Points : 1 900
    Points
    1 900
    Par défaut
    Bonjour à tous

    à essayer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nbligne = Len(TextBox1.Value) - Len(Application.WorksheetFunction.Substitute(TextBox1.Value, Chr(10), "")) + 1

  14. #14
    Invité
    Invité(e)
    Par défaut
    Bonsoir wilfried_42,

    Je ne vois pas ce que cela ajoute au code déjà donné.
    Où est-il question d'une TextBox1.Value ?

  15. #15
    Membre éclairé
    Homme Profil pro
    retraité
    Inscrit en
    Mai 2006
    Messages
    542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mai 2006
    Messages : 542
    Points : 712
    Points
    712
    Par défaut
    Bonsoir à tous

    Qu'entends tu par "insertion d'un saut de ligne" ? Jean-Jacques, un retour ligne ? si oui, je ne suis pas d'accord avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cpt = UBound(Tableau) + 1
    car cela compte automatiquement un saut alors qu'il peut ne pas y en avoir. Suis je clair ?

    Quant à wilfried_42, comme il doit faire très très froid à St Etienne, il a du allumer un bon feu dans la cheminée, mais avec du "chichon" (on fait ce que l'on veut...)

    Eric

  16. #16
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Bonsoir à tous.


    Si le nombre de lignes vient d'une mise en forme de la cellule, il n'y aura ni Cr, ni Lf, ni CrLf. Donc rien à compter. A mon avis, du moins. L'idée initiale de Jacques-Jean était intéressante à ce titre,
    Vous voulez dire que la cellule est formatée avec : Reenvoyer à la ligne automatiquement ?

    Si oui : regarder la hauteur de ligne lorsque le texte ne nécessite qu'une ligne
    sauf que la cellule peut avoir une hauteur imposée par une autre cellule de la même ligne.

    Si le nombre de lignes vient des caractères de saut contenus dans le texte, elle est pas mal la formule de Wielfrid. Même s'il serait plus simple d'utiliser un Replace$ plutôt que la fonction de feuille Substitute.

    Et puis ucfoutu a posé une très bonne question restée sans réponse
    Une question au demandeur, maintenant, pour le cas où il s'agirait du nombre de lignes (en présentation d'affichage uniquement et non réelles) : dans quel but ?
    Il est où Gautheron, d'abord?

    PGZ

  17. #17
    Membre chevronné Avatar de wilfried_42
    Homme Profil pro
    Auto-entrepreneur
    Inscrit en
    Novembre 2006
    Messages
    1 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Auto-entrepreneur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 427
    Points : 1 900
    Points
    1 900
    Par défaut
    re: à tous

    1ere question : Nbcar en VBA : nombre de caractères
    n'ayant pas vu la réponse : je me suis permis de mettre LEN quelque soit la valeur : une textbox, une cellule ou une variable (LEN mot clé que je n'ai pas vu dans le fil)

    Ensuite pour trouver le nombre de carateres x (chr(10) dans ce cas), je n'ai vu que des boucles ou Split, Split n'étant pas reconnu dans toutes les versions d'excel, j'ai simplement voulu donner une alternative à ces deux modes.

    pour ce qui est de la textbox, je ne suis pas le premier à en parler je cite le demandeur gautheron
    Y a t-il un truc plus direct comme pour les textbox du style :
    nb_ligne = texbox1.LineCount???
    merci
    pour ce qui est de la fumette............. je prefere me taire

    Bon dimanche à tous

  18. #18
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Citation Envoyé par wilfried
    (LEN mot clé que je n'ai pas vu dans le fil)
    Citation Envoyé par ousk'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For i = 1 to Len(Cells(NoLig, NoCol))
    Après j'ai ajouté "Autant pour moi !" (à l'intention de pgz ) pisk'il n'y a pas de chr(10), on peut pas les compter... en substance.
    Pour ma part j'ai une idée sur l'utilisation de la hauteur de ligne : Ça peut servir à définir une hauteur afin que tout le texte apparaisse dans la cellule.

    Mais j'attendais un peu l'intervention de Gautheron avant de proposer une solution consistant... à imposer les sauts de lignes avec chr(10) (ou vblf)

  19. #19
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Pour répondre en premier lieu à Edelwesseric (merci pour la remarque) :
    Tableau = Split(txt, Chr(10))
    cpt = UBound(Tableau) + 1

    En effet j'ai oublié de retirer le + 1.

  20. #20
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Citation Envoyé par ouskel'n'or Voir le message
    Après j'ai ajouté "Autant pour moi !" (à l'intention de pgz )


    Errare humanum est,
    perseverare diabolicum


    PGZ

Discussions similaires

  1. Compter le nombre de ligne dans un fichier text
    Par nekcorp dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 05/06/2018, 14h10
  2. [XL-2010] Compter le nombre de lignes dans une cellule fusionnée
    Par hipnobe dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 08/02/2015, 23h12
  3. [XL-2003] compter le nombre de lignes dans une cellule Excel
    Par facteur dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 23/11/2012, 14h01
  4. Compter le nombre de ligne dans un fichier
    Par amine_en_france dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 31/05/2007, 17h19
  5. Réponses: 2
    Dernier message: 02/03/2004, 19h38

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