indexs dans collection pictures incohérents

patricktoulon

XLDnaute Barbatruc
bonjour a tous
j'ai un soucis avec pictures
cette petite boucle me liste mêmes les bouton activX et toutes shapes confondues
alors que je n'ai qu'une seule image :oops: o_O
VB:
Sub test()
    With ActiveSheet
        For i = 1 To .Pictures.Count
            MsgBox .Pictures(i).Name
        Next
    End With

End Sub
c'est un peu gênant ;)

Résumé et résolution adoptée pour cette longue discussion

la collection pictures intégrant tout le oléobjects y compris les activeX
on est obligé de faire une boucle et de créer un range de shapes de type (13)msopicture
il y donc 2 solutions simples

Laurent en post91 qui la créé en selectionnant tout les shapes concernées
moi en post95 qui le cree avec un tableau de noms d'images
 
Dernière édition:
Solution
Re,
Partie 2
Comment Travailler avec Chaques images stockés de la feuille Excel dans la variable Objet "sr"
Avec une Boucle Ou juste sur une précise (J'ai choisie juste une précise est désactivé la boucle)
Pour Travailler avec les images :
https://docs.microsoft.com/fr-fr/office/vba/api/excel.pictureformat
Méthodes
Propriétés
Code...

job75

XLDnaute Barbatruc
Bonjour patricktoulon, le forum,

J'ai abandonné depuis longtemps l'idée de comprendre la différence entre une Picture et une Shape.

Je remarque cependant que le TypeName d'une Picture donne une information utilisable :
VB:
Sub test()
With ActiveSheet
    For i = 1 To .Pictures.Count
        MsgBox TypeName(.Pictures(i))
    Next
End With
End Sub
De plus contrairement aux Shapes les listes de validation et les commentaires ne sont pas comptés.

Bonne journée.
 

jmfmarques

XLDnaute Accro
Bonjour

La réponse est dans la lecture attentive de ceci :
En rappelant :
1) que la collection Pictures est une collection masquée d'objets Picture également masqués qui ne sont encore (jusqu'à quand ?) présents que pour assurer une compatibilité avec les anciennes versions de Excel (par exemple Excel 97)
2) Que les objets Shapes sont également de type msoPicture

Je déconseille personnellement vivement de "travailler" avec la collection masquée Pictures.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Job, Patrick, Jmfmarques,

Just for the fun.

J'ai fait un essai en PJ en listant les Shapes trouvés et les Pictures trouvés sur une même feuille.
Et ce n'est pas la même chose. Ni la même liste, ni les même Ref.

Par ex Picture7 est référencé comme Shape N°4 ou Picture N°2.
Le rectangle est trouvé par Picture mais pas par Shape.

Donc la collection Shapes est plus "complète" que la collection Pictures.
Mais dans tous les cas, on ne peut différencier les images des ActiveXobjects.
 

Pièces jointes

  • Picture vs Shape (3).xlsm
    49.4 KB · Affichages: 5
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
bonjour a tous
@job75
With ActiveSheet
MsgBox .Pictures(.Pictures.Count).Name
End With
et ben non !!!!!!! pas dans mon contexte ;)
sinon je n'aurais pas poser cette question ;)

@jmfmarques
y a pas de mal j'ai voulu heurté personne

@sylvanu je vais regarder

pour que ca soit clair pour tout le monde :
dans ma feuille j'ai
4 bouton ActivX
une shape automatique msorectangle
et enfin une SEULE !! picture qui est insérer(pictures.insert) /delétée dynamique autant de fois que je clique sur bouton

donc en effet l'image devrait être toujours le dernier object

donc l'image est
MsgBox ActiveSheet.Pictures(ActiveSheet.Pictures.Count).Name
voir meme
MsgBox ActiveSheet.shapes(ActiveSheet.shapes.Count).Name

c'est dommage que l'on puissent plus différencier les shapes,picture,activX

par exemple
MsgBox ActiveSheet.Pictures(1).Name
me donne le nom du premier bouton ActivXo_Oo_Oo_Oo_O:oops:o_Oo_Oo_O
c'est ridicule vous en conviendrez ;)
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil

[aparté]
y a pas de mal j'ai voulu heurté personne
Juste une petite chose qui me heurte*: le titre de la discussion ;)
Titre qui fait pédaler dans la semoule les Discussions similaires
Sur ce, un bon week-end à tous
*: en vrai, j'ai pas eu mal, mais je pige pas un truc moi non plus
Comment un vieux de vieille du forum n'a pas le réflexe d'affubler ses discussions d'un titre explicite ? ;)

[/aparté]

• Sinon pourquoi ne pas nommer l'image (avec le même nom) à chaque insertion ?
VB:
Sub Macro1()
ActiveSheet.Pictures.Insert("C:\Users\STAPLE\Pictures\test.jpg").ShapeRange.Name = "TOTO"
MsgBox TypeName(ActiveSheet.Shapes("TOTO"))
End Sub
Comme cela plus de problème à chercher l'image, puisqu'on connait son nom.
 

patricktoulon

XLDnaute Barbatruc
re
@sylvanu
oui j'ai vu ca liste comme des mêmes type d'object dans l'ordre de création avec pictures
mais la ou le bas blaisse
c'est que la liste est fait en 2 fois en fait avec pictures
ca liste d'abords shapes et pictures dans l'ordre de creation
et ensuite les activX

autrement dit si j'ai créé dans cet ordre
shape1
bouton1(activx)
picture1
shapes2
listbox1
shape3

j'aurait ma liste comme ca
shape1
picture1
shapes2
shape3
bouton1
listbox

du vrai n'importe quoi ;)
 

patricktoulon

XLDnaute Barbatruc
Bonjour le fil

[aparté]

Juste une petite chose qui me heurte*: le titre de la discussion ;)
Titre qui fait pédaler dans la semoule les Discussions similaires
Sur ce, un bon week-end à tous
*: en vrai, j'ai pas eu mal, mais je pige pas un truc moi non plus
Comment un vieux de vieille du forum n'a pas le réflexe d'affubler ses discussions d'un titre explicite ? ;)

[/aparté]

• Sinon pourquoi ne pas nommer l'image (avec le même nom) à chaque insertion ?
VB:
Sub Macro1()
ActiveSheet.Pictures.Insert("C:\Users\STAPLE\Pictures\test.jpg").ShapeRange.Name = "TOTO"
MsgBox TypeName(ActiveSheet.Shapes("TOTO"))
End Sub
Comme cela plus de problème à chercher l'image, puisqu'on connait son nom.

c'est ce que j'ai fait Staple1600 je l'ai même variabilisé en global module comme ca je suis tranquille ;)

c'est dommage de ne pas pourvoir se servir des collections quand meme
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re tout le monde,

Patrick, je disais simplement :

1- On peut éliminer les Shape automatique en utilisant Shape car alors ils ne sont pas référencés.
2- Impossible me semble t-il de différencier Image et ActiveXObject.
3- Les fonctions Shape et Picture ne font pas la même chose.

Je ne vois pas en quoi c'est "du vrai n'importe quoi".

Sur ce, je vous souhaite une excellente journée.
 

Statistiques des forums

Discussions
311 733
Messages
2 082 011
Membres
101 866
dernier inscrit
XFPRO