FAQ Excel
FAQ ExcelConsultez toutes les FAQ
Nombre d'auteurs : 46, nombre de questions : 845, dernière mise à jour : 30 mars 2022
- Comment afficher le contenu d'une cellule dans une forme automatique ?
- Comment récupérer le nom de la forme sur laquelle j'ai cliqué ?
- Comment récupérer l'emplacement de la forme automatique dans la feuille ?
- Comment ajouter une forme automatique dans la feuille ?
- Comment boucler sur les formes contenues dans une feuille et renvoyer leur nom et leur type ?
- Comment supprimer toutes les formes dans la feuille ?
- Comment regrouper les formes automatiques ?
- Comment insérer une image dans une forme automatique ?
- Est-il possible d'insérer une forme automatique dans un UserForm ?
- Comment insérer, positionner et paramétrer une zone de texte dans la feuille ?
- Comment utiliser des formes automatiques pour créer une barre de progression ?
- Où se trouve l'option "Sélectionner les objets" dans Excel 2007 ?
- Comment spécifier des arguments dans la propriété OnAction ?
Sélectionnez votre forme automatique.
Saisissez la référence de la cellule dans la barre de formules.
Par exemple =Cible
!A1
Désormais le contenu de la cellule A1, de le Feuille nommée "Cible", s'affiche dans la forme.
Si plusieurs formes sont placées dans votre feuille, attribuez leurs la même macro ci dessous :
(Clic droit dans chaque forme puis sélectionnez l'option "Affecter une macro".
Sub
Test
(
)
MsgBox
Application.Caller
End
Sub
Le nom de la forme s'affiche lorsque vous cliquez dessus.
La procédure suivante permet de récupérer le texte contenu dans la forme.
MsgBox
ActiveSheet.Shapes
(
Application.Caller
).TextFrame.Characters.Text
Cette macro récupère l'adresse des cellules placées sous la 1ere forme automatique de la Feuil1.
Sub
PositionFormeAutomatique
(
)
Dim
Shp As
Shape
'Spécifie la 1ere forme dans la Feuil1
Set
Shp =
Feuil1.Shapes
(
1
)
MsgBox
Shp.TopLeftCell.Address
&
":"
&
Shp.BottomRightCell.Address
End
Sub
'Ajoute une forme automatique (Rectangle) dans la feuille
'Position horizontale - Left = 40
'Position verticale - Top = 80
'Largeur - Width = 140
'Hauteur - Height = 50
With
Worksheets
(
"Feuil1"
).Shapes.AddShape
(
msoShapeRectangle, 40
, 80
, 140
, 50
)
.Name
=
"NomForme"
.TextFrame.Characters.Text
=
"Le texte dans la forme"
End
With
Dim
Obj As
Shape
'Compte le nombre de formes dans la feuille
MsgBox
"Nombre de formes dans la feuille: "
&
Worksheets
(
"Feuil1"
).Shapes.Count
'Boucle sur les formes contenues dans la feuille
For
Each
Obj In
Worksheets
(
"Feuil1"
).Shapes
Select
Case
Obj.Type
'--- MsoShapeType peut être une des constantes suivantes ---
'-----------------------------------------------------------
'Consultez aussi les constantes AutoShapeType pour identifier les différents
'types de formes automatiques msoAutoShape.
Case
msoAutoShape: MsgBox
"Forme automatique: "
&
Obj.Name
'Case msoCallout
Case
msoChart: MsgBox
"Graphique: "
&
Obj.Name
Case
msoComment: MsgBox
"Commentaire: "
&
Obj.Name
Case
msoDiagram: MsgBox
"Diagramme/Organigramme: "
&
Obj.Name
Case
msoEmbeddedOLEObject: MsgBox
"Objet incorporé: "
&
Obj.Name
'Nota :
'Chaque bouton des filtres automatiques est considéré
'comme un objet formulaire (zone de liste/DropDown).
Case
msoFormControl: MsgBox
"Objet formulaire: "
&
Obj.Name
Case
msoFreeform: MsgBox
"Forme libre: "
&
Obj.Name
Case
msoGroup: MsgBox
"Groupe: "
&
Obj.Name
Case
msoLine: MsgBox
"Ligne: "
&
Obj.Name
Case
msoLinkedOLEObject: MsgBox
"Objet incorporé lié au fichier: "
&
Obj.Name
Case
msoOLEControlObject: MsgBox
"Objet de la boîte à outils Contrôle: "
&
Obj.Name
Case
msoPicture: MsgBox
"Image: "
&
Obj.Name
'msoShapeTypeMixed permet de vérifier si une plage de formes contient
'des types d'objets différents :
'Par exemple: If Selection.ShapeRange.Type = msoShapeTypeMixed Then
'Case msoShapeTypeMixed: MsgBox "Combinaison de formes"
Case
msoTextBox: MsgBox
"Zone de texte: "
&
Obj.Name
Case
msoTextEffect: MsgBox
"WordArt: "
&
Obj.Name
End
Select
Next
Obj
3 exemples :
Dim
Sh As
Shape
For
Each
Sh In
ActiveSheet.Shapes
Sh.Delete
Next
Do
Until
ActiveSheet.Shapes.Count
=
0
ActiveSheet.Shapes
(
1
).Delete
Loop
ActiveSheet.Shapes.SelectAll
Selection.Delete
Cet exemple boucle sur les formes de la feuille active et enregistre dans un tableau leurs noms, s'ils commencent par la chaîne "Mvt".
Les éléments du tableau sont ensuite utilisés pour regrouper les formes.
Cette procédure ne fonctionne pas si deux formes portent le même nom.
Sub
GroupementShapes_Conditionnel
(
)
Dim
Sh As
Shape
Dim
Tableau
(
) As
String
Dim
i As
Integer
'Boucle sur les formes de la feuille active
For
Each
Sh In
ActiveSheet.Shapes
'Vérifie si le nom de la forme commence par "Mvt".
If
Left
(
Sh.Name
, 3
) =
"Mvt"
Then
i =
i +
1
'Redéfinit la taille du tableau et intègre le nom de la forme.
ReDim
Preserve
Tableau
(
1
To
i)
Tableau
(
i) =
Sh.Name
End
If
Next
'On sort si le tableau est vide.
If
i =
0
Then
Exit
Sub
'Regroupe les formes dont le nom se trouve dans le tableau
Set
Sh =
ActiveSheet.Shapes.Range
(
Tableau).Group
'Renomme le groupe.
Sh.Name
=
"NomGroupe"
End
Sub
Faites un clic droit sur la forme.
Choisissez l'option "Format de la forme automatique" dans le menu contextuel.
Sélectionnez l'onglet "Couleurs et traits".
Sélectionnez "Motif et texture" dans le champ "Couleur".
Cliquez sur l'onglet "Image",
puis utilisez le bouton "Sélectionner une image".
Validez en cliquant sur le bouton OK dans les différentes fenêtres.
Dans Excel 2007 :
Faites un clic droit sur la forme.
Choisissez l'option "Format de la forme" dans le menu contextuel.
Cliquez sur le menu "Remplissage".
Sélectionnez l'option "Remplissage avec image ou texture".
Cliquez sur le bouton "Fichier" ou clipArt".
Recherchez sur votre disque dur l'image à insérer.
Cliquez sur le bouton "Fermer".
Pour réaliser cette action par macro :
Sub
InsertionImage_DansShape
(
)
Dim
strImage As
String
Dim
Sh As
Shape
'Représente la premiere forme de la Feuil1
Set
Sh =
Feuil1.Shapes
(
1
)
strImage =
"C:\Documents and Settings\mimi\dossier\fourmiz.JPG"
Sh.Fill.UserPicture
strImage
End
Sub
Cette procédure colle la 1ère forme (qui peut également être un WordArt) de la Feuil1 dans un graphique. Le graphique est ensuite enregistré au format gif, puis affiché dans un contrôle Image du UserForm.
Option
Explicit
Private
Const
Fichier As
String
=
"C:\ImageTemp.gif"
Private
Sub
CommandButton1_Click
(
)
Dim
nb As
Byte
Dim
Sh As
Shape
'Supprime l'image temportaire si elle existe
If
Dir
(
Fichier) <>
""
Then
Kill Fichier
'Définit le 1er shape de la feuille comme image
' à afficher dans l'UserForm
Set
Sh =
Worksheets
(
"Feuil1"
).Shapes
(
1
)
'copie le shape dans la feuille
Sh.CopyPicture
'crée un graphique
With
ActiveSheet.ChartObjects.Add
(
0
, 0
, _
Sh.Width
, Sh.Height
).Chart
.Paste
'colle l'image dans graphique
' enregistre le graphique au format gif
.Export
Fichier, "GIF"
End
With
nb =
ActiveSheet.ChartObjects.Count
'supprime le graphique
ActiveSheet.ChartObjects
(
nb).Delete
'Affiche l'image dans le graphique
Image1.Picture
=
LoadPicture
(
Fichier)
End
Sub
Private
Sub
UserForm_Terminate
(
)
'Supprime l'image temportaire si elle existe
If
Dir
(
Fichier) <>
""
Then
Kill Fichier
End
Sub
Vous pouvez aussi utiliser la méthode PastePicture de Stephen Bullen
Ce bouton, dont l'icône est représentée par une flèche blanche, active le curseur de sélection.
Sélectionnez l'onglet "Accueil".
Groupe "Edition"
Cliquez sur le bouton "Rechercher et sélectionner".
L'option "Sélectionner les objets" est l'avant dernier élément de la liste.
Vous devez indiquer les paramètres sous la forme :
.OnAction
NomMacro "Argument1"
,"Argument2"
'
L'exemple ci-dessous crée une forme automatique à l'emplacement de la cellule active.
La date et l'heure de création de l'objet sont ajoutées en argument, à la macro InformationsShape.
Sub
CreationShape
(
)
With
Worksheets
(
"Feuil1"
).Shapes.AddShape
(
msoShapeRectangle, _
ActiveCell.Left
, _
ActiveCell.Top
, _
ActiveCell.Width
, _
ActiveCell.Height
)
.OnAction
=
"'InformationsShape "
&
Chr
(
34
) &
Date
&
Chr
(
34
) &
_
","
&
Chr
(
34
) &
Time
&
Chr
(
34
) &
"'"
End
With
End
Sub
Placez la macro InformationsShape dans un module standard du classeur.
Elle sera déclenchée lorsque vous cliquerez sur une des formes créées par la procédure précédente.
Sub
InformationsShape
(
VarDate As
String
, VarTime As
String
)
MsgBox
"Forme '"
&
Application.Caller
&
"' créée le : "
&
_
vbCrLf
&
VarDate &
" "
&
VarTime
End
Sub