× Aidez la recherche contre le COVID-19 avec votre ordi ! Rejoignez l'équipe PC Astuces Folding@home
 > Tous les forums > Forum Bureautique
 EXCEL : recopie de la couleur d'une cellule
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
aligator_21
  Posté le 06/06/2018 @ 16:34 
Aller en bas de la page 
Petit astucien

Bonjour à tous,

Je vous soumets mon problème :

J'ai une table associant environ 50 valeurs en entrée à 50 valeurs en sortie (E1 associée à S1, E2 associée à S2....)

Dans la table des données, les valeurs en sortie ont une couleur (~30 couleurs différentes).

Contraintes :

- La même couleur peut être présente plusieurs fois.

- La table des données est dans un onglet spécifque

Le but : utiliser la fonction RECHERCHEV pour trouver la sortie Sx en fonction de Ex et colorer la cellule résultat avec la couleur de Sx dans la table de données.

En espérant avoir été clair.....

Lien vers une image externe

Merci de votre aide...

Publicité
ferrand
 Posté le 06/06/2018 à 17:17 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Bonjour,

Pas totalement... ! Mais où est ton fichier ?

aligator_21
 Posté le 06/06/2018 à 20:57 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

J'ai tenté une copie d'écran.... manifestement sans succès..

Voici le lien : https://cjoint.com/c/HFgs3C1xvkV

ferrand
 Posté le 07/06/2018 à 07:25 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Bonjour,

Pourquoi un double critère (Entrée et Description) là où un seul suffit !

Solution : évènement Change sur B3 et évènement SelectionChange sur B8:B17...

Je vois ça à mon retour, je doix partir...

A+

ferrand
 Posté le 07/06/2018 à 14:36 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Bonjour,

Pas d'apparition depuis, j'élimine donc ton double critère, et ne conserve que le E...

Pour faciliter les manipulations, j'ai mis la saisie de l'entrée en B3 sous liste déroulante...

J'ai aussi déclaré l'adresse de la plage de couleurs comme constante, ce qui facilitera son utilisation. A chaque valeur de E.. correspond une cellule de couleur. Et la cellule B5 doit être mise en couleur selon la valeur de B3.

Const PlgClr As String = "B8:B17"

Première action : changement de la valeur de B3 -

Cela déclenchera une procédure automatique de type Change :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim lg%
If Target.Address = "$B$3" Then
If Target Like "E*#" Then
lg = CInt(Replace(Target, "E", ""))
Else
lg = 0
End If
Colorer lg
End If
End Sub

La procédure vérifie que c'est bien B3 qui est modifiée, que sa valeur est d'un type "E" suivi de chiffres, et elle récupère alors la partie numérique qui constitue l'index de ligne de la cellule de référence dans la plage couleurs. Elle lance une procédure de coloration en lui passant cet index. (Si on a effacé, la valeur de B3 ne correspond pas à une couleur, elle passe 0 à la procédure de coloration.)
Pourquoi une proc. de coloration distincte ? Parce que cette proc. ne sera pas la seule à l'utiliser...

Sub Colorer(idx As Integer)
Dim clr&
If idx > 0 Then
clr = Me.Range(PlgClr).Cells(idx, 1).Interior.Color
Else
clr = xlNone
End If
Me.Range("B5").Interior.Color = clr
End Sub

Deuxième action : changement d'une couleur dans la plage couleurs -

Un changement de mise en forme ne déclenche pas d'évènement Change, on ne peut donc s'appuyer que sur l'évènement SelectionChange, en considérant que si une cellule de la plage couleurs a été sélectionnée, la couleur a pu en être changée...

Mais, ce changement ne peut affecter, lors d'un changement de sélection que la cellule qui était sélectionnée auparavant, non celle qui vient d'être sélectionnée. Il faut donc mémoriser si une cellule sélectionnée appartient à la plage couleurs pour lors d'un changement de sélection pouvoir vérifier si la cellule précédemment sélectionnée en faisait partie. On déclare donc une variable destinée à recueillir l'adresse de la cellule sélectionnée lorsqu'elle fait partie de la plage couleur.

Public ClrOld As String

Nb- Variable publique, parce qu'elle sera amenée à être appelée de l'extérieur du module...

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim lg%
If Target.Count > 1 Then Exit Sub
If ClrOld <> "" Then
With Me.Range("B3")
If .Value Like "E*#" Then
lg = CInt(Replace(.Value, "E", ""))
Else
lg = 0
End If
End With
Colorer lg
End If
If Not Intersect(Target, Me.Range(PlgClr)) Is Nothing Then
ClrOld = Target.Address
Else
ClrOld = ""
End If
End Sub

Lors d'un changement de sélection, on veille à ce que la sélection soit constituée par une cellule unique, puis on vérifie la variable : si sa valeur est "", c'est que la sélection précédente n'était pas concernée par les couleurs, sinon on réaffecte la couleur en fonction de la valeur de B3 (on ne peut savoir si une couleur a été modifiée, ni si c'est celle qui colorait B5, donc sachant que la possibilité existe, on vérifie, ou plutôt on recolore parce que plus simple, ce qui aboutira dans la plupart des cas à remettre la même couleur...).

Nb- En fait on se sert de la variable comme d'une variable booléenne et on aurait donc pu se contenter d'une variable de ce type... mais des développements futurs pourront peut-être être amenés à utiliser l'adresse contenue dans la variable...

2e partie de la procédure : elle met à jour la variable en lui affectant l'adresse de la sélection actuelle, qui servira au prochain changement de sélection, la valeur "" si la sélection n'est pas dans la plage couleurs.

Il faut noter que si l'on change la couleur d'une cellule et que celle-ci correspond à la couleur de B5 selon la valeur de B3, la couleur sera modifiée en B5, mais lorsqu'on déplacera la sélection...

Lorsque l'on ouvre le fichier, les variables ne sont pas initialisées. Pour que le dispositif puisse s'appliquer dès le départ, on met en place une procédure à l'ouverture du fichier :

Private Sub Workbook_Open()
With Feuil1
.Activate
If Not Intersect(ActiveCell, .Range("B3:B18")) Is Nothing Then
Feuil1.ClrOld = ActiveCell.Address
End If
End With
End Sub

La proc. vérifie l'emplacement de la cellule active, et si elle se trouve dans la plage B3:B18, initialise la variable ClrOld.

Cordialement.

https://www.cjoint.com/c/HFhmJynru2u

NB- CJoint ayant pris la déplorable manie de transformer les extensions xlsm en xlsx, penser à rétablir l'extension xlsm après enregistrement et avant d'ouvrir le fichier.

aligator_21
 Posté le 07/06/2018 à 20:23 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Je te remercie pour cette réponse rapide, longue et très détaillée.

Je prendrai le temps ce we d'essayer de comprendre tout ça et de l'intégrer à mon fichier.

Encore merci et bonne soirée

Page : [1] 
Page 1 sur 1

Vous devez être connecté pour poster des messages. Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !


Les bons plans du moment PC Astuces

Tous les Bons Plans
36,99 €Disque dur Western Digital Blue 1 To à 36,99 €
Valable jusqu'au 02 Octobre

Cdiscount fait une belle promotion sur le disque dur Western Digital Blue 1 To à 36,90 €. Ce disque dur 3.5 pouces SATA III  tourne à 7200 tr/min.


> Voir l'offre
12,19 €Pack de 3 clés USB 3.0 Kingston DataTraveler 100 G3 - 32 Go à 12,19 €
Valable jusqu'au 04 Octobre

Amazon fait une promotion sur le pack de 3 clés USB 3.0 Kingston DataTraveler 100 G3 - 32 Go qui passe à 12,19 € livré gratuitement au lieu d'une vingtaine d'euros habituellement.


> Voir l'offre
171,01 €PC Dell Optiplex 7010 (Core i5, 8 Go RAM, SSD 240 Go, Windows 10) reconditionné à 171,01 €
Valable jusqu'au 03 Octobre

Amazon fait une belle promotion sur l'ordinateur de bureau Dell Optiplex 7010 SFF reconditionné à neuf et garanti 1 an à 171,01 € livré gratuitement. Le PC est équipé d'un processeur Intel Core i5 3470 à 3.2 GHz, de 8 Go de RAM, d'un SSD de 240 Go, d'un graveur DVD et tourne sous Windows 10 Pro 64 bits. Rajoutez un écran, un clavier et une souris et vous aurez un ordinateur à l'aise en bureautique, Internet et multimédia. Notez que le Windows 10 fourni peut être en espagnol ou en italien mais que vous pouvez facilement changer la langue pour mettre Windows en Français.


> Voir l'offre

Sujets relatifs
Changement couleur cellule excel / mise en forme conditionnelle / formule
Plus de recopie de cellule sur excel 97
(Macro Excel) Sélectionner cellule en fonction de sa couleur
Excel 2007 couleur dans une cellule non imprimable
couleur dans cellule excel
excel 2007 cellule en couleur dans 10ans ?
excel 2007 cellule en couleur après la date ?
tableur excel+cellule couleur
macro de recopie de la couleur fond de la cellule
Excel: lier couleur cellule entre 2 feuilles
Plus de sujets relatifs à EXCEL : recopie de la couleur d''une cellule
 > Tous les forums > Forum Bureautique