For each p in that column” au lieu de “for each p in activesheet.pictures
Bonsoir à tous,
N’ayant pas eu beaucoup de succès (réponses) avec mon post d’origine en anglais, voici le problème exposé en français
Je suis développeur Web depuis environ 16 ans, mais novice dans VBA. Mais bon, ça va, je me débrouille…
Cependant, une question me turlupine… Voici le problème:
J'ai une feuille de travail. Dans cette feuille de travail, j'ai une colonne (la colonne 10) qui contient (ou non) une petite image dans chaque cellule de cette colonne 10 (environ 3 000 lignes dans le tableau).
Donc, quand j'active cette feuille de travail, je lance une macro (Worksheet_Activate)
Cette macro est censée parcourir chaque cellule de ma colonne J pour vérifier si elle contient une image. Et si oui alors blablabla
Jusque-là, pas de problème.
Voici donc ma macro (qui fonctionne parfaitement):
For Each p In ActiveSheet.Pictures
If p.TopLeftCell.Column = 10 And Not Intersect(p.TopLeftCell, Range(p.TopLeftCell.Address)) Is Nothing Then
Et donc ici le code que je veux exécuter
End If
Next p
Mais je me pose des questions… Dans de nombreuses autres cellules de ma feuille de calcul, j'ai également de nombreuses images (rien à voir avec ma macro). Si je comprends bien ce code (je n’en ai trouvé aucun autre), à moins que je ne me trompe, effectue les opérations suivantes:
Pour chaque image de ma feuille de calcul (disons que j'ai 500 petites images dans toute la feuille de calcul)
S’il s’agit de la colonne 10 et qu’une image est trouvée dans la cellule, alors fait ceci
Et réitère l’opération à la prochaine image que tu trouveras sur ton chemin (sous-entendu donc « même si cette image ne se trouve pas dans la colonne qui m’intéresse ») et c’est justement là où le bât blesse.
Si je comprends bien, cela signifie qu’à ce stade, le programme passe à l’image suivante de la feuille de travail pour vérifier si elle se trouve dans la cellule de la colonne 10 ???? Ce qui serait totalement idiot, car je souhaite simplement que le programme vérifie les images dans la colonne 10, et non dans chaque image de la feuille de calcul (perte de temps et d'énergie pour rien)
Quelqu’un pourrait-il me dire s’il existe une autre solution ou si je fais quelque chose dans le mauvais sens?
Ma macro fonctionne parfaitement, c’est juste que je trouve idiot de tester chaque image de la feuille de calcul si je dois simplement parcourir en boucle chaque image de la colonne 10.
Le bon code serait quelque chose comme "for each p in that column" au lieu de "for each p in activesheet.pictures »
Le fait est que je fais des recherches google depuis des jours mais que je n’ai trouvé aucune autre solution.
Merci d'avance
Bonjour,
malheureusement le modèle objet de excel ne permet pas cette manière de faire.
si l'object shape contient une référence à une cellule, l'inverse n'est pas vrai et on est donc obligé de parcourir tous les shapes pour déterminer ceux qui se trouvent dans une colonne bien précise.
Bonjour,
malheureusement le modèle objet de excel ne permet pas cette manière de faire.
si l'object shape contient une référence à une cellule, l'inverse n'est pas vrai et on est donc obligé de parcourir tous les shapes pour déterminer ceux qui se trouvent dans une colonne bien précise.
Bonjour h2so4,
Oui, après avoir fait le tour de la question, force est de le constater !
C'est une abération mais bon, c'est ainsi... Peut être dans une future release....
Tu imagines, dans le cas où on a 500 petites images dans la worksheet, pour tester juste notre truc dans une cellule ou une colonne, le système va checker les 500 images ! Abérant !
Merci pour ta réponse en tout cas
Bonjour,
tout est relatif, il ne faut que quelques millièmes de secondes pour parcourir 500 images.
Bonjour NinoTLS,
On peut pallier parfois à l'absence de certaines fonctions d'Excel en s'organisant différemment.
Mais plutôt comme le soulignait h2s04 pour un ou plusieurs classeurs présentant plusieurs feuilles d'images.
Puisque tu cherches une solution, peut-être celle-ci te conviendrait. Un Classeur pouvant s'étoffer dans le futur...
Dans le cas ou en colonne J il y a des images qui sont fixées. C'est à dire qu'elles ont pour but de rester dans cette colonne et uniquement dans celle-ci.
On peut avec deux méthodes pouvoir travailler sur les images de cette colonne. Voir les feuillets NbImages et GrpImages du fichier joint. A adapter selon besoins.
Bons tests, bonne continuation.