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 :

Compteur nombre de lignes dans cellules [XL-MAC 2016]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2013
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Février 2013
    Messages : 38
    Par défaut Compteur nombre de lignes dans cellules
    Bonjour à tous,

    Ci joint un extrait du tableau sur lequel je travail.
    Je ne peux pas en changer la forme.

    Dans la colonne "Historique", je voudrais pouvoir compter le nombre de lignes dans chaque cellules.
    Les cellules sont remplient via un UserForme, il y a des retour a la ligne volontaire (chr10) et des retour a la ligne automatique.
    le but c'est de compter le nombre de lignes et de redimenssioner la hauteur des cellules en fonction du nombre de lignes
    J'ai essayé avec la fonction AutoFit mais ca ne fonctionne pas.

    Merci de votre aide
    Pièce jointe 397965

  2. #2
    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
    Citation Envoyé par chevrotine56 Voir le message
    Dans la colonne "Historique", je voudrais pouvoir compter le nombre de lignes dans chaque cellules.
    Les cellules sont remplient via un UserForme, il y a des retour a la ligne volontaire (chr10) et des retour a la ligne automatique.
    Je peux me tromper mais je pense que c'est impossible.
    On peut, à la rigueur, compter le nombre de code 10 dans la cellules, mais le nombre de retour automatiques, c'est complètement invisible.

    A moins d'avoir utiliser une police de caractère à pas constant et de savoir combien de caractère par ligne donne la largeur de la cellule.
    Mais même ainsi, ça ne me semble pas vraiment fiable.

  3. #3
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2013
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Février 2013
    Messages : 38
    Par défaut
    Ok, et pour compter le nombre de code 10 je fais comment?

  4. #4
    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
    Cette fonction te donnera le nombre de lignes en fonction du nombre de retour forcés.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Function LIGNESIN(ByRef Loc) As Long
        Dim i As Long
        LIGNESIN = 1
        For i = 1 To Len(Loc.Value)
            If Mid(Loc, i, 1) = Chr(10) Then LIGNESIN = LIGNESIN + 1
        Next i
    End Function

  5. #5
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Février 2013
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Février 2013
    Messages : 38
    Par défaut
    j'ai reussi,
    J'ai un peux modifié le code ca donne ça :

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    Public Sub Mise_en_forme()
    Dim derlig As Integer
    Dim I As Integer
    Dim LIGNESIN As Integer
    Dim a As Long
    Dim Loc As Range
    Dim L As Long
     
    derlig = Cells(Rows.Count, 1).End(xlUp).Row
    derlig =derlig  + 1
     
    For I = derlig To 6 Step -2
        LIGNESIN = 0
            Set Loc = Cells(I - 1, "AF")
            L = 0
                For a = 1 To Len(Loc)
                    L = L + 1
                    If Mid(Loc, a, 1) = Chr(10) Then
                        LIGNESIN = LIGNESIN + 1
                        L = 0
                    End If
                    If L = 45 Then
                       LIGNESIN = LIGNESIN + 1
                       L = 0
                    End If
                Next a
            If LIGNESIN >= 3 Then
                LIGNESIN = LIGNESIN - 1
                Range(Rows(I), Rows(I - 1)).RowHeight = Range(Rows(I), Rows(I - 1)).RowHeight + (LIGNESIN * 11)
            End If
        Next I
    End Sub
    Merci de ton aide @Menhir

  6. #6
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    Salut

    La méthode autofit de la ligne ne donne pas un résultat convenable?

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  7. #7
    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
    Citation Envoyé par chevrotine56 Voir le message
    J'ai essayé avec la fonction AutoFit mais ca ne fonctionne pas.
    Encore faut-il savoir comment tu l'as utilisée...
    Avant de condamner l'outil, regardons la main qui le manie.

  8. #8
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    C'est bon j'ai compris, vive les cellules fusionnées....
    Bon courage!


    [Edit]
    Sinon copier le contenu de la cellule dans une feuille masquée en lui donnant la même largeur que la cellule source, puis en faisant un autofit et en relevant la hauteur ainsi obtenue.
    [/Edit]

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  9. #9
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re une autre solution
    bonjour
    il existe une astuce pour compter OU!! determiner le texte de chaque ligne dans une cellule
    et cela avec des saut de lignes volontaires (vbcrlf,chr(10),chr(13),vblf,etc...) ou par l'auto ajustement de la cellule
    pour cela on utilise un textbox au dimention et propriété font identique a la cellule
    en se servant des propriété (linecount,curline,seltext) on peut creer un tableau de lignes

    demo
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub testligne3()
     
        lignes = compteligne([A3])
     
        MsgBox "il y a " & UBound(lignes) & " lignes dans la cellule"
     
        MsgBox "la ligne 1 c'est :" & lignes(1)     'devrait donner la meme ligne que la ligne 1 dans la cellule
    End Sub
    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
    Function compteligne(cel)
        Dim T As Object, i#
        Set T = ActiveSheet.OLEObjects.Add(ClassType:="Forms.TextBox.1", Link:=False, DisplayAsIcon:=False, Left:=1, Top:=1, Width:=cel.Width, Height:=cel.Height)
        With T
            .Name = "wrapp"
            .Activate
            .Object.Value = vbCrLf & cel.Value: .Object.AutoSize = False: .Object.MultiLine = True: .Object.WordWrap = True: .Object.SelectionMargin = False
            .Object.Font.Size = cel.Font.Size: .Object.Font.Name = cel.Font.Name: .Object.Font.Bold = cel.Font.Bold: .Object.Font.Italic = cel.Font.Italic
            For i = .Object.LineCount - 1 To 1 Step -1
                .Object.CurLine = .Object.LineCount - i
                .Object.SelText = vbCrLf
            Next
            compteligne = Split(Replace(.Object.Value, vbCrLf & vbCrLf, vbCrLf), vbCrLf)
        End With
        ActiveSheet.OLEObjects("wrapp").Delete
    End Function
    Nom : demo.gif
Affichages : 971
Taille : 135,5 Ko
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

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

Discussions similaires

  1. [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
  2. [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
  3. 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, 18h48
  4. Export vers Excel et saut de ligne dans cellule
    Par sbeu dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 16/08/2004, 15h53
  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