Comment créer, placer et dimensionner un objet sur une feuille Excel

Résolu
SERIEUXETCOOL Messages postés 336 Date d'inscription dimanche 3 avril 2011 Statut Membre Dernière intervention 12 juin 2012 - 11 mars 2012 à 18:03
SERIEUXETCOOL Messages postés 336 Date d'inscription dimanche 3 avril 2011 Statut Membre Dernière intervention 12 juin 2012 - 23 mars 2012 à 10:07
Bonjour le Forum, bonjour à tous ceux qui passeront par ce post.

J'ai une petite question à laquelle je ne parviens pas à répondre.

Je cherche désespérément à partir d'un code vba, à créer un objet image (Contrôle image), de le placer sur la feuille, de le dimensionner correctement puis de gérer ensuite certaines de ses propriétés qui m’intéressent.

Pour le moment j'utilise le code suivant qui ne fonctionne pas parfaitement :

ActiveSheet.OLEObjects.Add(ClassType:="Forms.Image.1", Link:=False, _
DisplayAsIcon:=False, Left:=[N16].Left, Top:=[N16].Top, Width:=210, Height:=100).Select

ActiveSheet.Image1.Left = Range("B2").Left
ActiveSheet.Image1.Top = Range("B2").Top
ActiveSheet.Image1.Widht = Range("B2:F10").Widht
ActiveSheet.Image1.Height = Range("B2:F10").Height
ActiveSheet.Image1.Picture = LoadPicture("C:\Documents and Settings\BlaBla.bmp")


Cela me créé bien un contrôle image sur ma feuille mais je ne parviens pas le manipuler ensuite. "Image1" n'est en gros pas reconnu. Pourquoi ???


Par contre j'ai remarqué que si je place un contrôle image sur la feuille mauellement (sans code) et bien ensuite par code je suis capable de le manipuler.

Hors moi je souhaiterais créer par code le contrôle image, le placer, le dimensionner ensuite.


Ou se trouve mon erreur ? J'ai l'impression que c'est la manière de créer mon objet qui n'est pas bonne.



Merci à ceux qui m'éclaireront.


Bien cordialement,

André

48 réponses

SERIEUXETCOOL Messages postés 336 Date d'inscription dimanche 3 avril 2011 Statut Membre Dernière intervention 12 juin 2012 1
12 mars 2012 à 12:59
Bonjour à tous,

Et bien Ucfoutu, je dois dire que cette fois-ci je pense avoir compris le truc. Je sais ENFIN agir sur l'ensemble des propriétés des objets. Il m'a fallu un paquet de tests ce matin avant de comprendre, mais j'y suis quand même parvenu. Pas facile dis donc !!!

D'ailleurs je ne comprends pas pourquoi il est si dur de trouver ce genre d'infos sur le net. Je n'ai pas réussi à mettre la main sur le moindre exemple similaire à mon cas. C'est dingue je trouve ! C'est peut être évident pour tout le monde peut être...

Bref après avoir réfléchi sur l'exemple que tu m'a donné, j'ai mis en évidence de manière correcte une certaine logique.

Voici ci-dessous un code qui permet de faire pas mal de choses avec des objets. Je pense qu'il sera utile à plus d'une personne. Simple et clair^^

Option Explicit

'Placer un bouton de commande (Catégorie contrôle ActiveX) dans une feuille Excel. Puis placer ce code _
 dans la feuille qui contient le bouton de commande

Private Sub CommandButton1_Click()
    
    Dim toto As OLEObject 'Déclaration des variables
    
    '=================================================================
    'Création, insertion, placement et dimensionnement d'un object sur la feuille (Contrôle image dans cet exemple)
    'Set toto ActiveSheet.OLEObjects.Add(ClassType:="Forms.Image.1", Link:=False, _
        DisplayAsIcon:=False, Left:=210, Top:=124.5, Width:=123, Height:=49.5)


        '=============================================================
        'On contrôle ensuite ici l'ensemble des propriétés de l'objet sur lequelles ont souhaite agir
        'ActiveSheet.OLEObjects("Image1").Name "nom"
        ActiveSheet.OLEObjects("nom").Left = Range("F5").Left
        ActiveSheet.OLEObjects("nom").Top = Range("F5").Top
        ActiveSheet.OLEObjects("nom").Width = Range("F5:H10").Width
        ActiveSheet.OLEObjects("nom").Height = Range("F5:H10").Height
        ActiveSheet.OLEObjects("nom").Object.Picture = LoadPicture("C:\Documents and Settings\MAGIC DD\Bureau\TEST HUE\UE 180 A.bmp")
        ActiveSheet.OLEObjects("nom").Object.PictureAlignment = 0
        ActiveSheet.OLEObjects("nom").Object.PictureSizeMode = 3
        ActiveSheet.OLEObjects("nom").Object.BackStyle = 0
        ActiveSheet.OLEObjects("nom").Object.SpecialEffect = 6
        
        
        '=============================================================
        'On contrôle les mêmes propriétés que ci-dessus mais avec une syntaxe légèrement différente
        ''        toto.Name "nom"
'        toto.Left = Range("F5").Left
'        toto.Top = Range("F5").Top
'        toto.Width = Range("F5:H10").Width
'        toto.Height = Range("F5:H10").Height
'        toto.Object.Picture = LoadPicture("C:\Documents and Settings\MAGIC DD\Bureau\TEST HUE\UE 180 A.bmp")
'        toto.Object.PictureAlignment = 0
'        toto.Object.PictureSizeMode = 3
'        toto.Object.BackStyle = 0
'        toto.Object.SpecialEffect = 6

End Sub



Ucfoutu il y a quand même une chose que je ne comprends pas malgré le fait d'avoir trouvé le truc. Pourquoi doit-on dissocier "toto.Top 10" de "toto.Object.Backstyle 0"

Que viens faire ce ".Object" dans certains cas ???

En tout cas merci pour ce bel exemple. Là, je suis au clair pour les objets. Pas très intuitif pour le coup !

Donc merci à toi de nouveau

Cordialement,

André

PS : MarcPl j'utilise Excel 2007. Dans tous les cas, sauf erreur de ma part, je pense que cette fois-ci c'est acquis pour gérer les objets. Le post est résolu. Merci de ton aide et surtout n'hésites pas à poster ta solution je me ferai un plaisir de l'analyser elle aussi.
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
11 mars 2012 à 18:42
Bonjour,

Tu viens d'assassiner chaque est-ce péare dans ses grandes largeurs

(traduis ce que j'ai souligné, en anglais puis compare avec ce que tu as écrit ).

De toutes manières :
on ne peut attribuer de cette manière une image à un tel objet !

Voilà ce qui marche (exemple) :
ActiveSheet.OLEObjects.Add Filename:="D:\bateau.bmp", Left:=Range("B2").Left, Top:=Range("B2").Top, _
  Width:=Range("B2:F10").Width, Height:=Range("B2:F10").Height


Je te déconseille toutefois l'utilisation de tels objets. Préfère-leur de loin cette des contrôles activex.
Quelle est la raison exacte de ton choix ?


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
SERIEUXETCOOL Messages postés 336 Date d'inscription dimanche 3 avril 2011 Statut Membre Dernière intervention 12 juin 2012 1
11 mars 2012 à 20:04
Re bonsoir tout le monde,

Oui en effet j'ai fait une énorme faute de frappe tout à l'heure. J'ai écris ça un peu vite. Mais de toute les manières j'avais fait le test avec la bonne écriture à la base^^

C'est juste une étourderie de ma part. Dans tous les cas ça ne marchait pas plus avec la bonne écriture.

De toutes manières :
on ne peut attribuer de cette manière une image à un tel objet !



C'est ce que je disais, mes tests sont restés infructueux avec la bonne écriture.


ActiveSheet.OLEObjects.Add Filename:="D:\bateau.bmp", Left:=Range("B2").Left, Top:=Range("B2").Top, _
  Width:=Range("B2:F10").Width, Height:=Range("B2:F10").Height



Ça aussi j'ai testé par le passé et ça n'avait pas fonctionné non plus. C'est justement pour cette raison que j'ai décidé de créer ce post. J'ai testé pas mal de solutions, et aucune n'a fonctionné. Sauf le .Left et le .Top. Les deux autres propriétés impossibles de les manipuler.


Préfère-leur de loin cette des contrôles activex.


Quel code utiliser pour remplacer mon contrôle image ? Il me semblait pourtant bien utiliser un contrôle activex la

J'ai le choix entre contrôle formulaire et contrôle activex. J'enregistre la macro en sélectionnant le contrôle activex pourtant. Bizarre.


A tout hasard comment insère ton un contrôle image avec les contrôles activex ?

André
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
12 mars 2012 à 07:21
Quel est finalement le but exact :
- si placer sur ta feuille, à l'endroit de ton choix, une image et lui attribuer un fichier image ===>> facile
- si par contre tu dois ensuite modifier (ultérieurement, donc) les propriété de cette images, c'est beaucoup plus complexe.

Dans quel cas te trouves-tu exactement ?

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
12 mars 2012 à 08:19
En fait, je ne parviens pas à deviner parfaitement ce que tu veux .

Je te livre donc, à tout hasard, ce petit test à faire (il devrait, à lui seul, t'ouvrir des horizons) :

Sur ta feuille : un bouton de commande Commanbutton1 et un bouton de commande Commandbutton2

ce code :
Private Sub CommandButton1_Click()
    Dim toto As OLEObject
    Set toto = ActiveSheet.OLEObjects.Add(ClassType:="Forms.Image.1", Link:=False, _
        DisplayAsIcon:=False, Left:=210, Top:=124.5, Width:=123, Height:=49.5 _
        )
        toto.Name = "nom" '<<=================je lui attribue là un nom qui va me servir ensuite
        toto.Object.Picture = LoadPicture("D:\bateau.bmp") "<<<====== je lui attribue une image
End Sub

Private Sub CommandButton2_Click()
  ' je vais maintenant pointer vers l'objet (via le nom que je lui ai attribué)
  ' et je vais en modifier la propriété Picture
  ActiveSheet.OLEObjects("nom").Object.Picture = LoadPicture("D:\imagedegradee.bmp") '<<=== autre image
End Sub


Lance ===>> clique sur Commandbutton1 (une image est attribuée) ===>> clique sur CommandButton3 ===>> une autre image remplace la 1ère.

Je pense que tu as là de quoi faire toute sauce imaginable.



____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
12 mars 2012 à 08:21
Attention : j'ai oublié de commenter "<<<====== je lui attribue une image (mets-lui un ' devant)


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
12 mars 2012 à 08:34
Une précision :
pour d'autres propriétés (top, par exemple), ne pas utiliser .object ===>> exemple :
ActiveSheet.OLEObjects("nom").Top = 200



____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
MarcPL Messages postés 172 Date d'inscription jeudi 8 décembre 2011 Statut Membre Dernière intervention 21 juillet 2013 2
12 mars 2012 à 12:06
Bonjour SERIEUXETCOOL.

J'utilise une autre méthode - me semblant plus appropriée -
mais j'ai besoin de savoir de quelle version d'Excel tu disposes ...
(je ne garantis plus rien au dessus de la version 2003)
 
___________________________________________________________________________________________________________________
Comme la vitesse de la lumière est supérieure à celle du son, certains ont l'air brillant avant d'avoir l'air con !
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
12 mars 2012 à 13:09
Tu dois simplement comprendre ceci :
ton objet contrôle a des propriétés directes (c'est notamment le cas de ses propriétés de positionnement.
cet objet contrôle renferme par ailleurs en son sein un autre objet (c'est celà, Object) qui, lui, a ses propres propriétés. (c'est notamment le cas de la propriété Picture de l'objet Object compris dans l'objet contrôle créé).
Pas intuitif ? c'est vrai ... mais en même temps ===>> assez logique.

Analogie : une armoire et ses tiroirs
Tu peux décider d'un emplacement pour l'armoire (armoire.top) ....>> les tiroirs suivront
Mais si tu veux peindre en vert un tiroir ===>> armoire.tiroir machin.couleur = vert

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
MarcPL Messages postés 172 Date d'inscription jeudi 8 décembre 2011 Statut Membre Dernière intervention 21 juillet 2013 2
12 mars 2012 à 13:14
En fait, j'évite d'utiliser les .OLEObjects,
je préfère utiliser directement les collections .shapes & .picture ...

___________________________________________________________________________________________________________________
Comme la vitesse de la lumière est supérieure à celle du son, certains ont l'air brillant avant d'avoir l'air con !
0
SERIEUXETCOOL Messages postés 336 Date d'inscription dimanche 3 avril 2011 Statut Membre Dernière intervention 12 juin 2012 1
12 mars 2012 à 13:25
-Merci Ucfoutu pour la comparaison. En effet, maintenant que je relis les propriétés, c'est vrai que c'est exactement ce dont tu viens de définir.

C'est carrément plus clair...Et logique maintenant


-MarcPL, veux tu bien poster ta solution qui n'utilise pas les ".OLEObjects" ? Si j'utilise ça pour le moment, c'est juste parce que l'enregistreur de macro me l'a indiqué^^

Je suis curieux de voir les autres manières de parvenir au même résultat. Je verrai si ça fonctionne sur Excel 2007.

En tout cas ça m’intéresse !

Merci


Ps : J'en profite au passage pour une petite question : J'utilise un formulaire tout simple dans mon code. Avant de terminer le programme, j'ordonne de rendre ce formulaire visible avec le code "UserForm1.Show 'Afficher l'UserForm1". Ça fonctionne très bien...sauf si j'utilise le contrôle image justement. Le code se déroule parfaitement, et juste à la fin je vois le formulaire s'afficher une fraction de secondes puis disparait. Une idée ? Si je n'affiche pas le contrôle image, alors l'userform s'affiche bien à la fin. Serais-ce une des propriétés du contrôle image qui fait ça ?
0
SERIEUXETCOOL Messages postés 336 Date d'inscription dimanche 3 avril 2011 Statut Membre Dernière intervention 12 juin 2012 1
12 mars 2012 à 13:40
A titre d'exemple je place ci-après un code qui permet de faire la même chose de deux manières différentes.

J'utilise la méthode 2 qui me parait plus simple. J'ai du trouver un exemple sur le net à l'époque. Mais vu que je n'ai trouvé aucun exemple sur les contrôles images, voila pourquoi j'utilise les ".OLEObjects".

Donc MarcPL, ton code me sera également utile pour mieux juger des performances et utilités des différentes méthodes.


Merci


Le code :

Option Explicit

Sub Macro1()

'============================================================================================
'Méthode 1 : Création, insertion, placement et dimensionnement d'un object sur la feuille (Bouton de commande dans cet exemple)
'============================================================================================
ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", Link:=False _
, DisplayAsIcon:=False, Left:=117.857142857143, Top:=61.0714285714286, _
Width:=288.214285714286, Height:=132.321428571429).Select


'============================================================================================
'Méthode 2 : Création, insertion, placement et dimensionnement d'un object sur la feuille (Bouton de commande dans cet exemple)
'============================================================================================
ActiveSheet.Buttons.Add(380, 600, 250, 50).Select


End Sub
0
MarcPL Messages postés 172 Date d'inscription jeudi 8 décembre 2011 Statut Membre Dernière intervention 21 juillet 2013 2
12 mars 2012 à 13:51
Extrait de code d'un jeu de Memory :
Sub AjoutPhoto(Rg As Range, Fichier, Nom, Num)
    With Feuil1.Pictures.Insert(Fichier)
                              .Name = Nom
        .ShapeRange.AlternativeText = Num
        .ShapeRange.LockAspectRatio = False
                            .Height = Rg.Height
                             .Width = Rg.Width
                              .Left = Rg.Left
                               .Top = Rg.Top
          If Num 0 Then .OnAction "Memory.PhotoSelect"
    End With
End Sub

Autre exemple, procédure d'une barre personnalisée insérant une image
en la dimensionnant par rapport à la sélection en cours :
Sub CollerImage()
    If Workbooks.Count Then
        On Error Resume Next
        L = PressePapiers.Lecture

        If ActiveWorkbook.ActiveSheet.ProtectContents Or L = "" Or ShapeIn > "" Then
            Beep

        Else
            Set Wb = ActiveWorkbook
            Set Sh = Wb.ActiveSheet.Shapes(Wb.ActiveSheet.Pictures.Insert(L).Name)
'                                   pour les IncrementLeft & Top

            If IsEmpty(Sh) Then
                Beep

            Else
                If Sh.Width > Selection.Width - 4 Then Sh.Width = Selection.Width - 4

                If Sh.Height > Selection.Height - 4 Then Sh.Height = Selection.Height - 4

                Wb.NewPicture = True
                Sh.IncrementLeft (Selection.Width - Sh.Width) / 2
                Sh.IncrementTop (Selection.Height - Sh.Height) / 2
                Sh.Placement = xlMoveAndSize
                 Sh.OnAction = "'" & Wb.Name & "'!" & Wb.CodeName & ".ShapeScale"
            End If
        End If
    End If
End Sub

___________________________________________________________________________________________________________________
Comme la vitesse de la lumière est supérieure à celle du son, certains ont l'air brillant avant d'avoir l'air con !
0
SERIEUXETCOOL Messages postés 336 Date d'inscription dimanche 3 avril 2011 Statut Membre Dernière intervention 12 juin 2012 1
12 mars 2012 à 14:15
Merci MarcPL pour ton code.

Je viens de le tester. Je ne suis pas sur de pouvoir m'en sortir avec cette version. Je pense que je vais rester sur les ".OLEObjects" qui me permettent de réaliser plus facilement ce que je veux.

En fait quand je fait propriétés sur "Feuil1.Pictures.Insert(Fichier)" je ne retrouve plus du tout les mêmes propriétés que le contrôle image que j'utilise.

Est-ce bien un contrôle image que tu insère avec ton code ??? (Image contrôle ActiveX)

Bizarre.

Merci en tout cas.
0
MarcPL Messages postés 172 Date d'inscription jeudi 8 décembre 2011 Statut Membre Dernière intervention 21 juillet 2013 2
12 mars 2012 à 14:25
Comme je l'ai dit, j'évite d'utiliser les .OLEObjects, donc les contrôles image ...

Jusqu'en version 2003, les propriétés d'un contrôle image se retrouvent dans un objet .Shapes,
ce dernier étant plus riche en propriétés.

___________________________________________________________________________________________________________________
Comme la vitesse de la lumière est supérieure à celle du son, certains ont l'air brillant avant d'avoir l'air con !
0
SERIEUXETCOOL Messages postés 336 Date d'inscription dimanche 3 avril 2011 Statut Membre Dernière intervention 12 juin 2012 1
12 mars 2012 à 14:41
C'est bon à savoir. Merci en tout cas MarcPL.

Sinon as tu une idée de pourquoi mon Formulaire qui doit en théorie s’afficher à la toute fin de la procédure avec le code "UserForm1.Show 'Afficher l'UserForm1", s'affiche une fraction de secondes avant de disparaitre lorsque que le code pour insérer un contrôle image est actif ?

Si je masque le code pour le contrôle image, mon formulaire s'affiche bien.

Bizarre je trouve. Je ne parviens pas à en trouver la raison. La cause étant l'insertion d'un contrôle image sur la feuille.

André
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
12 mars 2012 à 15:57
La raison de l'apparition/disparition de ton userform est à chercher ailleurs que dans l'ajout de ton image.
Un Select, un Activate, peut-être ? ou un code à l'ouverture de ton Userform ?
En tout état de cause, l'ajout de ton image, en soi, n'a rien à y voir.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
SERIEUXETCOOL Messages postés 336 Date d'inscription dimanche 3 avril 2011 Statut Membre Dernière intervention 12 juin 2012 1
12 mars 2012 à 16:46
Nan je ne vois pas ou ce peut être.

J'ai réduit mon code à son minimum pour mettre en évidence le problème. Place un formulaire contenant un "CommandButton1" à l'intérieur puis lance le code. Tu verras que le formulaire disparait lorsque l'on active la création du contrôle image.
En revanche si on désactive le code du contrôle image, alors le formulaire reste bien actif.

Sur quels éléments puis-je agir pour réparer la chose ?

Le code du formulaire :

Option Explicit

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    If CloseMode 0 Then Cancel  1
End Sub

Private Sub CommandButton1_DblClick(ByVal Cancel As MSForms.ReturnBoolean) 'Quand on double-clic pour lancer

Run "TRAITEMENT_IMAGE" 'Ordonne de lire la Macro principale

End Sub



Le code du module :

Option Explicit

Sub TRAITEMENT_IMAGE()

Application.ScreenUpdating    = False 'Rétablit l'affichage
Application.DisplayAlerts = False 'Rétablit les alertes

UserForm1.Show 'Cache l'UserForm1

'Call CONSTRUCTION_FEUILLE

UserForm1.Show 'Afficher l'UserForm1
UserForm1.Left = 0 'Fixe la position de l'UserForm1
UserForm1.Top = 0

Application.ScreenUpdating = True 'Rétablit l'affichage
Application.DisplayAlerts = True 'Rétablit les alertes

End Sub

Private Sub CONSTRUCTION_FEUILLE()

Dim Contrôle_Image1 As OLEObject 'Déclaration des variables
Dim Fichier_Image As String

For Each Contrôle_Image1 In ActiveSheet.OLEObjects
Contrôle_Image1.Delete
Next

Fichier_Image = "C:\Documents and Settings\MAGIC DD\Bureau\TEST HUE\UE 180 A.bmp"

'=================================================================
'Création, insertion, placement et dimensionnement d'un object sur la feuille (Contrôle image dans cet exemple)
'Set Contrôle_Image1 ActiveSheet.OLEObjects.Add(ClassType:="Forms.Image.1", Link:=False, _
DisplayAsIcon:=False, Left:=210, Top:=124.5, Width:=123, Height:=49.5)

'=============================================================
'On contrôle ensuite ici l'ensemble des propriétés de l'objet sur lequelles ont souhaite agir
'Contrôle_Image1.Name "Image1"
Contrôle_Image1.Left = Range("N16").Left
Contrôle_Image1.Top = Range("N16").Top
Contrôle_Image1.Width = Range("N16:P21").Width
Contrôle_Image1.Height = Range("N16:P21").Height
Contrôle_Image1.Object.Picture = LoadPicture(Fichier_Image)
Contrôle_Image1.Object.PictureAlignment = 2
Contrôle_Image1.Object.PictureSizeMode = 3
Contrôle_Image1.Object.BackStyle = 0
Contrôle_Image1.Object.SpecialEffect = 6

End Sub



André
0
SERIEUXETCOOL Messages postés 336 Date d'inscription dimanche 3 avril 2011 Statut Membre Dernière intervention 12 juin 2012 1
12 mars 2012 à 16:49
Note : Ne pas tenir de certains de mes commentaires. A force de faire des tests pour trouver l'erreur les commentaires ne sont plus juste. Les lignes de code oui, les commentaires pas tous.

Dsl
0
SERIEUXETCOOL Messages postés 336 Date d'inscription dimanche 3 avril 2011 Statut Membre Dernière intervention 12 juin 2012 1
12 mars 2012 à 17:01
Voila même un code encore plus petit ou l'erreur est pourtant toujours présente !

Le code du formulaire :

Option Explicit

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    If CloseMode 0 Then Cancel  1
End Sub

Private Sub CommandButton1_DblClick(ByVal Cancel As MSForms.ReturnBoolean) 'Quand on double-clic pour lancer

Run "TRAITEMENT_IMAGE" 'Ordonne de lire la Macro principale

End Sub



Le code du module :

Option Explicit

Sub TRAITEMENT_IMAGE()

Dim Contrôle_Image1 As OLEObject 'Déclaration des variables

'   =================================================================
'Création, insertion, placement et dimensionnement d'un object sur la feuille (Contrôle image dans cet exemple)
'Set Contrôle_Image1 ActiveSheet.OLEObjects.Add(ClassType:="Forms.Image.1", Link:=False, _
DisplayAsIcon:=False, Left:=210, Top:=124.5, Width:=123, Height:=49.5)

UserForm1.Show 'Afficher l'UserForm1

End Sub


André
0
Rejoignez-nous