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-28T14:29:48+00:00

    Bonjour MichD,

    Je te remercie pour ce code que j'avais déjà expérimenté. Il convient parfaitement à des Formes, mais pas à des images. J'entends par image, évidement un bitmap.

    En fait dans mon application je calcule les levers de soleil et de lune lune pour un lieu précis.

    J'ai 12 feuilles (une par mois) et une feuille nommée "AZIMUT" dans laquelle se trouve l'image d'un panorama de montagne. Si le lever de lune à lieu après le lever du soleil et avant son coucher j'affiche une image de jour, sinon une image de nuit . Sur cette image je dispose  un symbole de la lune en tenant compte de son ilumination et de son angle de phase ou bien le soleil à l'endroit de son lever sur l'image de jour.

    Dans un premeir temps pour la nuit j'affichais l'image de jour que je passais en ton de gris grâce à PictureFormat.ColorType = msoPictureGrayscale et la rétablissait pour le jour avec msoPictureAutomatic.

    Maintenant j'ai 2 images, une de jour et une de nuit recoloriée par le menu avec "Couleur Accentuation 1 sombre". Cette deuxième image alourdit de facto le fichier.

    L'idée était de recolorier l'image de jour (passée en ton de gris)  avec un ton bleu de plus en plus foncé en fonction de l'heure après le coucher du soleil.

    Je suis bien conscient que ce type de manipulation n'est pas la vocation première d'Excel, mais puisque la possibilité existe en passant par les menus je voulais faire la même chose par macro. A savoir, au risque de me répéter, recolorier un bitmap (et non une Forme) avec une couleur donnée.

    Amicalement,

    Jean-Claude

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

    0 commentaires Aucun commentaire
  2. Anonyme
    2012-05-28T12:24:39+00:00

    OUPS,

    Dans le code soumis, j'ai oublié de remplacer les constantes par les variables...

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

    0 commentaires Aucun commentaire
  3. Anonyme
    2012-05-28T12:10:29+00:00

    Bonjour,

    Qu'entends-tu par une "Image"?
    (Perso, ce n'est pas le genre de truc avec lequel je m'amuse beaucoup dans Excel)

    Afin de voir ce que tu essaies de faire, est-ce possible que tu disposes un fichier exemple
    sur le site Cjoint.com. Tu enlèves dans ce fichier tout ce qui n'est pas pertinent à ta question.
    Tu nous retournes l'adresse que tu aurais obtenue ici.

    Il y a ce fil de discussion (en anglais) :

    http://datapigtechnologies.com/blog/index.php/enhance-excel-2010-dashboards-with-camera-tool-and-picture-effects/

    Si tu veux savoir si cette propriété existe pour Excel 2007,
    Tu ouvres l'éditeur de code (Alt + F11) , tu affiches l'explorateur d'objets (F2)
    et tu fais une recherche sur l'expression voulue : PictureEffects
     Un bout de code :

    Pour les variables M, X, Y, afin de connaître les constantes disponibles,
    dès que tu tapes la variable M par exemple suivie du symbole "=" une
    liste déroulante s'affiche, et cela te permet de choisir facilement la
    constante que tu veux appliquer.

    Il faut se rappeler que toutes les propriétés ne sont pas nécessaires pour
    tous les types d'objets!

    '----------------------------------------------
    Sub test()

    Dim Sh As Shape

    Dim M As MsoThemeColorSchemeIndex
    M = msoThemeColorAccent1

    Dim X As MsoGradientStyle
    X = msoGradientFromCorner

    Dim Y As MsoPictureEffectType
    Y = msoEffectLightScreen

    Set Sh = Feuil1.Shapes(1)

    With Sh
       .Visible = msoTrue
       .ForeColor.RGB = RGB(149, 149, 149)
       .BackColor.RGB = RGB(255, 255, 255)
       'Dans la ligne suivante le 2
       'peut prendre la valeur entre 1 et 4
       'Voir l'aide dans excel sur TwoColorGradient
       .TwoColorGradient msoGradientHorizontal, 2
       .ForeColor.ObjectThemeColor = msoThemeColorAccent1
       .ForeColor.TintAndShade = 0
       .ForeColor.Brightness = 0.400000006
       .Transparency = 0
       .Solid
       .RotateWithObject = msoTrue
       .PictureEffects.Insert Y, -1
    End With
    '----------------------------------------------

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

    0 commentaires Aucun commentaire
  4. Anonyme
    2012-05-28T10:47:26+00:00

    Bonjour,

    Merci pour votre réponse.

    Oui, j'avais déjà  trouvé  les autres valeurs de ColorType, mais comme indiqué précédemment cela ne me suffit pas. Il faut que je puisse recolorier l'image en n'importe quelle teinte.

    .Fill.PictureEffects me retourne un message d'erreur indiquant que la propriété ou la méthode n'est pas supportée par cet objet..

    Je commence à désespérer sérieusement... HI et je n'ai rien trouvé dans l'aide à ce sujet (ou mal cherché, mais je ne crois pas).

    Jean-Claude

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

    0 commentaires Aucun commentaire
  5. Anonyme
    2012-05-28T06:35:28+00:00

    Bonjour

    Pour le ColorType, vous avez trouvé les autres valeurs ?
    msoPictureWatermark, msoPictureAutomatic, msoPictureBlackAndWhite, msoPictureMixed et msoPictureWatermark

    Sinon, il y a aussi les effets :
    regardez l'aide sur PictureEffects.Insert
    l'exemple est donné pour PowerPoint mais marche aussi pour Excel.
    Set s = ActiveWorkbook.Worksheets(1).Shapes(1)

    With s.Fill.PictureEffects
      .Insert etc.

    Un coup ça marche, un coup ça marche pas ...

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

    0 commentaires Aucun commentaire