Developpez.com

Une très vaste base de connaissances en informatique avec
plus de 100 FAQ et 10 000 réponses à vos questions

FAQ ExcelConsultez toutes les FAQ

Nombre d'auteurs : 46, nombre de questions : 845, dernière mise à jour : 30 mars 2017 

 
OuvrirSommaireLes feuilles de calculLes formes automatiques

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.

Créé le 14 avril 2007  par SilkyRoad

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

Vba
Sélectionnez

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.

Vba
Sélectionnez

MsgBox ActiveSheet.Shapes(Application.Caller).TextFrame.Characters.Text
Créé le 14 avril 2007  par SilkyRoad

Cette macro récupère l'adresse des cellules placées sous la 1ere forme automatique de la Feuil1.

Vba
Sélectionnez

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
Créé le 14 avril 2007  par SilkyRoad
Vba
Sélectionnez

'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
Créé le 14 mai 2007  par SilkyRoad
Vba
Sélectionnez

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
Créé le 11 avril 2007  par SilkyRoad

3 exemples:

Vba
Sélectionnez

Dim Sh As Shape
 
For Each Sh In ActiveSheet.Shapes
    Sh.Delete
Next
Vba
Sélectionnez

Do Until ActiveSheet.Shapes.Count = 0
ActiveSheet.Shapes(1).Delete
Loop
Vba
Sélectionnez

ActiveSheet.Shapes.SelectAll
Selection.Delete
Créé le 20 août 2007  par SilkyRoad

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.

Nota:
Cette procédure ne fonctionne pas si deux formes portent le même nom.

Vba
Sélectionnez

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
Créé le 2 octobre 2007  par SilkyRoad

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 Excel2007:
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:

Vba
Sélectionnez

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
Créé le 19 février 2008  par SilkyRoad

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.

Vba
Sélectionnez

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

Créé le 26 mai 2008  par SilkyRoad

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.

Créé le 26 mai 2008  par SilkyRoad

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.

Vba
Sélectionnez

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.

Vba
Sélectionnez

Sub InformationsShape(VarDate As String, VarTime As String)
    MsgBox "Forme '" & Application.Caller & "' créée le : " & _
        vbCrLf & VarDate & " " & VarTime
End Sub
Créé le 22 mars 2009  par SilkyRoad
  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2009 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.