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 une cellule Excel [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre éprouvé
    Inscrit en
    Avril 2007
    Messages
    1 241
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 241
    Par défaut compter le nombre de lignes dans une cellule Excel
    Bonjour,

    Je dois calculer le nombre de retour à la ligne dans les cellules Excel de la colonne H de mon tableau.
    Aprés des recherches sur differents forum, j 'ai trouvé ce petit programme qui fonctionne relativement bien :
    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 comptage()
     
    htl = 12.75 
    lgn = ActiveCell.Row 
    htlgn = Rows(lgn).RowHeight
    txt = Cells(lgn, 1)
     
        Tableau = Split(txt, Chr(10))
        cpt = UBound(Tableau)
     
    nbl = htlgn / htl
    MsgBox "Nombre de lignes dans la cellule = " & nbl & Chr(10)
     
    End Sub
    Le souci, c'est que parfois, mes collègues créent des retour à la ligne vide.
    Et le code ci dessus ne fait pas la difference entre un retour à la ligne avec des informations et un retour à la ligne vide.

    Comment puis je dire à mon code de compter uniquement les retour à la ligne qui contiennent une information

    Merci d'avance

  2. #2
    Membre Expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Par défaut
    Bonjour,

    Tu peux essayer comme cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub comptage()
        htl = 12.75
        lgn = ActiveCell.Row
        htlgn = Rows(lgn).RowHeight
        txt = Cells(ActiveCell.Row, 1)
        Tableau = Split(txt, Chr(10))
        For i = 0 To UBound(Tableau)
            If Tableau(i) = "" Then rectif = rectif + 1
        Next i
        nbl = (htlgn / htl) - rectif
        MsgBox "Nombre de lignes dans la cellule = " & nbl & Chr(10)
    End Sub
    Attention toutefois à ce type de calcul car il est directement lié à la hauteur de ligne, elle-même étant liée au choix de la police (hauteur 12.75 points pour Arial 10 par exemple).

    Cordialement.

  3. #3
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Une autre fonction qui permet de donner le nombre de lignes séparés par un retours de ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Function NbreLignes(ByVal Str As String) As Integer
     
    NbreLignes = Len(Str) - Len(Replace(Str, Chr(10), "")) + (Right(Trim(Str), 1) = Chr(10)) + 1
    End Function

  4. #4
    Membre Expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Par défaut
    @mercatog
    Au vu du code présenté par facteur, j’ai compris qu’il souhaite compter les sauts de ligne ainsi que les renvois à la ligne automatique, ce qui explique son calcul avec la hauteur de ligne.

    Cordialement.

  5. #5
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    @gFZT82
    ...que les renvois à la ligne automatique..
    Oui peut être c'est ça.

  6. #6
    Membre éprouvé
    Inscrit en
    Avril 2007
    Messages
    1 241
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 241
    Par défaut
    Bonjour mercatog et gFZT82
    Merci pour cette reponse.
    Effectivement comme le dis gFZT82, la macro était fait pour compter les sauts de ligne ainsi que les renvois à la ligne automatique.
    Mais je me suis rendu compte que mes collegues utilisaient uniquement les renvois à la ligne automatique.
    Donc le code de mercatog me semble plus simple à appliquer.

    Cependant, je ne suis pas à l'aide avec les functions.
    Comment inserer ce code dans une cellule qui me donnerait le nombre de renvoie à la ligne ?

    Par exemple, les renvoie à la ligne se trouve dans les cellules de la colonne H.
    j 'aimerais que dans les cellule de la colonne I, s'inscrivent le nombre de renvoie automatique à la ligne.
    Exemple : H2 = 3 renvoie automatique
    donc I2 = 3

    Bonjour mercatog
    J'ai pu integré ton code dans les cellules de la colonne I.
    Et cela fonctionne trés bien : cela me donne donc le nombre de retour à la ligne des cellules de la colonne H.
    Néanmoins, j'ai pu constaté 1 problème qui crée un quiproquo:
    lorsque la cellule H2 est vide, le code me renvoie la valeur 1 alors que je souhaiterais avoir 0.
    Y aurait il un moyen d'y remedier ?

  7. #7
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Function NbreLignes(ByVal Str As String) As Integer
     
    NbreLignes = Len(Str) - Len(Replace(Str, Chr(10), "")) + (Right(Trim(Str), 1) = Chr(10)) - (Len(Str) > 0)
    End Function

  8. #8
    Membre éprouvé
    Inscrit en
    Avril 2007
    Messages
    1 241
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 241
    Par défaut
    Bonjour mercatog
    Ton code fonctionne à merveille .
    Pourrais tu me décrire ce code afin que je puisse le comprendre.. et ainsi le réutiliser dans d'autres fichiers
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NbreLignes = Len(Str) - Len(Replace(Str, Chr(10), "")) + (Right(Trim(Str), 1) = Chr(10)) - (Len(Str) > 0)

  9. #9
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    La fonction peut être écrite comme ceci (C'est plus visible et c'est plus compréhensible)
    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
    Function NbreLignes(ByVal Str As String) As Integer
    Dim n As Integer, m As Integer
    Dim Str2 As String
    Dim k As Byte
     
    n = Len(Str)
    If n > 0 Then
        's'il y a un saut de ligne en fin de Str, on ne doit pas tenir compte de lui
        If Right(Trim(Str), 1) = Chr(10) Then k = 1
        'On a compté le nombre total de caractères dans Str
        'ensuite on supprime la caractère qu'on désire compter (ici c'est le retour en ligne Chr(10)
        Str2 = Replace(Str, Chr(10), "")
        'm désigne le nombre total de caractères après avoir supprimé Chr(10)
        m = Len(Str2)
        If m > 0 Then NbreLignes = n - m + 1 - k
    End If
    End Function
    La forme précédente est une forme comprimée de tous ces lignes:

    Explication de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NbreLignes = Len(Str) - Len(Replace(Str, Chr(10), "")) + (Right(Trim(Str), 1) = Chr(10)) - (Len(Str) > 0)
    (a) Len(Str): Nombre global de caractères du mot Str
    (b) Len(Replace(Str, Chr(10), "")): Nombre global de caractères du mot Str ne tenant pas compte du caractère Chr(10)
    (c) (Right(Trim(Str), 1) = Chr(10)): Partie booléenne (Vrai=-1 et Faux=0) Si le dernier caractère est Chr(10) donne -1, sinon 0
    (d) (Len(Str) > 0): Partie booléenne (Vrai=-1 et Faux=0) Si le mot est vide donne -1 sinon 0


    NbreLignes =(a)-(b)+((c)-(d))

  10. #10
    Membre éprouvé
    Inscrit en
    Avril 2007
    Messages
    1 241
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 1 241
    Par défaut
    Merci Mercatog

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

Discussions similaires

  1. Compter nombre de mots dans une cellule Excel
    Par nkhalidy dans le forum Excel
    Réponses: 6
    Dernier message: 12/07/2017, 22h12
  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: 09/02/2015, 00h12
  3. Réponses: 7
    Dernier message: 14/03/2014, 14h39
  4. Compter le nombre de lignes dans une table
    Par foudesbois dans le forum VBA Word
    Réponses: 4
    Dernier message: 15/02/2013, 15h21
  5. Compter le nombre de lignes dans un cellule
    Par Gautheron dans le forum Macros et VBA Excel
    Réponses: 22
    Dernier message: 01/02/2009, 19h48

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