EXCEL 2007 - Recolorier image par macro

Anonyme
2012-05-27T14:07:10+00:00

Bonjour,

Je voudrais, à l'aide d'une macro, pouvoir recolorier une image avec une couleur de mon choix tel que l'on peut le faire en passant par le menu Format -> Recolorier -> Autres Variations.

L'enregistreur de macro ne fonctionnant pas pour les Shapes avec Excel 2007, je désirerai connaitre le code permettant de le faire.

Pour passer en ton de gris j'utilise actuellement : PictureFormat.ColorType = msoPictureGrayscale. Mais ColorType n'offre que peu de possibilités et je souhaite pouvoir utiliser n'importe quelle couleur.

Si une personne possédant Excel 2010 pouvait me dépanner en enregistrant la macro je lui en serai très reconnaissant.

Merci d'avance

Microsoft 365 et Office | Excel | Pour la maison | Windows

Question verrouillée. Cette question a été migrée à partir de la Communauté Support Microsoft. Vous pouvez voter pour indiquer si elle est utile, mais vous ne pouvez pas ajouter de commentaires ou de réponses ni suivre la question.

0 commentaires Aucun commentaire

31 réponses

  1. Anonyme
    2012-05-30T15:11:26+00:00

    Bonjour MichD et Geo le Tourangeau,

    J'ai finalement trouvé une combine.

    Auparavant j'avais deux images de grande taille, une de jour et une de nuit superposée qui passait de Visible = True à False selon les besoins.

    J'ai supprimé l'image de nuit que j'ai remplacée par une icône à qui j'ai appliquée le même format que l'image de jour en ce qui concerne les biseaux, et autres.

    J'ai recolorié (à l'aide des menus, HI) cette icône en bleu nuit et à la demande je copie par macro ce format sur l'image de jour.

    ...... .Shapes("imgNUIT").Pickup

    ...... .Shapes("imgJOUR").Apply

    Puis pour repaaser en 'mode jour'  :

    ...... .Shapes("imgJOUR").PictureFormat.ColorType = msoPictureAutomatic

    Solution bâtarde j'en conviens, mais faute de mieux....

    En tous cas merci à vous deux pour vos interventions et bonne continuation.

    Jean-Claude

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire
  2. Anonyme
    2012-05-29T12:03:16+00:00

    Bonjour l'Angevin

    J'obtiens 2 messages d'erreur :
    1)  Dim brightnessContrast As PictureEffects : type défini par l'utilisateur non défini
    2)  With s.Fill.PictureEffects :Membre de méthode ou de données introuvable.

    Si on en croit la documentation, ce sont des éléments ajoutés en version 2010.
    Désolé, j'aurais du y faire attention.

    Pour revenir sur un autre point, je n'ai pas souvenir que l'enregistreur de macro ait été amélioré  en version 2010.
    La tendance est plutôt qu'il disparaisse, comme c'est le cas pour Powerpoint et Outlook (avant 2010).
    Manifestement la fonction de coloriage n'existe pas, on peut rêver pour 2012.
    Ceci dit, j'avais fait remarquer que le modèle objet de Outlook est incomplet, la réponse a été : pas assez de demandeurs.

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire
  3. Anonyme
    2012-05-29T11:44:03+00:00

    Bonjour MichD,

    Oui, effectivement, tu n'es pas censé savoir ce que je connais !

    • Regrouper les variables, c'est bien, mais pourquoi garder celles qui sont inutiles.

    Ayant l'habitude de travailler en VB6 et VBA avec MZ-Tols je fais toujours un examen du code afin d'éviter ce genre de choses.

    • Est-ce que tu as déjà vu ou exécuté une procédure qui faisait ce que tu  demandes?

    Si j'en avais déjà vu ou exécuté je ne serais pas là à te "casser les pieds pour le savoir", HI.

    • Je suppose que tu as un ordinateur limité en ressource et que toi tu as une limite infinie en temps!

    Tu n'as raison que sur un point : je ne suis pas limité en temps .Par contre mon PC n'est nullement limité en ressources, si j'ai fait cette remarque, au sujet de la déclaration de variable inutile, cela découle d'une très vieille habitude de programmation de plusieurs décennies.

    • Pour .Fill.Visible = True, tu as en partie raison. Pour les tests il plus pratique de mettre la ligne en commentaire ou de change une valeur que de réécrire la ligne. Mais une fois que l'on est sûr, pourquoi la laisser ?

    Cela dit je n'avais pas fait ces remarques dans le but de polémiquer, ce serait quand même déplacé alors que c'est moi qui suis demandeur !

    Je pensais sincèrement qu'avec Excel 2010 l'enregistreur de macro fonctionnait dans tous les cas car j'avais lu sur plusieurs forums que cette lacune était corrigée pour cette version, mais au final il apparait que non.

    Tu penses bien qu'avant de poser cette question, j'avais fait le tour du Net, et ce en plusieurs langues, afin de connaitre la méthode. La question a été posée maintes fois mais est toujours restée sans réponses. Personne ne sait comment faire !

    Nous en sommes donc toujours au point zéro.

    Amicalement et bonne journée à toi.

    Jean-Claude

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire
  4. Anonyme
    2012-05-29T01:40:47+00:00

    | Je ne souhaite pas, dans ce cas, agir sur la transparence, ça je connais.
    ** Pour un répondeur, comment savoir ce que le demandeur sait déjà?
     | Mais je le répète coloriser l'image autrement que par  msoPictureGrayscale.
    ** Je veux bien t'en mettre de la couleur, mais je ne vois rien qui permette
             de le faire facilement en VBA. Ceci étant dit, je ne dis pas que ce n'est pas
             réalisable, mais dans mon quotidien, je ne touche jamais à ça.
             Est-ce que tu as déjà vu ou exécuté une procédure qui faisait ce que tu
             demandes?

    | Je ne vois pas pourquoi tu t'embêtes à déclarer K pour lui attribuer la valeur
    | d'une constante, c'est utiliser des ressources pour rien
    ** S.V.P. ne me fais pas rire avec ce type d'argument "ressources pour rien "
    Dans la mesure du possible, je préfère regrouper les variables dont je dois
    contrôler la valeur en début de procédure et les regrouper. Si pour toutes sortes
    de raison, je dois en modifier une ou plusieurs, je ne perds pas mon temps à
    relire toute une procédure pour les modifier. Je suppose que tu as un ordinateur
    limité en ressource et que toi tu as une limite infinie en temps!

    | A noter que .Fill.Visible = True est superflu. Visble est à True par défaut.
    ** Quand tu fais une succession rapide de test en modifiant la valeur des
             paramètres à chaque fois, j'aime bien m'assurer du contrôle des paramètres.
             Rien de tel comme les afficher dans la procédure!

    Personne n'est obligé de partager ma façon d'écrire du code.

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire
  5. Anonyme
    2012-05-28T21:18:10+00:00

    Bonsoir Geo le Tourangeau,

    Ton implication me fait plaisir et ta persévérance est remarquable.

    Je suppose que tu veux trouver, non seulement pour m'aider, mais à titre personnel le pourquoi du comment !!!

    J'obtiens 2 messages d'erreur :

    1)  Dim brightnessContrast As PictureEffects : type défini par l'utilisateur non défini

    2)  With s.Fill.PictureEffects :Membre de méthode ou de données introuvable.

    Les constantes msoEffectSaturation et msoEffectBrightnessContrast ne sont pas reconnues et introuvables dans l'aide..

    Je sélectionne EffectParameters et appuie sur F1, résultat : Mot clé introuvable.

    C'est très mal parti pour tenter quoi que ce soit avec Excel 2007.

    Cela  marche pourtant très bien soit par le menu Format du ruban ou avec le menu contextuel en passant par Format de l'image > Recolorier.... mais là nous n'avons pas le choix des Variations. (couleurs à choisir)

    Petite remarque : à fin d'optimiser le code on devrait trouver en fin de celui-ci

    Set myDocument =Nothing. et Set s = Nothing.

    Il est Inutile de déclarer Set myDocument ,l'objet n'étant pas utilisé par la suite.

    A+ Jean-Claude (l'Angevin)

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire