EXCEL 2007 - Recolorier image par macro

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

*Essayez d'entrer un numéro de page plus petit.

*N'entrez que des chiffres.

*Essayez d'entrer un numéro de page plus petit.

*N'entrez que des chiffres.

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

Nous sommes désolés de ne pas avoir pu vous aider.

Super ! Merci de vos commentaires.

Êtes-vous satisfait de cette réponse ?

Nous vous remercions de vos commentaires qui nous aideront à améliorer le site.

Êtes-vous satisfait de cette réponse ?

Merci de vos commentaires.

Bonjour,

Merci pour la réponse, mais ce n'est absolument pas ce que je souhaite obtenir. !

Je ne désire pas masquer une image mais la recolorier à l'aide d'une macro de la même façon que l'on peut le faire par les menus.

Cordialement,

Jean-Claude

1 personne a trouvé cette réponse utile.

·

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

Nous sommes désolés de ne pas avoir pu vous aider.

Super ! Merci de vos commentaires.

Êtes-vous satisfait de cette réponse ?

Nous vous remercions de vos commentaires qui nous aideront à améliorer le site.

Êtes-vous satisfait de cette réponse ?

Merci de vos commentaires.

Bonsoir

La logique voudrait qu'on écrive :
Set s = ActiveWorkbook.Worksheets(1).Shapes(1)

With s.Fill
 .ForeColor.RGB = RGB(200, 125, 99)
 .BackColor.RGB = RGB(100, 255, 36)
End With

mais ça a l'air assez capricieux et l'aide est particulièrement pauvre.

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

Nous sommes désolés de ne pas avoir pu vous aider.

Super ! Merci de vos commentaires.

Êtes-vous satisfait de cette réponse ?

Nous vous remercions de vos commentaires qui nous aideront à améliorer le site.

Êtes-vous satisfait de cette réponse ?

Merci de vos commentaires.

Bonjour,

J'avais déjà essayé cela, soit avec ForeColor et/ou BackColor, mais sans succès car l'image elle-même n'est pas modifiée par la couleur choisie.
Effectivement l'aide est très pauvre à ce sujet. Juste un exemple pour utiliser ColorType qui n'offre que peu de possibilités. Très bien pour passer en tons de gris avec msoPictureGrayscale, mais ce n'est pas suffisant.

Merci quand même...

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

Nous sommes désolés de ne pas avoir pu vous aider.

Super ! Merci de vos commentaires.

Êtes-vous satisfait de cette réponse ?

Nous vous remercions de vos commentaires qui nous aideront à améliorer le site.

Êtes-vous satisfait de cette réponse ?

Merci de vos commentaires.

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 vous a-t-elle été utile ?

Nous sommes désolés de ne pas avoir pu vous aider.

Super ! Merci de vos commentaires.

Êtes-vous satisfait de cette réponse ?

Nous vous remercions de vos commentaires qui nous aideront à améliorer le site.

Êtes-vous satisfait de cette réponse ?

Merci de vos commentaires.

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 vous a-t-elle été utile ?

Nous sommes désolés de ne pas avoir pu vous aider.

Super ! Merci de vos commentaires.

Êtes-vous satisfait de cette réponse ?

Nous vous remercions de vos commentaires qui nous aideront à améliorer le site.

Êtes-vous satisfait de cette réponse ?

Merci de vos commentaires.

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

MichD
----------------------------------------

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

Nous sommes désolés de ne pas avoir pu vous aider.

Super ! Merci de vos commentaires.

Êtes-vous satisfait de cette réponse ?

Nous vous remercions de vos commentaires qui nous aideront à améliorer le site.

Êtes-vous satisfait de cette réponse ?

Merci de vos commentaires.

OUPS,

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

MichD
----------------------------------------

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

Nous sommes désolés de ne pas avoir pu vous aider.

Super ! Merci de vos commentaires.

Êtes-vous satisfait de cette réponse ?

Nous vous remercions de vos commentaires qui nous aideront à améliorer le site.

Êtes-vous satisfait de cette réponse ?

Merci de vos commentaires.

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 vous a-t-elle été utile ?

Nous sommes désolés de ne pas avoir pu vous aider.

Super ! Merci de vos commentaires.

Êtes-vous satisfait de cette réponse ?

Nous vous remercions de vos commentaires qui nous aideront à améliorer le site.

Êtes-vous satisfait de cette réponse ?

Merci de vos commentaires.

Et qu'est-ce qui ne fonctionne pas ?

J'ai inséré dans la feuil2 une image se situant dans le répertoire suivant sous Windows 7

C:\Program Files (x86)\Microsoft Office\CLIPART\PUB60COR

l'image choisie : "J0101867.BMP"

Le code suivant s'exécute correctement (Excel 2010)

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

Dim Sh As Shape

Dim K As MsoPictureColorType
K = msoPictureGrayscale     '  OU msoPictureAutomatic

Set Sh = Feuil2.Shapes(1)

With Sh
   .PictureFormat.ColorType = K
End With

End Sub
'--------------------------

MichD
----------------------------------------

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

Nous sommes désolés de ne pas avoir pu vous aider.

Super ! Merci de vos commentaires.

Êtes-vous satisfait de cette réponse ?

Nous vous remercions de vos commentaires qui nous aideront à améliorer le site.

Êtes-vous satisfait de cette réponse ?

Merci de vos commentaires.

*Essayez d'entrer un numéro de page plus petit.

*N'entrez que des chiffres.

*Essayez d'entrer un numéro de page plus petit.

*N'entrez que des chiffres.

 
 

Informations sur la question


Dernière mise à jour 18 avril 2024 Affichages 1 111 S’applique à :