VBA EXCEL Insertion et paramétrage d'une zone de texte

Comment insérer, positionner et paramétrer une zone de texte directement sur la feuille ?

Article lu   fois.

L'auteur

Profil ProSite personnel

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

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".

Barre de menus Dessin

4 constantes possibles :

msoTextOrientationHorizontal msoTextOrientationVertical msoTextOrientationUpward msoTextOrientationDownward
Image non disponible Image non disponible Image non disponible Image non disponible
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
Image non disponible



Ces premiers éléments vont permettre d'insérer la zone.

Code VBA
Sélectionnez

Sub zone_de_txt01()
Dim L As Single, T As Single, H As Single, W As Single

'Dimensions et position de la zone de texte
H = 50 '<-- hauteur
W = 200 '<-- largeur
L = 100 '<-- position horizontale
T = 100 '<-- position verticale'Insertion de la zone de texte
ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, L, T, W, H).Select
Selection.Name = "ztxt1" '<-- nom de la zone de texte

Range("A1").Activate '<-- permet de quitter la sélection de la zone de texte

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
Sélectionnez

Sub zone_de_txt02()
Dim L As Single, T As Single, H As Single, W As Single

'Dimensions et position de la zone de texte
H = Range("B3").Height * 4 '<-- hauteur
W = Range("E3").Left - Range("B3").Left '<-- largeur
L = Range("B3").Left '<-- position horizontale
T = Range("B3").Top '<-- position verticale'Insertion de la zone de texte
ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, L, T, W, H).Select
Selection.Name = "ztxt1" '<-- nom de la zone de texte

Range("A1").Activate '<-- permet de quitter la sélection de la zone de texte

End Sub
Image non disponible

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
Sélectionnez

Sub zone_de_txt03()
Dim L As Single, T As Single, H As Single, W As Single

'Dimensions et position de la zone de texte
H = 50 '<-- hauteur
W = 200 '<-- largeur
L = 100 '<-- position horizontale
T = 100 '<-- position verticale'Insertion de la zone de texte
ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, L, T, W, H).Select

'Insertion de la zone de texte
With Selection
    .Name = "ztxt1" '<-- nom de la zone de texte
    .Characters.Text = "ICI VIENDRA" & Chr(10) & "S'INSCRIRE VOTRE MESSAGE" '<-- &amp; Chr(10) &amp; = saut de ligne
    .HorizontalAlignment = xlCenter '<-- texte centré horizontalement
    .VerticalAlignment = xlCenter '<-- texte centré verticalement
End With

Range("A1").Activate '<-- permet de quitter la sélection de la zone de texte

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
Image non disponible
msoLineThinThin
Image non disponible
msoLineThinThick
Image non disponible
msoLineThickThin
Image non disponible
msoLineThickBetweenThin
Image non disponible
par défaut(2) = msoLineSingle
Style de ligne pointillée .ShapeRange.Line.DashStyle = msoLineSolid
Image non disponible
msoLineRoundDot
Image non disponible
msoLineSquareDot
Image non disponible
msoLineDash
Image non disponible
msoLineDashDot
Image non disponible
msoLineLongDash
Image non disponible
msoLineLongDashDot
Image non disponible
msoLineDashDotDot
Image non disponible
par défaut(2) = msoLineSolid
 


(1) Explication sur le codage RGB
(2) par défaut = paramètre non spécifié dans le code

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
Sélectionnez

Sub zone_de_txt04()
Dim L As Single, T As Single, H As Single, W As Single

'Dimensions et position de la zone de texte
H = 50 '<-- hauteur
W = 200 '<-- largeur
L = 25 '<-- position horizontale
T = 25 '<-- position verticale'Insertion de la zone de texte
ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, L, T, W, H).Select

'Paramètres de la zone de texte
With Selection
    .Name = "txt1" '<-- nom de la zone de texte
    .Characters.Text = "ICI VIENDRA" & Chr(10) & "S'INSCRIRE VOTRE MESSAGE" '<-- texte
    .HorizontalAlignment = xlCenter '<-- texte centré horizontalement
    .VerticalAlignment = xlCenter '<-- texte centré verticalement
    .ShapeRange.Fill.ForeColor.SchemeColor = 43 '<-- couleur de fond
    .ShapeRange.Line.Weight = 2.5 '<-- épaisseur du cadre
    .ShapeRange.Line.ForeColor.SchemeColor = 12 '<-- couleur du cadre
End With

'Mise en forme du texte
With Selection.Font
    .Name = "Arial" '<-- police
    .Size = 12 '<-- taille
    .Bold = True '<-- mise en gras
    .ColorIndex = 3 '<-- couleur
End With

'Mise en forme d'une partie du texte
With Selection.Characters(Start:=24, Length:=5).Font '<-- du 24ème au 29ème caractère
    .Underline = xlUnderlineStyleSingle '<-- soulignement
    .ColorIndex = 41 '<-- couleur
End With

Range("A1").Activate '<-- quitter la sélection de la zone de texte

End Sub
Image non disponible

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
Sélectionnez

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

'Comptage des zones de texte déjà insérées sur la feuille
For Each Obj In ActiveSheet.Shapes
    If Obj.Type = msoTextBox Then
        Nb = Nb + 1
    End If
Next Obj

'Attribution du nom de la nouvelle zone de texte
Nztxt = "zonetxt" & Nb + 1

'Dimensions des zones de texte
H = 30 '<-- hauteur
W = 150 '<-- largeur'Positions des zones de texte
If Nb = 0 Then
    'position si première zone de texte insérée
    L = 10 '<-- position horizontale
    T = 10 '<-- position verticale
Else
    'position si Xème zone de texte insérée
    L = 10 '<-- position horizontale
    T = ActiveSheet.Shapes("zonetxt" & Nb).Top + H + 5 '<-- position de la zone de texte précédent + sa hauteur + espacement de 5
End If

'Insertion de la zone de texte et paramétrages
ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, L, T, W, H).Select
With Selection
    .Name = Nztxt '<-- nom de la zone de texte
    .Characters.Text = "ZONE DE TEXTE " & Nb + 1 '<-- texte
    .HorizontalAlignment = xlCenter '<-- texte centré horizontalement
    .VerticalAlignment = xlCenter '<-- texte centré verticalement
    .ShapeRange.Fill.ForeColor.SchemeColor = 43 '<-- couleur de fond
    .Font.Size = 12 '<-- taille de la police de caractères
    .Font.Bold = True '<-- style gras
End With

Range("A1").Activate '<-- quitter la sélection de la zone de texte

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 :

  1. 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.
  2. 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
Sélectionnez

Sub zone_de_txt06()
Dim L As Single, T As Single, H As Single, W As Single

'Dimensions et position de la zone de texte
H = 50 '<-- hauteur
W = 200 '<-- largeur
L = (Application.UsableWidth / 2) - (W / 2) '<-- position horizontale au centre de l'écran
T = (Application.UsableHeight / 2) - (H / 2) '<-- position verticale au centre de l'écran'repositionnement de l'écran
Range("A1").Activate

'Insertion de la zone de texte et paramétrage du texte
ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, L, T, W, H).Select
With Selection
    .Name = "message" '<-- nom de la zone de texte
    .Characters.Text = "ICI VIENDRA" & Chr(10) & "S'INSCRIRE VOTRE MESSAGE" '<-- message
    .HorizontalAlignment = xlCenter '<-- texte centré horizontalement
    .VerticalAlignment = xlCenter '<-- texte centré verticalement
    .ShapeRange.Fill.ForeColor.SchemeColor = 0 '<-- couleur de fond
    .Font.ColorIndex = 43 '<-- couleur du texte
    .Font.Size = 12 '<-- taille de la police de caractères
    .Font.Bold = True '<-- style gras
End With

Range("A1").Activate '<-- quitter la sélection de la zone de texte'Ajout d'un timer pour effacement de la zone de texte
Application.Wait Now + TimeValue("00:00:03") '<-- effacement après 3 secondes
ActiveSheet.Shapes("message").Delete

End Sub

6. Remerciements

Merci à SaumonAgile pour la relecture.

7. Téléchargements

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

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.