FAQ Excel

FAQ ExcelConsultez toutes les FAQ
Nombre d'auteurs : 46, nombre de questions : 845, dernière mise à jour : 30 mars 2022
Sommaire→Les feuilles de calcul→Les formes automatiques- 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 SubLe 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.TextCette 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 WithDim 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 Obj3 exemples :
Dim Sh As Shape
For Each Sh In ActiveSheet.Shapes
Sh.Delete
NextDo Until ActiveSheet.Shapes.Count = 0
ActiveSheet.Shapes(1).Delete
LoopActiveSheet.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 SubCette 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 SubVous 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 SubPlacez 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


