Pour pouvoir utiliser un MSFlexGrid comme une grille dans laquelle on saisie des données, il importe de pouvoir modifier la hauteur des lignes au fur et à mesure de la frappe surtout lorsqu'on souhaite taper plusieurs paragraphes dans une seule ligne ou lorsque la ligne dépasse la largeur de la colonne.
La propriété WordWrap de la grille doit être mise à True, ce qui permet le renvoie automatiquement à la ligne des mots dépassant la largeur de la colonne. Mais si l'on s'en tient à cela, la hauteur de la ligne n'est pas modifié et ces mots peuvent donc être masqués.
Source / Exemple :
Private Sub AjusterLigne()
Dim LeTexte As String
Dim LaPhrase As String
Dim Ligne As Integer
Dim Colonne As Integer
Dim LargeurColonne As Integer
Dim HauteurLigne As Integer
Dim NouvelleHauteur As Integer
Dim z() As String
Dim nbreLignes As Integer
Dim i As Integer
Dim h As Long
LeTexte = Me.MSFlexGrid1.Text 'Le texte de la cellule
Ligne = Me.MSFlexGrid1.Row 'La ligne en cours
Colonne = Me.MSFlexGrid1.Col 'La colonne en cours
LargeurColonne = Me.MSFlexGrid1.ColWidth(Colonne) 'La largeur de la colonne en cours
HauteurLigne = Me.MSFlexGrid1.RowHeight(Ligne) 'La hauteur de la ligne en cours
'Si la cellule est vidé de son contenu
If LeTexte = "" Then Me.MSFlexGrid1.RowHeight(Ligne) = Me.TextHeight("X") + 40: Exit Sub
z = Split(LeTexte, Chr(10)) 'Découpe la chaine de la cellule en morceaux
nbreLignes = UBound(z)
If nbreLignes = 0 Then 'S'il n'y a pas de retour chariot...
nbreLignes = 1 '...il n'y a qu'une ligne (vide ou non)
Else
nbreLignes = nbreLignes + 1 'Sachant que UBound donne l'index maximum et démarre à 0,
End If
'La hauteur de la ligne est donc de...
NouvelleHauteur = (Me.TextHeight("X") * nbreLignes)
'Passe en revue chacune des lignes afin de savoir si elles sont plus longues que la colonne
For i = LBound(z) To UBound(z)
'Si tel est le cas, augmente la hauteur de la ligne...
If Me.TextWidth(z(i)) > LargeurColonne Then
h = Me.TextWidth(z(i)) / LargeurColonne
NouvelleHauteur = NouvelleHauteur + Me.TextHeight(String(h - 1, Chr(10)))
End If
Next
'Dimensionne finalement la ligne
If NouvelleHauteur > HauteurLigne Then Me.MSFlexGrid1.RowHeight(Ligne) = NouvelleHauteur + 40
End Sub
Conclusion :
PS: j'ai utilisé la proposition de Davyboy (source n°7314) pour effectuer la saisie dans le MSFlexGrid...
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.