VBA EXCEL
Insertion et paramétrage d'une zone de texte
Date de publication : 20/04/2008 , Date de mise à jour : 24/04/2008
Par
Fred (fring) (page principale)
Comment insérer, positionner et paramétrer une zone de texte directement sur la feuille ?
1. Généralités
2. Dimensionnement et positionnement
2.1. Exemple de dimensionnement et positionnement par rapport à une plage de cellules
3. Insertion du texte dans la zone
4. Les paramètres de mise en forme passés à la loupe
4.1. Concernant la zone de texte
4.2. Concernant le texte
4.3. Exemple pratique de mise en forme
5. Deux exemples d'utilisation
5.1. Insertion et alignement de plusieurs zones de texte
5.2. Utilisation d'une zone de texte pour diffuser un message
6. Remerciements
7. Téléchargements
1. Généralités
La zone de texte dont il est question dans cet article est celle prise au départ de la barre de menus "Dessin".
4 constantes possibles :
| msoTextOrientationHorizontal |
msoTextOrientationVertical |
msoTextOrientationUpward |
msoTextOrientationDownward |
 |
 |
 |
 |
| Texte horizontal |
Texte vertical |
Texte de bas en haut |
Texte de haut en bas |
2. Dimensionnement et positionnement
4 paramètres définissent les dimensions de la zone de texte et sa position sur la feuille :
- Hauteur = Height
- Largeur = Width
- Position horizontale = Left
- Position verticale = Top
Ces premiers éléments vont permettre d'insérer la zone.
| Code VBA |
Sub zone_de_txt01()
Dim L As Single, T As Single, H As Single, W As Single
H = 50
W = 200
L = 100
T = 100
ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, L, T, W, H).Select
Selection.Name = "ztxt1"
Range("A1").Activate
End Sub
|
2.1. Exemple de dimensionnement et positionnement par rapport à une plage de cellules
Dans l'exemple ci-dessous, nous allons dimensionner et positionner précisément la zone de texte par rapport à la plage de cellules B3:D6 .
| Code VBA |
Sub zone_de_txt02()
Dim L As Single, T As Single, H As Single, W As Single
H = Range("B3").Height * 4
W = Range("E3").Left - Range("B3").Left
L = Range("B3").Left
T = Range("B3").Top
ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, L, T, W, H).Select
Selection.Name = "ztxt1"
Range("A1").Activate
End Sub
|
3. Insertion du texte dans la zone
Comme le dit bien son nom, une zone de texte ne serait rien sans texte.
3 paramètres de base vont permettre d'insérer et de positionner le texte dans la zone :
- Le texte = .Characters.Text
- Position horizontale = .HorizontalAlignment
- Position verticale = .VerticalAlignment
| Code VBA |
Sub zone_de_txt03()
Dim L As Single, T As Single, H As Single, W As Single
H = 50
W = 200
L = 100
T = 100
ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, L, T, W, H).Select
With Selection
.Name = "ztxt1"
.Characters.Text = "ICI VIENDRA" & Chr(10) & "S'INSCRIRE VOTRE MESSAGE"
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
End With
Range("A1").Activate
End Sub
|
Les paramètres de position horizontale et verticale sont facultatifs, sans les préciser le texte se positionnera en haut et à gauche dans la zone.
Nous verrons au chapitre suivant tous les autres paramètres de mise en forme du texte.
4. Les paramètres de mise en forme passés à la loupe
4.1. Concernant la zone de texte
Ci-dessous, tous les paramètres possibles de mise en forme de la zone de texte.
Ces paramètres sont facultatifs, sans les préciser la zone de texte aura par défaut un fin cadre noir et un fond blanc opaque.
| Paramètres |
Syntaxes |
Valeurs |
| Position horizontale du texte |
.HorizontalAlignment = |
xlLeft (gauche) xlCenter (centré) xlRight (droite) par défaut(2) = xlLeft |
| Position verticale du texte |
.VerticalAlignment = |
xlTop (haut) xlCenter (centré) xlBottom (bas) par défaut(2) = xlTop |
Ajustement de la taille de la zone par rapport au texte |
.AutoSize = |
True (ajuster) False (ne pas ajuster) par défaut(2) = False |
| Fond |
.ShapeRange.Fill.Visible = |
msoTrue (fond opaque) msoFalse (aucun fond) par défaut(2) = msoTrue |
| Couleur de fond via un numéro d'index |
.ShapeRange.Fill.ForeColor.SchemeColor = |
de 1 à 80 par défaut(2) = 9 (blanc) |
| Couleur de fond via le codage RGB(1) |
.ShapeRange.Fill.ForeColor.RGB = |
RGB(Red, Green, Blue) les 3 composantes (Red, Green, Blue) acceptent une valeur de 0 à 255 par défaut(2) = RGB(255, 255, 255) |
| Transparence de la couleur de fond |
.ShapeRange.Fill.Transparency = |
0, 0.1, 0.2, ..., 1 0 = complètement opaque 1 = complètement transparent par défaut(2) = 0 |
| Cadre |
.ShapeRange.Line.Visible = |
msoTrue (cadre visible) msoFalse (pas de cadre) par défaut(2) = msoTrue |
| Epaisseur du cadre |
.ShapeRange.Line.Weight = |
de 0.25 à ... (par pas de 0.25) par défaut(2) = 0.75 |
| Couleur du cadre via un numéro d'index |
.ShapeRange.Line.ForeColor.SchemeColor = |
de 1 à 80 par défaut(2) = 64 (noir) |
| Couleur du cadre via le codage RGB(1) |
.ShapeRange.Line.ForeColor.RGB = |
RGB(Red, Green, Blue) les 3 composantes (Red, Green, Blue) acceptent une valeur de 0 à 255 par défaut(2) = RGB(0, 0, 0) |
| Style de ligne pleine |
.ShapeRange.Line.Style = |
msoLineSingle

msoLineThinThin

msoLineThinThick

msoLineThickThin

msoLineThickBetweenThin

par défaut(2) = msoLineSingle
|
| Style de ligne pointillée |
.ShapeRange.Line.DashStyle = |
msoLineSolid

msoLineRoundDot

msoLineSquareDot

msoLineDash

msoLineDashDot

msoLineLongDash

msoLineLongDashDot

msoLineDashDotDot

par défaut(2) = msoLineSolid
|
4.2. Concernant le texte
Ci-dessous, tous les paramètres de mise en forme du texte.
Au même titre que les paramètres de mise en forme de la zone de texte, ceux-ci sont facultatifs.
Sans les préciser dans le code, les paramètres par défaut seront ceux prédéfinis pour l'application (Excel).
| Paramètres |
Syntaxes |
Valeurs |
| Police |
.Font.Name = |
"Arial" "Comic Sans MS" "Times New Roman" etc... |
| Style gras |
.Font.Bold = |
True (gras) False (normal) |
| Style italique |
.Font.Italic = |
True (italique) False (normal) |
| Taille |
.Font.Size = |
de 1 à ... |
| Soulignement |
.Font.Underline = |
xlUnderlineStyleSingle (simple) xlUnderlineStyleDouble (double) xlUnderlineStyleNone (pas de soul.) |
| Couleur |
.Font.ColorIndex = |
de 1 à 56 |
| Barré |
.Font.Strikethrough = |
True (barré) False (normal) |
| Exposant |
.Font.Superscript = |
True (exposant) False (normal) |
| Indice |
.Font.Subscript = |
True (indice) False (normal) |
Mise en forme uniquement sur une partie du texte |
.Characters(Start:=1, Length:=1).Font |
Start:= position du premier caractère Length:= nombre de caractères les espaces et les retours à la ligne sont considérés comme un caractère |
4.3. Exemple pratique de mise en forme
| Code VBA |
Sub zone_de_txt04()
Dim L As Single, T As Single, H As Single, W As Single
H = 50
W = 200
L = 25
T = 25
ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, L, T, W, H).Select
With Selection
.Name = "txt1"
.Characters.Text = "ICI VIENDRA" & Chr(10) & "S'INSCRIRE VOTRE MESSAGE"
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.ShapeRange.Fill.ForeColor.SchemeColor = 43
.ShapeRange.Line.Weight = 2.5
.ShapeRange.Line.ForeColor.SchemeColor = 12
End With
With Selection.Font
.Name = "Arial"
.Size = 12
.Bold = True
.ColorIndex = 3
End With
With Selection.Characters(Start:=24, Length:=5).Font
.Underline = xlUnderlineStyleSingle
.ColorIndex = 41
End With
Range("A1").Activate
End Sub
|
5. Deux exemples d'utilisation
5.1. Insertion et alignement de plusieurs zones de texte
A chaque fois que le code ci-dessous sera exécuté, une zone de texte sera insérée sous la précédente,
avec un espace entre elles de 5p. et toutes seront parfaitement alignées verticalement.
| Code VBA exemple 1 |
Sub zone_de_txt05()
Dim L As Single, T As Single, H As Single, W As Single
Dim Obj As Shape, Nb As Byte, Nztxt As String
For Each Obj In ActiveSheet.Shapes
If Obj.Type = msoTextBox Then
Nb = Nb + 1
End If
Next Obj
Nztxt = "zonetxt" & Nb + 1
H = 30
W = 150
If Nb = 0 Then
L = 10
T = 10
Else
L = 10
T = ActiveSheet.Shapes("zonetxt" & Nb).Top + H + 5
End If
ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, L, T, W, H).Select
With Selection
.Name = Nztxt
.Characters.Text = "ZONE DE TEXTE " & Nb + 1
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.ShapeRange.Fill.ForeColor.SchemeColor = 43
.Font.Size = 12
.Font.Bold = True
End With
Range("A1").Activate
End Sub
|
5.2. Utilisation d'une zone de texte pour diffuser un message
Vous pouvez, par exemple, utiliser une zone de texte pour diffuser un message à l'utilisateur, lui signalant que la procédure est terminée.
Cette méthode comporte malgré tout deux petits inconvénients par rapport à l'usage d'une MsgBox :
- La position de la zone de texte est fixe.
Si l'utilisateur est positionné sur la ligne 1536 alors que votre zone de texte est positionnée dans la partie haute de la feuille, il n'apercevra pas votre message.
Il faut donc au préalable repositionner la feuille en activant la cellule A1.
- La zone de texte n'admettant pas de bouton, il faut ajouter un timer afin de l'effacer après un temps prédéfini.
| Code VBA exemple 2 |
Sub zone_de_txt06()
Dim L As Single, T As Single, H As Single, W As Single
H = 50
W = 200
L = (Application.UsableWidth / 2) - (W / 2)
T = (Application.UsableHeight / 2) - (H / 2)
Range("A1").Activate
ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, L, T, W, H).Select
With Selection
.Name = "message"
.Characters.Text = "ICI VIENDRA" & Chr(10) & "S'INSCRIRE VOTRE MESSAGE"
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.ShapeRange.Fill.ForeColor.SchemeColor = 0
.Font.ColorIndex = 43
.Font.Size = 12
.Font.Bold = True
End With
Range("A1").Activate
Application.Wait Now + TimeValue("00:00:03")
ActiveSheet.Shapes("message").Delete
End Sub
|
6. Remerciements
7. Téléchargements


Copyright © 2008 fring. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc
sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300.000 € de dommages et intérêts.
Cette page est déposée à la
SACD.