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,
Il faut en effet repartir des conditions qui ont conduit à la couleur (et non s'appuyer sur la couleur issue de la mfc)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.
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.
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 !
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
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.
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 FunctionComme 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 :
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
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 ?