XL 2010 Recherche multi-critères

Durand Damien

XLDnaute Nouveau
Bonjour, tout d'abord je tien à vous féliciter pour ce forum que je viens de découvrir. j'ai déjà appris beaucoup de choses. Je tiens aussi à m'excuser dans le cas ou ma demande aurait déjà été traitée sur une autre sujet. j'ai cherché mais rien trouvé qui s'en rapproche.

Voila mon problème:

Je souhaite à partir de mon fichier faire une recherche de personne pour lesquelles il manque une couleur à condition uniquement qu'elles aient au moins une nuance de cette couleur et que cela s'affiche dans la case résultats.
je m'explique, Bernard possède le bleu foncé et donc il lui manque bleu clair. donc je souhaite voir afficher automatiquement "Bernard Bleu clair" dans la case résultats.

Ainsi si je prend mon fichier je devrais avoir au final dans la case résultat en:
H3 : Bernard bleu clair ; Julien Bleu foncé
H6 : Bernard jaune pale jaune foncé; Evelyne Jaune clair.

J'espère que cela est faisable par une formule ou une macro (sachant que le fichier original possède déjà une macro permettant de filtrer par colonne).
Dans l'attente d'une réponse pour raison professionnelle je vous remercie de prendre attention à ce sujet.
 

Pièces jointes

  • test matrice.xlsx
    14.2 KB · Affichages: 45

Dugenou

XLDnaute Barbatruc
Bonjour,
Un essai en pj à discuter : j'ai fait au plus simple (pour moi) avec une plage de calculs à droite pour montrer que c'est possible. Ensuite il faudra surement améliorer sur ton fichier réel s'il comporte beaucoup de colonnes, traiter les cas de 1 seule ligne, automatiser pour recopiage vers le bas....
A te lire
 

Pièces jointes

  • durandDamien.xlsx
    15.2 KB · Affichages: 35

Durand Damien

XLDnaute Nouveau
dans l'idée c'est exactement ca, sauf que sur mon fichier réel, j'ai une liste de plus de 70 noms ce qui implique, si je prend ton calcul de faire un doublon de mes colonnes à droites afin de pouvoir avoir les réponses simplifiées dans la case résultats. il n'y a pas possibilité de le faire sans avoir ce "doublon" de tableau?
 

Dugenou

XLDnaute Barbatruc
Le probleme est d'afficher plusieurs résultats dans la meme cellule.
On peut éviter les cellules supplémentaires en mettant tout dans une seule, mais juste pour 3 couleurs et 4 noms la formule va faire plusieurs lignes. Le doublon peut être fait en dessous si tu n'as pas trop de lignes, on peut aussi le faire sur une autre feuille.
Une autre possibilité est de le faire avec une macro : mais je ne sais pas le faire (je ne fais que des formules)
 

Durand Damien

XLDnaute Nouveau
Je vous joint le fichier original où je souhaite intégrer la fameuse formule ou matrice. J'ai remplacé les noms des personnes par "A1,A2,A3,...." et les noms des documents par "doc1,.......".

Je souhaiterais donc que dans les cases violettes qui sont chacune associées à un module comportant lui même plusieurs document apparaissent le nom des personnes et les documents pour lesquelles celles-ci doivent êtres formées. j'entend par la que seule les personnes ayant été formées à au moins 1 document du module doit être formée pour les autres documents.
Si la personne n'est formée à aucun doc du module, elle ne m'importe pas. Les 2 et 3 représente l'état formé et formateur.

si mes explications ne sont pas claires, n’hésitez pas à me le dire. ca parait simple dans ma tête mais une fois écrit....^^
 

Pièces jointes

  • Test matrice.xlsm
    86.1 KB · Affichages: 30

Durand Damien

XLDnaute Nouveau
merci mais du coup le résultat sur ton premier test n'est pas celui recherché. la tu affiche les documents ou couleurs pour lesquelles il y a un "2" or ce que je souhaite c'est voir celles ou il n'y a pas de "2" a condition qu'il y en ait un pour un des documents du module
 

Durand Damien

XLDnaute Nouveau
Les cellules violettes concernent les lignes 33 à 88 pour l'instant car je me concentre sur 2 des 3 activités de l'entreprise, mais à court terme je voudrais aussi appliquer cette méthode aux lignes 4 à 32.

pour expliquer les parties bleues, vertes et oranges sont 3 secteurs d'activités de l'entreprise et dans chacun de ces secteurs il y a plusieurs modules. et dans chaque module, il est nécessaire d'être formé sur la totalité des documents du module pour être habilité.

exemple dans la première ligne verte il faut être habilité "2 ou 3" sur le doc 30 ET 31 pour pouvoir être habilité.
c'est pour ça que je cherche à faire apparaître les personnes ayant besoin d'être formé à tel ou tel document d'un module à la seule condition qu'ils soient "1, 2 ou 3" sur l'un des doc du module.

ainsi si je prend l'exemple du A1 pour le premier module orange ou il faut avoir un 2 ou 3 sur les docs 47 à 51, je voudrais voir apparaître en case violette :
"A1 doc48, doc49, doc50".

je sais pas si cela est possible.
 

youky(BJ)

XLDnaute Barbatruc
Regarde si cela convient,
C'était pas évident
En 1ere partie je fais un tablo pour connaitre le nombre de modules
t(i,1) est la 1ere ligne du module et t(i,2) la derniere du module et n(i) est le nombre de modules
J'ai supprimé option explicit pour éviter de déclarer mes variables si tu remets option explicit
déclare mes variables.
Reviens ici si besoin
Ce fut un beau défit
Bruno
Edit :macro avec commentaire et une ligne à supprimer
VB:
Sub myviolet()
Dim t(50, 2)
Dim nl(50) 'nombre de modules maxi 50
Dim kit As Boolean
bas = [D65000].End(3).Row 'derniere ligne col D
Range("CN33:CN" & bas) = ""  'efface
''''''t(1, 1) = 33'LIGNE A SUPPRIMER(doublon)sur précédente macro
For k = 33 To bas 'debut à 33
i = i + 1
t(i, 1) = k
n = Application.Range("CN" & k).MergeArea.Rows.Count
k = k + n - 1
t(i, 2) = k
nl(i) = n
Next
'''''''on test col 5 à 84 soit E à CF
For col = 5 To 84
For k = 1 To i
tx = ""
If nl(k) > 1 Then
If Application.CountIf(Range(Cells(t(k, 1), col), Cells(t(k, 2), col)), 2) > 0 Or _
Application.CountIf(Range(Cells(t(k, 1), col), Cells(t(k, 2), col)), 3) > 0 Then
For lig = t(k, 1) To t(k, 2)
If Cells(lig, col) = "" Or Left(Cells(lig, col), 1) = 1 Then tx = tx & "," & Cells(lig, 4)
Next
If tx <> "" Then Cells(t(k, 1), "CN") = Cells(t(k, 1), "CN") & " " & Cells(1, col) & tx
End If
End If
Next
Next
End Sub
 

Pièces jointes

  • TestYouky.xlsm
    80 KB · Affichages: 46
Dernière édition:

Durand Damien

XLDnaute Nouveau
je te remercie pour le travail effectué. cependant il y a un petit soucis:
- en effet tu as bien mis le tri pour que tous ceux qui ont un document dans le modules soient pris en compte
- par contre ceux qui ont un "1" ou "1v" doivent en effet être pris aussi en compte ce qui est le cas mais le document pour lequel la personne à un "1" doit aussi apparaître dans la recherche.

En effet le but ici est de voir les formations à refaire sur les documents et le 1 signifie en formation car ils sont formés à l'ancienne version.

peut-on modifier cela?
 

youky(BJ)

XLDnaute Barbatruc
Bonjour,
A tester et vérifier si c'est bon
Si la cellule est <>"" donc soit 1 ou 1v3 ou 2 ou 3 ou 4 on prend
Bruno
VB:
Sub myviolet()
Dim t(50, 2)
Dim nl(50) 'nombre de modules maxi 50
Dim kit As Boolean
bas = [D65000].End(3).Row 'derniere ligne col D
Range("CN33:CN" & bas) = ""  'efface
For k = 33 To bas 'debut à 33
i = i + 1
t(i, 1) = k
n = Application.Range("CN" & k).MergeArea.Rows.Count
k = k + n - 1
t(i, 2) = k
nl(i) = n
Next
'''''''on test col 5 à 84 soit E à CF
For col = 5 To 84
For k = 1 To i
tx = ""
If nl(k) > 1 Then
If Application.CountA(Range(Cells(t(k, 1), col), Cells(t(k, 2), col))) Then
For lig = t(k, 1) To t(k, 2)
If Cells(lig, col) = "" Then tx = tx & "," & Cells(lig, 4)
Next
If tx <> "" Then Cells(t(k, 1), "CN") = Cells(t(k, 1), "CN") & "|" & Cells(1, col) & tx
End If
End If
Next
Next
End Sub
Bruno
 

Durand Damien

XLDnaute Nouveau
ok, nikel ça fait bien le tri mais dans le résultat il me manque les documents en version 1.

je m'explique pour prendre exemple sur le candidat A44 qui est en version "1 v08" sur le doc32, il est bien pris en compte dans la recherche pour le doc33. mais je voudrais aussi qu'il soit pris en compte pour le doc32.

Cette matrice doit me montrer toutes les formations à effectuer pour habiliter les personnes aux documents de la dernière version.

Désolé je suis chiant mais c'est vraiment important
 

youky(BJ)

XLDnaute Barbatruc
Ben voila!!
VB:
Sub myviolet()
Dim t(50, 2)
Dim nl(50) 'nombre de modules maxi 50
Dim kit As Boolean
bas = [D65000].End(3).Row 'derniere ligne col D
Range("CN33:CN" & bas) = ""  'efface
For k = 33 To bas 'debut à 33
i = i + 1
t(i, 1) = k
n = Application.Range("CN" & k).MergeArea.Rows.Count
k = k + n - 1
t(i, 2) = k
nl(i) = n
Next
'''''''on test col 5 à 84 soit E à CF
For col = 5 To 84
For k = 1 To i
tx = ""
If nl(k) > 1 Then
If Application.CountA(Range(Cells(t(k, 1), col), Cells(t(k, 2), col))) Then
For lig = t(k, 1) To t(k, 2)
If Cells(lig, col) = "" Or Left(Cells(lig, col), 1) = 1 Then tx = tx & "," & Cells(lig, 4)
Next
If tx <> "" Then Cells(t(k, 1), "CN") = Cells(t(k, 1), "CN") & "|" & Cells(1, col) & tx
End If
End If
Next
Next
End Sub
Bruno
 

Discussions similaires

Statistiques des forums

Discussions
312 198
Messages
2 086 153
Membres
103 136
dernier inscrit
Zoulander