Associer la valeur d'une cellule avec la couleur de fond d'une autre

Bonjour à tous,

Je rencontre un autre problème. Suite à des formules de recherche de valeur, je souhaite associer sur une seule cellule (par exemple D2) le contenu de la cellule A2 et la couleur de fond de la cellule B2.

Vu que mes recherches se font à partir d'un tri automatique alphabétique et que les couleurs viennent d'une mise en forme conditionnelle, je ne peux pas de nouveau utiliser une mise en forme conditionnelle, la condition étant beaucoup trop complexe.

L'exemple que je vous donne ci-dessous devrait vous permettre de m'aider. Dans l'idéal, il me faudrait cela sous la forme d'une "function" (comme pour récupérer le code couleur).

Merci beaucoup d'avance.

Bonjour flocq1983 le forum

Sans ouvrir le fichier, si tu as une coloration par mise en forme, tu n'as pas vraiment une couleur de fond dans les cellules

donc pour en extraire la couleur c'est pas tout simple

a+

papou

Bonjour flocq1983 le forum

Vu que mes recherches se font à partir d'un tri automatique alphabétique et que les couleurs viennent d'une mise en forme conditionnelle, je ne peux pas de nouveau utiliser une mise en forme conditionnelle, la condition étant beaucoup trop complexe.

après ouverture de ton fichier il n'y a pas de mfc dans le fichier !!!!

Seulement une cellule avec une couleur de fond index 44

Si on te fait une réponse sur ce fichier en aucun cas cela ne marchera, quand tu auras ton fichier avec ta mfc

a+

papou

Bonjour,

Vu que mes recherches se font à partir d'un tri automatique alphabétique et que les couleurs viennent d'une mise en forme conditionnelle, je ne peux pas de nouveau utiliser une mise en forme conditionnelle, la condition étant beaucoup trop complexe.

Il faut en effet repartir des conditions qui ont conduit à la couleur (et non s'appuyer sur la couleur issue de la mfc)

Bonsoir à tous,

J'ai tardé à répondre car un gros pb de pc m'a obligé à tout formater ce week-end... ce qui ne m'enchantait guère et qui n'était forcément pas prévu...

Oui, j'ai mis juste un fichier d'exemple. Le fichier originel est plein de noms de personnes (et là, je n'ai pas encore Office pour le transmettre en version censurée...)

Il n'y a vraiment pas de function vba qui pourrait me permettre d'assembler sur une cellule un contenu et une couleur ? du genre :

=fonctioncrée('contenu';'couleur')

J'ai trouvé une fonction perso qui permet d'extraire la couleur, il faudrait maintenant le contraire...

Sans ouvrir le fichier, si tu as une coloration par mise en forme, tu n'as pas vraiment une couleur de fond dans les cellules

donc pour en extraire la couleur c'est pas tout simple

Ben pourtant, dans le fichier fourni, la fonction est capable de le faire. J'ai testé avec une couleur issue de mfc, ça marche aussi...

Merci à ceux qui cogitent pour moi

Bonsoir,

Alors toutes mes excuses, vous aviez raison, ma fonction ne marche pas avec une couleur issue de mfc. J'avais testé un peu trop rapidement l'autre soir.

J'ai maintenant réinstallé le packOffice, et j'ai viré les noms de mon fichier.

16essai.xlsm (30.61 Ko)

Il faut regarder les feuilles 1 et 2. Dans la feuille n°2, il y aura une liste de personnes qui sont susceptibles d'avoir des cas particuliers (par exemple une infirmière qu'il faut doubler parce que nouvelle dans le service). En cliquant sur la colonne correspondante, le nom de la personne s'illumine d'une belle couleur

En cliquant sur la plage horaire ou cette personne va travailler, Excel va l'inscrire dans le tableau de la feuille1 en fonction de son service (pour l'instant, je ne m'occupe que du premier service (donc première colonne)). Je voudrais qu'en plus de faire une fonction recherche de la case cochée et récupération du nom de l'employée, excel recopie aussi la couleur éventuelle de sa particularité... Suis-je clair ? Pas sûr, mais il est tard aussi...

Bref, si avec tout ça, vous pouvez arriver à éclairer ma lanterne ou peut-être m'aiguiller sur une piste non envisagée...

Bonne soirée !

Bonsoir flocg,

tu a écrit :

Pas sûr, mais il est tard aussi...

par exemple une infirmière qu'il faut doubler parce que nouvelle dans le service

c'est vrai qu'il est tard, mais avant qu'tu sois trop fatigué, j'veux bien qu'tu m'envoies un double de ta jolie nouvelle infirmière.

non ? le clonage est toujours interdit ? bon, ben tant pis, alors ! (quel dommage !)

dhany

Bonsoir, Salut à tous !

Moi, y en a rien vu de ce que tu indiques dans ton dernier post !

Donc... !?

Ben pourtant, dans le fichier fourni, la fonction est capable de le faire. J'ai testé avec une couleur issue de mfc, ça marche aussi...

D'abord, quand on travaille sur 2016 on n'utilise plus la palette de couleurs de 2003, c'est un peu archaïque, donc on privilégie Color à ColorIndex (qui ne sert plus que pour l'absence de couleur et la couleur automatique par défaut). Alors qu'à côté de ça tu nous mets des fonctions qui n'existaient pas dans les versions immédiatement antérieures.

Ta fonction te renverra un index de couleur, mais sûrement pas la couleur mise par MFC, je te confirme à ce sujet ce que t'a déjà dit Paritec.

On peu détecter une couleur MFC, mais pas au moyen d'une fonction personnalisée, car interdit par Microsoft (Pourquoi ? J'ignore, mais c'est ainsi !)

Si tu indiques exactement ce que tu veux obtenir, on pourra faire quelque chose, mais pour l'instant... !

Cordialement.

Si tu indiques exactement ce que tu veux obtenir, on pourra faire quelque chose, mais pour l'instant... !

C'est fait dans mon dernier post.. enfin, si c'est clair !?

c'est vrai qu'il est tard, mais avant qu'tu sois trop fatigué, j'veux bien qu'tu m'envoies un double de ta jolie nouvelle infirmière.

Désolé, c'est ma femme... chasse gardée ! et elle n'est pas nouvelle, c'est son rôle de cadre qui est nouveau

Bonjour,

Bon, je viens de mettre à jour mon fichier et finalement j'ai deux problèmes

6essai.xlsm (28.13 Ko)

1 - Sur la première feuille, il y a une formule qui recherche les éléments cochés sur la seconde feuille dans la case du samedi matin. Je sais recherche une occurrence, mais je ne sais pas rechercher plusieurs occurrence, il me met la même à chaque fois...

2 - Toujours cette histoire de couleur. Pour les cas particuliers, je voudrais que ma mfc de la feuille 2 apparaissent aussi sur la feuille 1 sur le nom des personnes concernées.

C'est peut-être plus clair maintenant...

Bonjour,

Pour la formule :

=SIERREUR(INDEX(USC!$A$1:$A$34;PETITE.VALEUR(SI(USC!$B$4:$B$34="ü";LIGNE(USC!$B$4:$B$34);"");LIGNE(1:1)));"")

Matricielle (valider par Ctrl+Maj+Entrée)

Celle-ci va en C3. Elle se recopie dans la zone IDE.

Je te l'ai adaptée pour les autres zones IDE.

Tu devrais pouvoir faire pour les zones AS/AP.

Pour la couleur, il faut refaire des MFC... Celles existantes sur USC sont à simplifier, tu les as toutes doublées.

Je vois ça dans un moment.

@+

Re,

Effectivement, un peu épineux de rebâtir des formules MFC prenant tous les paramètres en considération !

Si on en venait à bout, la formule n'aurait guère eu de chance d'être acceptée par Excel en MFC... J'ai donc pensé un moment à placer une formule dans le gestionnaire de nom, utilisable par une formule MFC.

Mais la formule nommée devant s'avérer un peu trop longue à mon goût, et compliquée par les fusions de cellules... j'ai finalement opté pour une fonction personnalisée qui renverra un nombre de 1 à 6 correspondant à l'énumération des cas particuliers (dans l'ordre des colonnes) ou 0 si pas de cas particulier.

La fonction : (à voir dans Module1)

Function CasPart(Cnm As Range, Sta As Range, Vac As Range, nf As Range) As Integer
    Dim F$, nom$, n%, ia%, sce%, i%, PlgCas
    Application.Volatile
    nom = Cnm.Value: F = nf.Value
    If nom = "" Then CasPart = 0: Exit Function
    Select Case Sta.MergeArea.Cells(1, 1)
        Case "IDE": ia = 1
        Case "AS/AP": ia = 12
        Case Else: CasPart = 0: Exit Function
    End Select
    Select Case Vac.MergeArea.Cells(1, 1)
        Case "MATIN": sce = IIf(Sta.Row < 20, 1, 3) + ia
        Case "APRES MIDI": sce = IIf(Sta.Row < 20, 2, 4) + ia
        Case Else: CasPart = 0: Exit Function
    End Select
    With Worksheets(F)
        For i = 4 To 34
            If .Cells(i, ia) = nom And .Cells(i, sce) = "ü" Then
                PlgCas = .Cells(i, ia).Offset(, 5).Resize(, 6).Value
                Exit For
            End If
        Next i
    End With
    If i <= 34 Then
        For i = 1 To 6
            If PlgCas(1, i) = "ü" Then Exit For
        Next i
        CasPart = IIf(i < 7, i, 0)
    Else
        CasPart = 0
    End If
End Function

Comme tu peux le constater, la fonction exige 4 arguments, tous de type Range. J'ai choisi de systématiser ce type car si dans l'utilisation de la formule dans Excel, on mettra des références de cellules que l'on peut normalement recueillir en tant que valeurs des cellules, avec la fusion, on aura des cellules ne pouvant renvoyer de valeur et qu'il faut alors aller chercher dans la cellule du groupe fusionné qui la contient à partir de la référence fournie.

Le premier argument Cnm est la cellule contenant le nom, donc celle d'une cellule de C3 à I36. Là on récupèrera sa valeur directement (NB- Si pas de nom, la fonction renverra 0, si un libellé ne correspondant pas à un nom, elle ne le trouvera pas et renverra 0.)

Le deuxième argument Sta sera la cellule sur la même ligne que le nom en B. Elle est dans un groupe fusionné indiquant le statut : IDE ou AS/AP. La référence fournie, permet d'accéder au groupe, et à la première cellule du groupe : on affecte à une variable (ia) 1 si IDE ou 12 si AS/AP, correspondant au numéro de colonne contenant le nom dans la feuille ou on ira le chercher. (NB- si autre mention ou aucune, la fonction renverra .)

Le troisième argument Vac sera la cellule sur la même ligne que le nom en A. Elle est dans un groupe fusionné indiquant si la vacation est effectuée le MATIN ou l' APRES MIDI. On procède comme précédemment pour la récupérer (si on n'a pas l'une de ces deux mentions, la fonction renverra 0).

On affecte à une variable une valeur 1, 2, 3, 4 selon que la vacation se déroule SA ma, SA am, DI ma, DI am. Pour distinguer le samedi du dimanche on se repère sur la ligne : si <20 c'est SA, sinon c'est DI. On ajoute à la variable la valeur trouvée pour ia précédemment, et cette variable (sce) indiquera la colonne où chercher un coche dans la feuille de recherche.

Le quatrième argument nf doit justement nous fournir le nom de la feuille où chercher, on l'indiquera dans la fonction par la cellule en ligne 2 de la colonne correspondant au nom (on anticipe ainsi sur l'existence de feuilles correspondant à l'intitulé de ces colonnes ; à cet effet, il convient de modifier PNM / URG en PNM - URG car le "/" est interdit dans les noms de feuilles).

Ayant trouvé le nom et la coche dans les colonnes définies, sur la feuille désignée, la fonction cherchera sur la ligne dans les colonnes des cas particuliers si une coche figure. Si elle la trouve, elle renverra son index, de 1 à 6 (sinon 0).

Utilisation de la fonction pour définir une MFC s'appliquant à la plage C3:I36 :

=ET(C3<>"";CasPart(C3;$B3;$A3;C$2)=1)

Celle-ci concerne le premier cas, associé à la couleur rouge. Il y en a 5 autres ou 1 est remplacé par les nombres 2 à 6 (6e cas associé au jaune).

Cordialement.

Waouhhh vous êtes géniaux !!

Merci beaucoup !

Re,

J'ai oublié de te signaler que j'ai fusionné deux par deux tes MFC de la feuille USC (à voir).

Cordialement.

Merci.

J'ai un souci pour l'équipe de nuit. Il faudrait que je crée une autre fonction comme la tienne avec quelques modifications mais je n'y arrive pas. La différence, c'est que je n'ai pas de matin/arpès midi, donc deux colonnes en moins...

Voici la fonction que j'ai crée :

Function CasPartNuit(Cnm As Range, Sta As Range, Vac As Range, nf As Range) As Integer

Dim F$, nom$, n%, ia%, sce%, i%, PlgCas

Application.Volatile

nom = Cnm.Value: F = nf.Value

If nom = "" Then CasPartNuit = 0: Exit Function

Select Case Sta.MergeArea.Cells(1, 1)

Case "IDE": ia = 1

Case "AS/AP": ia = 10

Case Else: CasPartNuit = 0: Exit Function

End Select

Select Case Vac.MergeArea.Cells(1, 1)

Case "Samedi": sce = 2 + ia

Case "Dimanche": sce = 3 + ia

Case Else: CasPartNuit = 0: Exit Function

End Select

With Worksheets(F)

For i = 4 To 34

If .Cells(i, ia) = nom And .Cells(i, sce) = "ü" Then

PlgCas = .Cells(i, ia).Offset(, 5).Resize(, 6).Value

Exit For

End If

Next i

End With

If i <= 34 Then

For i = 1 To 6

If PlgCas(1, i) = "ü" Then Exit For

Next i

CasPartNuit = IIf(i < 7, i, 0)

Else

CasPartNuit = 0

End If

End Function

Voici mon tableau en photo :

sans titre

Je ne sais pas si c'est ma fonction modifiée qui est fausse ou la MFC que j'ai mise en première page. J'ai mis la MFC suivante :

=ET(J3<>"";CasPartNuit(J3;$B3;$A3;$M$16)=6)

Pour une plage de cellule allant de J3 et J36 (Le M16 c'est parce que j'ai mis le nom de la feuille dans cette cellule là).

Peux-tu m'aiguiller stp MFerrand ?

Encore merci.

Bonjour à Tous, bonjour le forum

J'avais pas vu la deuxième feuille, avec toutes vos correspondances, je vous laisse donc.

a+

Papou

Bonjour à Tous, bonjour le forum

Moi j'ai déjà récupéré la couleur de la MFC par contre tu veux quoi maintenant??? copier la couleur de la MFC et la valeur de la cellule colonne A, mais attention dans ce cas si la cellule de la colonne B avec sa mise en forme change, la couleur de fond de la cellule de destination va rester en couleur, alors précise bien ce que tu veux STP

à vous relire

Papou

J'ai utilisé la solution de MFerrand qui est vraiment bien, mais j'ai juste besoin d'une modification de sa fonction pour finir mon tableau. J'espère qu'il est encore dans le coin, il devrait pouvoir répondre à ma dernière question sans trop se casser la tête vu son niveau de compétence, et au moins, il connais bien mon problème. Mais merci quand même paritec

Si tu peux mettre un fichier modèle, il faut enlever ce qui ne correspond plus dans la fonction macro, et ajuster le reste, mais j'ai besoin de voir les 2 feuilles... et vu les interférences, mieux vaut regarder sur un fichier que sur une image...

Voilà le fichier. Merci MFerand

10essai2-copie.xlsm (74.42 Ko)

Reçu ! C'est le même tableau général mais la colonne J que j'avais laissé de côté dans le cas précédent, parce que visiblement pas la même structure... Je regarde.

Edit : dans la colonne J du Tableau général, au dessus de la mention Nuit AS, est-ce que les 2 lignes restent vides ?

Rechercher des sujets similaires à "associer valeur couleur fond"