Bonjour,
je souhaite utiliser un controle msflexgrid avec un mode multiligne.
Je souhaite que lorsque un retour à la ligne est activée dans une cellule, la hauteur de la cellule s'adapte.
Comment faire ?
Merci de votre aide
Bonjour,
je souhaite utiliser un controle msflexgrid avec un mode multiligne.
Je souhaite que lorsque un retour à la ligne est activée dans une cellule, la hauteur de la cellule s'adapte.
Comment faire ?
Merci de votre aide
Salut
Je viens juste d'effectuer ce petit test.
En espérant que ça poura te servir.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 Option Explicit Dim HautLigne As Long Private Sub Command1_Click() MSFlexGrid1.RowHeight(1) = MSFlexGrid1.RowHeight(1) + HautLigne End Sub Private Sub Form_Load() HautLigne = MSFlexGrid1.RowHeight(1) End Sub
- Pour les nouveaux : Mode d'emploi et aide aux nouveaux
- et impérativement les règles du forum. Histoire de garder une ambiance amicale.
- Noubliez pas les balises de Code pour vos listings : bouton # de l'éditeur. Et n'oubliez pas non plus de bouton
- Cours Excel - FAQ Excel - Forum Excel - Cours VBA - Cours complet VBA Excel
Bonjour,
je te remercie pour ce bout de code mais le probleme n'est pas ici.
La question est de savoir combien de retours à la ligne ont été fait (la propriété wordwrap sur true). En effet, je sais comment modifier la hauteur de ligne mais je ne sais pas de combien je dois la modifier.
Merci pour votre aide
Salut,
Juste une idéé (pas testé)
1 - Compte le nombre de caractère dans ta ligne
2 - S'il dépasse une valeur augmente la hauteur de ta ligne
et comme ton Wordwrap est à true
Starec
Je te remercie de cette réponse.
Néanmoins, je l'ai déjà essayé et les résultats ne sont pas concluant car chaque caractère à sa propre largeur qui dépend de la police utilisée.
Ainsi, il faudrait une méthode plus systématique
Merci de m'aider
J'ai dû faire ça au boulot, voici donc ce que j'ai fait :
alors,
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 Private Function AjustRow(myGrid As MSHFlexGrid, _ Optional ByVal lFirstRow As Long = -1, _ Optional ByVal lLastRow As Long = -1, _ Optional bCheckFont As Boolean = False) Dim lCol As Long, lRow As Long, lCurCol As Long, lCurRow As Long Dim lCellHeight As Long, lRowHeight As Long Dim bFontBold As Boolean Dim dFontSize As Double Dim sFontName As String With myGrid If bCheckFont Then lCurCol = .Col lCurRow = .Row End If If lFirstRow = -1 Then lFirstRow = 1 If lLastRow = -1 Then lLastRow = .Rows - 1 For lRow = lFirstRow To lLastRow lRowHeight = 0 If bCheckFont Then .Row = lRow For lCol = 0 To .Cols - 1 If bCheckFont Then .Col = lCol UserControl.TxtTemp.FontBold = .CellFontBold UserControl.TxtTemp.FontName = .CellFontName UserControl.TxtTemp.FontSize = .CellFontSize End If UserControl.TxtTemp.Width = .ColWidth(lCol) UserControl.TxtTemp.Height = .RowHeight(lRow) UserControl.TxtTemp.Text = .TextMatrix(lRow, lCol) lCellHeight = (UserControl.TextHeight("Wg") * SendMessage(TxtTemp.hwnd, EM_GETLINECOUNT, 0, ByVal 0&)) If lCellHeight > lRowHeight Then lRowHeight = lCellHeight Next lCol .RowHeight(lRow) = lRowHeight + (UserControl.TextHeight("Wg") / 2) Next lRow If bCheckFont Then .Row = lCurRow .Col = lCurCol End If End With End Function
remplacer UserControl par le nom de la fenêtre (pour laquelle tu as configuré la même police que dans ton spread). Au fait j'utilise cette fonction dans un contrôle OCX programmé moi-même.
il te faut donc un FlexGrid et un contrôle Text > TxtTemp (tu mets la propriété visible à false)
+ des déclarations :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal _ hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _ lParam As Any) As Long Const EM_GETLINECOUNT = &HBA
PS: l'idée de base a été trouvée sur un site (je ne sais plus ou exactement sinon j'aurai volontier donné l'adresse)
Normalement tout y est
En complément de la solution proposée, je signale juste que dans la FAQ, il y a un petit article intéressant pour tous ceux qui voudraient se casser la tête sur des problèmes d'ajustement de taille de contrôles en fonction du texte et de la police :
http://vb.developpez.com/faq/?page=G...e#taille_texte
"Ce que l'on conçoit bien s'énonce clairement,
Et les mots pour le dire arrivent aisément." Nicolas Boileau
"Expliquer empêche de comprendre si cela dispense de chercher"
Quiz Oracle : venez tester vos connaissances !
La FAQ Oracle : 138 réponses à vos questions
Aidez-nous à la compléter
Bonjour et merci à tous pour vos réponses.
J'ai trouvé sur le forum de microsoft, une astuce interressante.
On utilise un label invisible avec les mêmes font que la grille et la meme largeur que la cellule.
Ce label a la propriété wordwrap et la prop autosize sur true.
Il suffit alors de copier dans ce label le texte de la cellule, puis de récupérer la hauteur du label pour l'appliquer à la cellule
Voila
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager