[Resolu] RechercheV par couleur de cellule

Shindaraa

XLDnaute Nouveau
Bonjour a tous,
Comment allez vous?

Longtemps que je n'ai pas eu recours a ce forum puisque j'ai reussi a y trouver une reponse a chaque fois pour des sujet existants, mais malheureusement pas ce coup-ci.

Apres de nombreuses recherches ici et ailleurs, j'ai reussi a trouver un tutoriel Youtube pour créer une formule RechercheV par VBA (je suis novice absolu dans ce domaine) qui me renvoit une valeur en fonction de la couleur du fond de la cellule.
Comme vous pouvez le constater dans les colonnes K et L de la P1 , la formule semble bien fonctionner (si jamais vous avez le temps de jeter un coup d'oeil au code VBA pour le verifier et me dire si c'est "propre" ce serait genial aussi, j'ai eu quelques soucis avec le numero de colonne pour renvoyer la valeur qui ne fonctionnait pas toujours).
Cependant, j'aimerais combiner cette nouvelle formule avec une imbrication de RechercheV et Index que javais precedemment cree, que vous pouvez voir en cellule I4 -> I6 . Seulement quand j'essaye de les assembler (en I2 et I3) cela ne semble pas fonctionner.

Alors vu que je n'y connais rien en VBA, je me demandais si il y avait une ligne de code a rajouter pour que cette nouvelle formule fonctionne en imbrication, ou si c'etait autre chose qui clochait.

Un grand merci d'avance pour vos reponses, et n'hesitez pas a me demander si vous avez besoin de plus d'informations de ma part pour me repondre au mieux.

:)
 

Pièces jointes

  • Test colorvlookup.xlsm
    31.1 KB · Affichages: 100

vgendron

XLDnaute Barbatruc
Bonjour

Déjà.; il faudrait expliquer ce que fait ta FONCTION colorvlookup, notamment les arguments passés..
ce que je comprend:
elle recherche dans une zone (arg2) LA cellule qui a la meme couleur que l'argument 1
et renvoie la valeur situé à Arg3 colonnes
à quoi sert l'argument 4 ??

ensuite.. ta FORMULE qu'est elle censée faire??
 

vgendron

XLDnaute Barbatruc
dans ton fichier tel quel avec ta formule en L6 telle quelle..
si tu tires vers le bas
ce qui va te donner =colorvlookup(K8;$D$2:$E$5;2;1)
K8 étant vide
le résultat sera: QWRRT ==> est ce le résultat attendu??

si la réponse est non....essai cette fonction
VB:
Function colorvlookup(r1 As Range, r2 As Range, n As Integer, b As Boolean) As Variant
Application.Volatile

Dim r3 As Range

For Each r3 In r2
    If r3.Interior.Color = r1.Interior.Color Then
        colorvlookup = r3.Offset(0, n - 1).Value
        If b = False Then Exit For 's'arrete au premier trouvé?
    End If
Next r3

If colorvlookup = "" Then colorvlookup = "#N/A"

End Function
et CETTE formule en L6
=colorvlookup(K5;$D$2:$D$4;2;1)
 

Shindaraa

XLDnaute Nouveau
Salut vgendron,

Merci beaucoup pour ta reponse,

Du coup l'objectif que j'avais pour cette fonction colorvlookup; c'est d'avoir exactement exactement le meme fonctionnement qu'une fonction recherchev, sauf que au lieu de rechercher une valeur et de renvoyer la donnee correspondante sur une cellule d'une autre commande; je voudrais qu'elle cherche la couleur de fond de la cellule, et renvoi la donnee qui est sur la cellule adjacente.
Du coup pour repondre a ta question sur l'argument 4; si j'ai bien compris l'explication du gars sur le tutoriel que j'ai regarde (j'avoue que j'ai surtout recopie "betement" le code), cette partie de la fonction est l'equivalent du VRAI/FAUX qu'on entre sur la fin de la RechercheV.

J'ai essaye ton code du coup, j'ai effectivement l'impression que ca fonctionne deja mieux que celui que j'avais, qui renvoyait pas toujours la bonne valeur. Apres j'ai l'impression que ca ne fonctionne toujours pas comme une vrai rechercheV, ou l'on defini une zone de recherche entiere, et la colonne exact ou la valeur doit etre renvoye.

L'objectif final comme j'essayais d'expliquer dans mon premier ca, ce sera apres de combiner cette formule colorvlookup, avec celle qui existe deja en celulle I4-5-6. Le but ce sera que la formule puisse identifier la couleur qui se trouve dans le tableau de la P2 (colonne U->BJ) en fonction du code de projet (A,B,C en colone A) et de la date (ligne 2), et de renvoyer le code qui correspond a cette couleur (mini tableau en P2 U12:V13).

Peut etre qu'il y a un autre moyen plus simple de faire la meme chose mais j'avoue avoir un peu epuise mes pistes de reflexion la dessus.

Merci encore pour ton aide,
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil, le forum, Shindaraa, vgendron

@Shindaraa
Peut etre qu'il y a un autre moyen plus simple de faire la meme chose mais j'avoue avoir un peu epuise mes pistes de reflexion la dessus.
Pour info, sur les versions récentes d'Excel, on peut
1) Trier sur la couleur
2) Filtrer sur la couleur
01filtri.png


PS: Le lien vers le tutoriel YT (à l'accent chantant) ;)
 
Dernière édition:

Shindaraa

XLDnaute Nouveau
Salut Staple,

Merci pour cette fonction, que je connaissais deja et qui malheureusement ne va pas me permettre de faire le travail dont j'aurais besoin (automatiser le renvoi de valeur).
Et en effet c'est bien ce tuto youtube a l'accent chantant (c'est joliment dit!), avoir l'habitude de travailler avec des collegues pakistanais et indiens m'a pas mal aide a pas regarde la video 15 fois pour etre sur de comprendre hehe.
 

Staple1600

XLDnaute Barbatruc
Re

@Shindaraa
Tu la connais mais pas forcément les autres membres du forum qui tomberont sur ton fil.

[l'instant humour "stapelien"]
Pour le reste, Excel est d'abord un tableur, pas un album de coloriage ;)
Pourquoi ne pas simplement se baser sur les valeurs dans les cellules pour un RECHERCHEV classique?
(tel qu'enseigné dans les ashrams dédiés à la Cellule Sacrée, à droite en sortant du couloir)
[/l'instant humour "stapelien"]
 

job75

XLDnaute Barbatruc
Bonjour Shindaraa, vgendron, JM,

Il faut bien comprendre pourquoi votre formule en I2 de la feuille P1 renvoie forcément une erreur.

Le 1er argument de la fonction colorvlookup doit être impérativment un Range.

Or vous y mettez une fonction RECHERCHEV qui ne renvoie pas un Range mais un scalaire.

Pour avoir un Range il faut utiliser la fonction INDEX avec cette nouvelle formule en I2 :
Code:
=colorvlookup(INDEX('P2'!$A$2:$AX$9;EQUIV(A2;'P2'!$A$2:$A$9;0);EQUIV(B2;'P2'!$A$2:$AX$2;0));'P2'!$U$12:$V$13;2;0)
Fichier joint.

A+
 

Pièces jointes

  • Test colorvlookup(1).xlsm
    36.5 KB · Affichages: 63

job75

XLDnaute Barbatruc
Re, salut Bernard,

Pour mieux comprendre mon post #8 précédent voyez le fichier joint et cette fonction VBA :
Code:
Function TypeRenvoiFormule(c As Range) As String
TypeRenvoiFormule = TypeName(Evaluate(c.Formula))
End Function
Le renvoi de la formule (RECHERCHEV) en E4 est de type Double.

Le renvoi de la formule (INDEX) en E5 est de type Range.

A+
 

Pièces jointes

  • TypeRenvoiFormule(1).xlsm
    20.4 KB · Affichages: 35

Dranreb

XLDnaute Barbatruc
Oui, oui, job75, je m'adressait à Shindaraa.
Je me demandais pourquoi elle imbriquait dans des arguments de la fonction des chose qui ne pouvaient pas marcher, et je répond à une hypothèse: chercherait elle une combinaison valeur + couleur ?
Je le re-joins, il y avait une erreur.
 

Pièces jointes

  • RechCoulV.xlsm
    21 KB · Affichages: 51

Shindaraa

XLDnaute Nouveau
Bonjour a tous,

@job75
Un immense merci pour ta solution ça résout parfaitement mon soucis et je l'ai teste sur le fichier grandeur nature ça a l'air de plutôt bien fonctionner.

Petite question subsidiaire si jamais tu as le temps/la réponse :
Que faudrait-il changer dans le code VBA de la fonction colorvlookup pour qu'elle puisse marcher en association avec la recherche V? Juste changer le Dim r3 as Double plutôt que Range?

C'est plus pour ma compréhension personnelle que pour une réelle utilisation , mais sait-on jamais.

Encore un gros merci, et je peux mettre le sujet en Resolu :)
A bientot
 

Statistiques des forums

Discussions
311 720
Messages
2 081 902
Membres
101 834
dernier inscrit
Jeremy06510