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

laurent950

XLDnaute Accro
Bonjour Staple1600,
Oui c'est vrais est comme le code est en accord avec ce liens j'ai rajouté les deux, mais c'est vrais que vous avez fait tous le travail avant. j'ai posté le code qui me semble pas trop mal et cela peux aussi servir par la suite.
laurent
 

Staple1600

XLDnaute Barbatruc
Re

[COMPLEMENT INFO]
Shape Object and the Shapes Collection
The Shapes collection holds the list of shapes for a sheet.
The Shape object represents a single shape
such as an AutoShape, a free-form shape, an OLE object (like an image), an ActiveX control or a picture.
Possible parent objects of the Shapes collection are the Worksheet and Chart object.
Source: Excel 2003 Object Model - Référence
[/COMPLEMENT INFO]

Question à cent sous
Quelle est la différence entre image et picture pour Microsoft ? ;)
 

patricktoulon

XLDnaute Barbatruc
re
bon mille excuses a tous j'ai du m'absenter
@Staple1600 ben oui le "." quelle nouille je fait :oops:

@laurent950 bonjour ; oui intéressant pour un autre projet je stocke la source ;)

mon but étant de me simplifier la tache et je m’aperçois qu'il n'est pas possible de chopper l'object sans boucle
donc je coderais soit avec un "set pict= ..." avec une variable globale a la création

soit je me ferait une fonction avec une boucle que j’appellerais au besoins
 

Staple1600

XLDnaute Barbatruc
Re

=>patricktoulon
?
Dans ce cas, pourquoi ton post est en: Résolu
Et que tu marques comme solution, la proposition de job75
pour écrire dans le message qui suit, que cela ne fonctionne pas.
Y'a truc que je pige pas (lol) ;)

PS1: index ne prends pas s au pluriel.
Ça pique les yeux, non ?
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
oui corriger
autant que sylvanu pourrait corriger ces dires quand au fait que la collection pictures est plus complète ou que shapes ne liste pas les formes automatiques
ce qui est faux et même le contraire ;)

donc pour le moment non résolu quand au fait d'un choix de méthode j'utilise la méthode de job75 pour l'instant
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re tout le monde,
Comme personne n'a pu me dire en quoi ces deux lignes de code comporte une erreur, les deux retours sont différents.
Je ne dis pas que c'est vrai ou faux, mais tout utilisateur utilisant ces lignes y verra une différence.
D'où le piège.
Code:
Cells(i, 2) = ActiveSheet.Pictures(i).Name
Cells(i + 7, 2) = ActiveSheet.Shapes(i).Name
 

Staple1600

XLDnaute Barbatruc
Re

=>sylvanu
Effectivement, il se passe des choses bizarres ;)
Sur XL2013, un CommandButton est considéré aussi comme une "Picture"
VB:
Sub Tests_WTF()
Dim pic, shp As Shape
For Each pic In ActiveSheet.Pictures
pic.BottomRightCell.Offset(, 1) = pic.Name & " <-P"
Next
For Each shp In ActiveSheet.Shapes
'If shp.Type = msoPicture Then
shp.BottomRightCell.Offset(, 2) = shp.Name & " <-S"
'End If
Next
End Sub
 

laurent950

XLDnaute Accro
Cells(i, 2) = ActiveSheet.Pictures(i).Name
Cells(i + 7, 2) = ActiveSheet.Shapes(i).Name
Site : https://silkyroad.developpez.com/VBA/FeuilleDeCalcul/#LIII-A
L'élément masqué Pictures
Il représente les images placées dans la feuille de calcul.
Cet élément est pris en charge uniquement pour assurer une compatibilité descendante entre les différentes versions d'Excel. Il préférable d'utiliser la propriété Shapes (type msoPicture) dans vos nouveaux projets. Néanmoins comme l'élément Pictures fonctionne encore (du moins jusqu'à Excel 2003) il peut être intéressant de voir son fonctionnement.
 

patricktoulon

XLDnaute Barbatruc
Re tout le monde,
Comme personne n'a pu me dire en quoi ces deux lignes de code comporte une erreur, les deux retours sont différents.
Je ne dis pas que c'est vrai ou faux, mais tout utilisateur utilisant ces lignes y verra une différence.
D'où le piège.
VB:
Cells(i, 2) = ActiveSheet.Pictures(i).Name
Cells(i + 7, 2) = ActiveSheet.Shapes(i).Name

@sylvanu
je te l'ai dis plus haut en post #26 :fait moi plaisir inverse ton +7
comme ceci
VB:
Cells(i+ 7, 2) = ActiveSheet.Pictures(i).Name
Cells(i , 2) = ActiveSheet.Shapes(i).Name
[/QUOTE]

ton tableau picture est en bas et pas l'inverse tu verra que ça te donne un résultat exactement contraire a ce que tu a dis précédemment
a savoir que c'est la collection shapes qui liste tout
 

Statistiques des forums

Discussions
312 229
Messages
2 086 422
Membres
103 206
dernier inscrit
diambote