Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

VBA nombre de lignes (retours) dans la cellule

33 views
Skip to first unread message

LSteph

unread,
Sep 16, 2009, 12:31:51 PM9/16/09
to
Bonjour,

Excel est avant tout un tableur , mais certains utilisateurs dans des
tableaux déjà fort grands utilisent parfois une colonne pour y rentrer
des observations qui peuvent s'averer un peu longues.
Or, lorsque le contenu d'une cellule est un peu long et en supposant
qu'on a fixé une largeur et utilisé le renvoi à la ligne , lorsque
l'on veut alors procèder à un ajustement automatique de cette ligne,
Excel 2003 ne fait pas correctement cet ajustement, il reste du texte
qui n'apparaît pas sauf si on augmente manuellement la hauteur de
ligne.

Quelqu'un saurait il en VBA quelle propriété donnerait le nombre de
lignes ou renvois à la ligne (Alt+Entrée inclus) découlant du contenu
de la cellule. Le but serait lorsque le nécessaire excède la partie
visible de réajuster directement la hauteur, puisque je connais la
taille de la police utilisée et la hauteur standard de ligne qui en
découle.
In fine cela me permettra d'adapter une procedure pour chaque
cellule d'une colonne distinctement.

Merci d'avance.

--
lSteph

isabelle

unread,
Sep 16, 2009, 1:05:18 PM9/16/09
to
bonjour LSteph,

est ce que cette ligne fonctionne ?

Columns("E:E").Rows.AutoFit

sinon pour compter :

nombreDeLigne = Application.CountA(Range("A1"), Chr(10))
nombreDeRetour�LaLigne = Application.CountA(Range("A1"), Chr(10)) - 1

isabelle

LSteph a �crit :


> Bonjour,
>
> Excel est avant tout un tableur , mais certains utilisateurs dans des

> tableaux d�j� fort grands utilisent parfois une colonne pour y rentrer


> des observations qui peuvent s'averer un peu longues.
> Or, lorsque le contenu d'une cellule est un peu long et en supposant

> qu'on a fix� une largeur et utilis� le renvoi � la ligne , lorsque
> l'on veut alors proc�der � un ajustement automatique de cette ligne,


> Excel 2003 ne fait pas correctement cet ajustement, il reste du texte

> qui n'appara�t pas sauf si on augmente manuellement la hauteur de
> ligne.
>
> Quelqu'un saurait il en VBA quelle propri�t� donnerait le nombre de
> lignes ou renvois � la ligne (Alt+Entr�e inclus) d�coulant du contenu
> de la cellule. Le but serait lorsque le n�cessaire exc�de la partie
> visible de r�ajuster directement la hauteur, puisque je connais la
> taille de la police utilis�e et la hauteur standard de ligne qui en
> d�coule.

LSteph

unread,
Sep 16, 2009, 3:20:13 PM9/16/09
to
Bonsoir Isabelle,

Merci de ton int�r�t pour cette question.

Pr�cis�ment .Rows.AutoFit
quand le texte est un peu long ne fait pas correctement cet ajustement,
il reste du texte de m�me manuellement.

> Application.CountA(Range("A1"), Chr(10))
Compter les chr(10) me renvoie uniquement ceux-cis mais pas les autres
retours. Exemple les 17 premieres lignes de mon pr�c�dent post �crites
dans une cellule me renvoie qu'il y a 2 retours.
Alors que selon la largeur il peut y en avoir bien plus.

Merci.

--
lSteph


isabelle a �crit :

isabelle

unread,
Sep 16, 2009, 5:10:17 PM9/16/09
to
ok, je comprend mieux ce que tu veut dire,
desol� je ne voie pas de solution,

isabelle

LSteph a �crit :

isabelle

unread,
Sep 16, 2009, 8:38:57 PM9/16/09
to
ou peut �tre si cette colonne est au format "Terminal",
il y aurait surement un moyen de calculer le nombre de pixcel par caractere,
mais par contre il y a surement, selon la carte graphique, une diff�rence,
sur mon pc il y a une diff�rence de 0.71 pixcel par caractere,

en tout cas, ce n'est pas �vident, je vient de me souvenir que geedee
avait ecrit quelque chose sur ce sujet,
je cherche et revient pour conclure,

isabelle

isabelle a �crit :

isabelle

unread,
Sep 16, 2009, 8:44:20 PM9/16/09
to
voil� j'ai retrouv� ce texte de geedee,
___________________________________________________________________________

le pixel d�pend en effet de la partie physique, donc variable selon le
p�riph�rique(marque, r�solution)
le Twips est screen-independent (1440 twips par pouce, ou 567 twips par cm)
selon le periph�rique il y a donc une relation variable pixel/twips
!!!!
supreme raffinement les pixels ne sont pas circulaires mais ovales !!!!!

http://support.microsoft.com/kb/463203/fr
http://support.microsoft.com/kb/210590
http://support.microsoft.com/default.aspx?scid=kb;en-us;Q94927

Le twip logique
Une unit� de distance, reposant sur twips, qui lors de l'impression, �quivaut �
un twip.
Cela permet de s'assurer que le placement et la proportion d'�l�ments d'�cran
dans l'�cran d'affichage de la m�me application sur tous les syst�mes.
A unit of distance, based on twips, that when printed, equals one twip.
This ensures that placement and proportion of screen elements in your screen
application display the same on all systems.

Un twip est une unit� de longueur �gale � 1 / 20 d'une imprimante, une
imprimante et le point est 1 / 72 de pouce. Il ya environ 1440 twips � une
logique pouces ou 567 twips � une logique centim�tre (la longueur d'un �l�ment
d'�cran, mesurant un pouce ou d'un centim�tre lors de l'impression).
A twip is a unit of length equal to 1/20 of a printer's point, and a printer's
point is 1/72 of an inch. There are approximately 1440 twips to a logical inch
or 567 twips to a logical centimeter (the length of a screen item measuring one
inch or one centimeter when printed).

Toute unit� de mesure absolue, comme les pouces, centim�tres ou twips, n'est pas
n�cessairement compatible lorsqu'ils traitent avec les p�riph�riques externes
tels que des moniteurs ou des imprimantes. Si, par exemple, vous programmez la
dessiner une ligne d'un pouce sur l'�cran, le mesurer avec une r�gle pour
s'assurer qu'elle est un pouce, puis passez � un plus grand �cran, la ligne ne
sera plus un pouce. Par cons�quent, l'une logique twip peut �tre constitu�e
d'une ou plusieurs twips.
Any absolute unit of measurement, such as inches, centimeters, or twips, is not
necessarily consistent when dealing with external devices such as monitors or
printers. If, for example, you programmatically draw a one inch line on a
monitor, measure it with a ruler to ensure that it is one inch, then switch to a
larger monitor, the line will no longer be one inch. Therefore, one logical twip
may consist of one or more twips.

____________________________________________________________________________________
ps/ ne pas oublier qu'un caract�re demeure un objet dessiner � l'�cran
en pixel
isabelle

isabelle a �crit :

isabelle

unread,
Sep 16, 2009, 10:04:41 PM9/16/09
to

et celui-ci de notre grand chef � quatre plumes,
------------------------------------------------------------------------------------------------------------
'Laurent Longre
'Date : 1999/11/30
'Objet : Re: Q: longueur en pixel ou en points d'un texte
'==================================================

Type Size
cx As Long
cy As Long
End Type

Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long

Declare Function ReleaseDC Lib "user32" _
(ByVal hwnd As Long, ByVal hDC As Long) As Long

Declare Function CreateFontA Lib "gdi32" _
(ByVal H As Long, ByVal W As Long, ByVal E As Long, _
ByVal O As Long, ByVal W As Long, ByVal I As Long, _
ByVal u As Long, ByVal S As Long, ByVal C As Long, _
ByVal OP As Long, ByVal CP As Long, ByVal Q As Long, _
ByVal PAF As Long, ByVal F As String) As Long

Declare Function SelectObject Lib "gdi32" _
(ByVal hDC As Long, ByVal hObject As Long) As Long

Declare Function DeleteObject Lib "gdi32" _
(ByVal hObject As Long) As Long

Declare Function GetTextExtentPoint32A Lib "gdi32" _
(ByVal hDC As Long, ByVal lpsz As String, _
ByVal cbString As Long, lpSize As Size) As Long

Declare Function GetDeviceCaps Lib "gdi32" _
(ByVal hDC As Long, ByVal nIndex As Long) As Long

Function LgTexte(Texte As String, Optional Police, _
Optional Taille, Optional Gras As Boolean, _
Optional Italique As Boolean)
Dim hFont As Long
Dim hDC As Long
Dim TSize As Size
Dim PixpInch As Double
With ActiveWorkbook.Styles("Normal").Font
If IsMissing(Police) Then Police = .Name
If IsMissing(Taille) Then Taille = .Font.Size
End With
hDC = GetDC(0)
PixpInch = GetDeviceCaps(hDC, 90) / 72
hFont = CreateFontA(-Taille * PixpInch, 0, 0, 0, _
400 + 300 * Gras, Italique, 0, 0, 1, 0, 0, 0, 0, Police)
If hFont = 0 Then LgTexte = CVErr(xlErrValue): Exit Function
SelectObject hDC, hFont
GetTextExtentPoint32A hDC, Texte, Len(Texte), TSize
DeleteObject hFont
ReleaseDC 0, hDC
LgTexte = TSize.cx / PixpInch
End Function

Function LgTexteCellule(Cellule As Range)
With Cellule.Font
LgTexteCellule = LgTexte(Cellule.Text, .Name, .Size, .Bold, .Italic)
End With
End Function

Sub Test()
Dim Cell As Range
Application.ScreenUpdating = False
Worksheets.Add
Range("B1") = "Longueur (points)"
Range("B1").Font.Bold = True
With Range("A2:A15")
.Value = "Zaza Excelle dans l'art de miouquer."
.Font.Name = "Times New Roman"
End With
For Each Cell In Range("A2:A15")
Cell.Font.Size = Cell.Row + 6
Cell(1, 2) = LgTexteCellule(Cell)
Next Cell
Range("A:B").EntireColumn.AutoFit
End Sub
'==================================================

La fonction LgTexte(Texte, Police, Taille, Gras , Italique) renvoie la
longueur en points du texte transmis, selon les param�tres de police,
taille et format (Gras et Italique: True / False). Par d�faut, elle
prend la police standard d'Excel et sa taille, caract�res normaux non
italiques.

La fonction LgTexteCellule(Cellule) renvoie la longueur en points du
texte de la cellule en fonction de sa police et de son format. Celui-ci
doit �videmment �tre uniforme (tous les caract�res dans le m�me format,
la m�me taille et la m�me police).

Pour comparer la valeur renvoy�e � la largeur d'une colonne, utiliser la
propri�t� Width de la colonne ou de l'une de ses cellules:
Range("A1").Width.

J 'ai constat� que ma fonction appliqu�e sur une cellule (par exemple A1)
renvoie une valeur tr�s l�g�rement inf�rieure � Range("A1").Width quand
la largeur de la colonne est ajust�e au texte de A1, Excel rajoutant
automatiquement une l�g�re marge � gauche et � droite des cellules. Je
ne sais pas comment calculer cette marge. La diff�rence est d'environ
+1-2% par rapport � la longueur renvoy�e par LgTexteCellule avec les
polices de taille usuelle (entre 8 et 14 points). En-dessous, elle peut
�tre un peu plus importante.

En esp�rant que ce te soit utile...

Laurent
-----------------------------------------------------------------------------------------
isabelle

Essart

unread,
Sep 17, 2009, 1:40:51 AM9/17/09
to
Bonjour,

Peux-tu essayer cette proc�dure qui me semble fonctionner � souhaits sous
2003 (pas test�e sur les autres ...)

-> en supposant que les commentaires sont en colonne A (� adapter sinon) :

Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Columns("A:A")) Is Nothing And Target.Count = 1
Then
With Columns("A:A")
.ColumnWidth = 200
'largeur n�cessairement surdimensionn�e par rapport � ce que
plausible
.AutoFit
End With
With Target.Rows
.RowHeight = 200 ' bis repetita
.AutoFit
End With
Target.Select
End If
End Sub

J'ai test� et cela marche ; si c'est bien ce que tu recherches ... ?

Qu'en penses-tu ?

Essart


"isabelle" <i@v> a �crit dans le message de news:
ekWJ3szN...@TK2MSFTNGP06.phx.gbl...

Essart

unread,
Sep 17, 2009, 1:50:17 AM9/17/09
to
Oups ...

J'ai oubli� de supprimer dans le mail le :
Target.Select
de fin de proc�dure que j'avais mis pour les tests ...
(juste pour �viter de remplir des pages !)

Essart

"Essart" <sa...@mail.fr> a �crit dans le message de news:
%23M2qpl1...@TK2MSFTNGP02.phx.gbl...

LSteph

unread,
Sep 17, 2009, 2:12:01 AM9/17/09
to
Bonjour,

Je teste cela dans la journ�e.

Merci pour ton aide.

--
lSteph

isabelle a �crit :
>

LSteph

unread,
Sep 17, 2009, 2:26:08 AM9/17/09
to
Bonjour,

C'est � peu pr�s ce que j'ai d�j� fait (hors evennementiel) mais pour
les textes un peu long cela n'est pas op�rant.
L'id�e donn�e par ailleurs pour compter les retours forc�s (chr(10)
combin�e,
au calcul nbchr / largeur auquel je vais les ajouter
devrait me donner le nb lignes � multiplier par la hauteur standard
selon la taille de la police.
Puisque LL a d�j� expertis� et mis au point une solution, je la
testerai dans la journ�e .

Je vous tiens au courant.

Merci � tous les deux.

--
lSteph

Essart a �crit :

LSteph

unread,
Sep 17, 2009, 8:48:41 AM9/17/09
to
Bonjour,

J'en suis arrivé à la conclusion en testant et pour finir en utilisant
ce qui suit qu'il reste le souci du renvoi à la ligne auto qui ne se
fait plus au dessus de 1024 chr

Merci pour votre aide.

--
lSteph

Sub ModifLg()
Dim c As Range, lng As Integer
If Selection.Cells.Count < 1 Then Exit Sub
On Error Resume Next
For Each c In Range("b2", [b65536].End(xlUp).Address).Cells
lng = Len(c) * 7.5 / 1.71
If lng > c.Columns.Width Then
c.RowHeight = 12.75 * ((lng / c.Columns.Width) + 1 _
+ Application.CountA(c, Chr(10)))
Else
c.Rows.AutoFit
End If
Next
End Sub

michdenis

unread,
Sep 17, 2009, 9:03:20 AM9/17/09
to
Bonjour LSteph,

| qu'il reste le souci du renvoi � la ligne auto qui ne se


| fait plus au dessus de 1024 chr

Les versions pr�c�dentes � excel 2007 ne permettent pas
d'afficher dans une cellule plus de 1024 caract�res. Pour voir
le contenu du texte, il faut le voir via la barre de formule.


"LSteph" <gmls...@gmail.com> a �crit dans le message de groupe de discussion :
86a5aaa6-9db7-48b0...@d23g2000vbm.googlegroups.com...
Bonjour,

J'en suis arriv� � la conclusion en testant et pour finir en utilisant
ce qui suit qu'il reste le souci du renvoi � la ligne auto qui ne se


fait plus au dessus de 1024 chr

Merci pour votre aide.

--
lSteph

Sub ModifLg()
Dim c As Range, lng As Integer
If Selection.Cells.Count < 1 Then Exit Sub
On Error Resume Next
For Each c In Range("b2", [b65536].End(xlUp).Address).Cells
lng = Len(c) * 7.5 / 1.71
If lng > c.Columns.Width Then
c.RowHeight = 12.75 * ((lng / c.Columns.Width) + 1 _
+ Application.CountA(c, Chr(10)))
Else
c.Rows.AutoFit
End If
Next
End Sub
On 16 sep, 18:31, LSteph <gmlst...@gmail.com> wrote:
> Bonjour,
>
> Excel est avant tout un tableur , mais certains utilisateurs dans des

> tableaux d�j� fort grands utilisent parfois une colonne pour y rentrer


> des observations qui peuvent s'averer un peu longues.
> Or, lorsque le contenu d'une cellule est un peu long et en supposant

> qu'on a fix� une largeur et utilis� le renvoi � la ligne , lorsque
> l'on veut alors proc�der � un ajustement automatique de cette ligne,


> Excel 2003 ne fait pas correctement cet ajustement, il reste du texte

> qui n'appara�t pas sauf si on augmente manuellement la hauteur de
> ligne.
>


> Quelqu'un saurait il en VBA quelle propri�t� donnerait le nombre de
> lignes ou renvois � la ligne (Alt+Entr�e inclus) d�coulant du contenu
> de la cellule. Le but serait lorsque le n�cessaire exc�de la partie

> visible de r�ajuster directement la hauteur, puisque je connais la
> taille de la police utilis�e et la hauteur standard de ligne qui en
> d�coule.

LSteph

unread,
Sep 17, 2009, 9:25:06 AM9/17/09
to
Oui, c'est bien cela ma conclusion, ça résoud le pb mais
bien sûr dans la limite des 1024 chr en revanche
voilà tout de même que viendrait un bon point pour la version 2007

Merci d'avoir confirmé et pour l'info.

--
lSteph

On 17 sep, 15:03, "michdenis" <michde...@hotmail.com> wrote:
> Bonjour LSteph,
>

> | qu'il reste le souci du renvoi à la ligne auto qui ne se


> | fait plus au dessus de 1024 chr
>

> Les versions précédentes à excel 2007 ne permettent pas
> d'afficher dans une cellule plus de 1024 caractères. Pour voir


> le contenu du texte, il faut le voir via la barre de formule.
>

> "LSteph" <gmlst...@gmail.com> a écrit dans le message de groupe de discussion :
> 86a5aaa6-9db7-48b0-a014-563d1e114...@d23g2000vbm.googlegroups.com...
> Bonjour,
>
> J'en suis arrivé à la conclusion en testant et pour finir en utilisant
> ce qui suit qu'il reste le souci du renvoi à la ligne auto qui ne se


> fait plus au dessus de 1024 chr
>
> Merci pour votre aide.
>
> --
> lSteph
>
> Sub ModifLg()
> Dim c As Range, lng As Integer
> If Selection.Cells.Count < 1 Then Exit Sub
> On Error Resume Next
> For Each c In Range("b2", [b65536].End(xlUp).Address).Cells
> lng = Len(c) * 7.5 / 1.71
> If lng > c.Columns.Width Then
> c.RowHeight = 12.75 * ((lng / c.Columns.Width) + 1 _
> + Application.CountA(c, Chr(10)))
> Else
> c.Rows.AutoFit
> End If
> Next
> End Sub
> On 16 sep, 18:31, LSteph <gmlst...@gmail.com> wrote:
>
>
>
> > Bonjour,
>
> > Excel est avant tout un tableur , mais certains  utilisateurs dans des

> > tableaux déjà fort grands utilisent parfois une colonne pour y rentrer


> > des observations qui peuvent s'averer un peu longues.
> > Or, lorsque le contenu d'une cellule est un peu long et en supposant

> > qu'on a fixé une largeur et utilisé le renvoi à la ligne , lorsque
> > l'on veut alors procèder à un ajustement automatique de cette ligne,


> > Excel 2003 ne fait pas correctement cet ajustement, il reste du texte

> > qui n'apparaît pas sauf si on augmente manuellement la hauteur de
> > ligne.
>


> > Quelqu'un saurait il en VBA quelle propriété donnerait le nombre de
> > lignes ou renvois à la ligne (Alt+Entrée inclus) découlant du contenu
> > de la cellule. Le but serait lorsque le nécessaire excède la partie

> > visible de réajuster directement la hauteur, puisque je connais la
> > taille de la police utilisée et la hauteur standard de ligne qui en
> > découle.


> >  In fine  cela me permettra d'adapter une procedure pour chaque
> > cellule d'une colonne distinctement.
>
> > Merci d'avance.
>
> > --

> > lSteph- Masquer le texte des messages précédents -
>
> - Afficher le texte des messages précédents -

michdenis

unread,
Sep 17, 2009, 9:55:22 AM9/17/09
to
On peut afficher 32768 caract�res dans une cellule de la version Excel 2007
comparativement � 1024 caract�res pour les versions d'Excel pr�c�dentes.

"LSteph" <gmls...@gmail.com> a �crit dans le message de groupe de discussion :
d34e9a45-b65b-43bb...@l35g2000vba.googlegroups.com...
Oui, c'est bien cela ma conclusion, �a r�soud le pb mais
bien s�r dans la limite des 1024 chr en revanche
voil� tout de m�me que viendrait un bon point pour la version 2007

Merci d'avoir confirm� et pour l'info.

--
lSteph

On 17 sep, 15:03, "michdenis" <michde...@hotmail.com> wrote:
> Bonjour LSteph,
>

> | qu'il reste le souci du renvoi � la ligne auto qui ne se


> | fait plus au dessus de 1024 chr
>

> Les versions pr�c�dentes � excel 2007 ne permettent pas
> d'afficher dans une cellule plus de 1024 caract�res. Pour voir


> le contenu du texte, il faut le voir via la barre de formule.
>

> "LSteph" <gmlst...@gmail.com> a �crit dans le message de groupe de discussion :
> 86a5aaa6-9db7-48b0-a014-563d1e114...@d23g2000vbm.googlegroups.com...
> Bonjour,
>
> J'en suis arriv� � la conclusion en testant et pour finir en utilisant
> ce qui suit qu'il reste le souci du renvoi � la ligne auto qui ne se


> fait plus au dessus de 1024 chr
>
> Merci pour votre aide.
>
> --
> lSteph
>
> Sub ModifLg()
> Dim c As Range, lng As Integer
> If Selection.Cells.Count < 1 Then Exit Sub
> On Error Resume Next
> For Each c In Range("b2", [b65536].End(xlUp).Address).Cells
> lng = Len(c) * 7.5 / 1.71
> If lng > c.Columns.Width Then
> c.RowHeight = 12.75 * ((lng / c.Columns.Width) + 1 _
> + Application.CountA(c, Chr(10)))
> Else
> c.Rows.AutoFit
> End If
> Next
> End Sub
> On 16 sep, 18:31, LSteph <gmlst...@gmail.com> wrote:
>
>
>
> > Bonjour,
>
> > Excel est avant tout un tableur , mais certains utilisateurs dans des

> > tableaux d�j� fort grands utilisent parfois une colonne pour y rentrer


> > des observations qui peuvent s'averer un peu longues.
> > Or, lorsque le contenu d'une cellule est un peu long et en supposant

> > qu'on a fix� une largeur et utilis� le renvoi � la ligne , lorsque
> > l'on veut alors proc�der � un ajustement automatique de cette ligne,


> > Excel 2003 ne fait pas correctement cet ajustement, il reste du texte

> > qui n'appara�t pas sauf si on augmente manuellement la hauteur de
> > ligne.
>


> > Quelqu'un saurait il en VBA quelle propri�t� donnerait le nombre de
> > lignes ou renvois � la ligne (Alt+Entr�e inclus) d�coulant du contenu
> > de la cellule. Le but serait lorsque le n�cessaire exc�de la partie

> > visible de r�ajuster directement la hauteur, puisque je connais la
> > taille de la police utilis�e et la hauteur standard de ligne qui en
> > d�coule.


> > In fine cela me permettra d'adapter une procedure pour chaque
> > cellule d'une colonne distinctement.
>
> > Merci d'avance.
>
> > --

> > lSteph- Masquer le texte des messages pr�c�dents -
>
> - Afficher le texte des messages pr�c�dents -

isabelle

unread,
Sep 17, 2009, 11:04:26 AM9/17/09
to
oh, tout une diff�rence, comme l'a dit lSteph, un bon point pour la
version 2007

isabelle

michdenis a �crit :

0 new messages