[VBA/Excel] Hauteur de ligne

Résolu/Fermé
Signaler
Messages postés
14
Date d'inscription
lundi 7 avril 2008
Statut
Membre
Dernière intervention
21 juillet 2009
-
 D.O.C. -
Bonjour,

J'ai un léger problème avec VBA sur Excel.

En cliquant sur un bouton, je veux copier le texte d'une cellule avec pleins de texte dedans (comprendre le texte dépasse du cadre de la cellule, la cellule n'est pas formattée du tout).

Je cherche à copier ce texte dans plusieurs cellules fusionnée ensemble, en formattant le texte pour que celui-ci aille à la ligne, et que la hauteur de la cellule s'ajuste pour qu'on voit le texte dans sa totalité.

Pour le moment, ca veut pas, si je fusionne les cellules puis je copie le texte après, la hauteur de la ligne s'ajuste pas.
Inversement, si je copie d'abord le texte dans une cellule, ca s'ajuste bien la hauteur du texte à cette cellule, mais après quand je fusionne les cellules, ca s'ajuste plus et la hauteur est bien trop grande.

J'ai ici un fichier .xls sous la main pour un peu plus de clarification visuelle si jamais.

Merci d'avance pour l'aide.

a+

3 réponses


Il y a une astuce très simple pour ajuster la hauteur d'une ligne contenant des cellules fusionnées, en gardant l'alignement du texte à gauche :

Voici mon code, sachant que la plage de cellule s'étend de la colonne C à la colonne K.

'Ajuste automatiquement la hauteur de ligne
Function ligne_hauteur(ByVal lngRow As Long)
Dim strRange As String
Dim dblHeight As Double

Application.ScreenUpdating = False

'Range en cours de modification
strRange = "C" & lngRow & ":K" & lngRow

'On enlève la fusion et on centre sur plusieurs cellules
'pour récupérer la vraie hauteur de la ligne
With Range(strRange)
.MergeCells = False
.Locked = False
.HorizontalAlignment = xlCenterAcrossSelection
End With

'Hauteur réelle de la ligne
Rows(lngRow & ":" & lngRow).EntireRow.AutoFit
dblHeight = Rows(lngRow & ":" & lngRow).RowHeight

'On refusionne et on centre è gauche
With Range(strRange)
.MergeCells = True
.HorizontalAlignment = xlLeft
End With

'Ajustement de la hauteur réelle de la ligne
Rows(lngRow & ":" & lngRow).RowHeight = dblHeight

'Protection et refresh de l'écran
Application.ScreenUpdating = True
End Function

Et voilou !!! :)

Henri.
2
Merci beaucoup pour l'astuce !
0
Merci Henri_Montreal pour ce gain de temps.
il semble que ce principe reste le plus rapide de ce que j'ai trouvé pour l'instant.
avec du code simple et lisible
Olivier-D.O.C.
0
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 590
bonjour

Personnellement je déconseille d'utiliser la fusion surtout en VBA car la gestion est assez subtile.
Tu peux obtenir la même chose en "centrant sur plusieurs colonnes, avec moins de soucis.

Je te propose après ta copie de mettre ceci en ajustant bien sûr le range.
    With Range("C12:E12")
        .HorizontalAlignment = xlCenterAcrossSelection
        .WrapText = True
        .MergeCells = False
        .Rows.AutoFit
    End With
1
Messages postés
14
Date d'inscription
lundi 7 avril 2008
Statut
Membre
Dernière intervention
21 juillet 2009
1
Merci c'est presque parfait.

Seul problème c'est que le texte est centré sur les différentes cellules, mais ça serait mieux si il était aligné à gauche sur les différentes cellules.

Et apparement xlLeftAcrossSelection ca n'existe pas, et c'est bien dommage.
0
Messages postés
14
Date d'inscription
lundi 7 avril 2008
Statut
Membre
Dernière intervention
21 juillet 2009
1
Yo,

Ouais en fait c'était tout con, en prenant un break de toilette, je me suis dit "Tiens donc et si j'essayais ça pour voir"
Alors du coup j'ai rajouté ça après ton exemple

Range("C12:E12").Merge
Range("C12:E12").HorizontalAlignment = xlLeft

Et ca fait la job. Tout simplement.

Merci encore.
0
Messages postés
14934
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 590
bonjour

Je suis bien d'accord que ce n'est peut-être pas parfait mais avec la fusion cela ne fonctionne pas.

Il te faudrait calculer la hauteur de la ligne pour positionner : .RowHeight = ?

Là, il faut bien calculer sa formule en fonction de la taille des colonnes, de la police et corriger si une colonne change de largeur !
0
Messages postés
14
Date d'inscription
lundi 7 avril 2008
Statut
Membre
Dernière intervention
21 juillet 2009
1
Ouais ca m'as l'air un peu trop complexe pour un simple soucis esthétique.

en tout cas, merci bien pour l'astuce, ca me permet d'avancer un peu plus.

a+
0