Microsoft 365 Recherche sur plusieurs feuilles avec des conditions

cl4ud10

XLDnaute Junior
Bonjour à tous,
De temps en temps, je reviens voir vous quand je ne trouve pas de solution, et donc une fois de plus je demande de l’aide pour un petit problème...
J’ai 2 feuilles avec des « Concrète Code » de deux centrales à bétons, SCHIFFLANGE et RUSSANGE, dans lesquelles j’ai appliqué des filtres pour pouvoir rechercher plus facilement les « Concrète Code ».
Donc pour faire ma recherche, je filtre la « Classe résistance », la « Cat. », le « Dmax », la « Fluidité » ……etc.....ceci pour retrouver le « Concrète Code » et le « Mix ».
Pour finir, suivant les critères de ma recherche, je peux avoir plusieurs « Concrète Code » et « Mix » différents.
Ce procéder, je dois le faire pour chaque Centrale dans les deux feuilles.
J’ai une feuille de RECHERCHE, dans laquelle je voudrais insérer des critères dans la ligne 2 et que le résultat de la recherche (recherche sur les feuilles de SCHIFFLANGE et RUSSANGE) suivant les critères appliqués s’afficherais dans les lignes de 5 à 23 pour la Centrale de Schifflange et lignes 26 à 34 pour la Centrale de Russange.
Mais que le recherche ne tienne pas en compte les « Concrète Code » qui sont DESACTIVER sur les feuilles de SCHIFFLANGE et RUSSANGE.
Désoler si je n’arrive pas à m’explique correctement mais si quelqu’un à 5 petites minutes pour ouvrir le fichier en pièce jointe…
Merci
 

Pièces jointes

  • Formules.xlsx
    219.5 KB · Affichages: 11

job75

XLDnaute Barbatruc
Bonjour cl4ud10, Laurent78,

C'est un problème de filtrage qui a souvent été traité sur ce forum.

Voyez le fichier joint et cette macro dans le code de la feuille "RECHERCHE" (clic droit sur l'onglet et Visualiser le code) :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [A2:G2]) Is Nothing Then Exit Sub
Dim critere, ubcrit%, col, ubcol%, passage As Byte, tablo, ncol%, n&, i&, j%, test As Boolean
critere = [A2:G2]
ubcrit = UBound(critere, 2)
col = Array(3, 4, 5, 6, 7, 8, 9, 10, 2, 1)
ubcol = UBound(col)
For passage = 1 To 2 'car 2 tableaux de résultats
    tablo = IIf(passage = 1, Feuil2, Feuil3).[A1].CurrentRegion
    ncol = UBound(tablo, 2)
    n = 0
    For i = 3 To UBound(tablo)
        If tablo(i, ncol) <> "DESACTIVER" Then
            For j = 1 To ubcrit
                test = IIf(critere(1, j) = "", True, critere(1, j) = tablo(i, col(j - 1)))
                If Not test Then GoTo 1
            Next j
            n = n + 1
            For j = 0 To ubcol: tablo(n, j + 1) = tablo(i, col(j)): Next j
            If n = IIf(passage = 1, 19, 9) Then Exit For
        End If
1   Next i
    IIf(passage = 1, [A5], [A26]).Resize(n, ubcol + 1) = tablo 'restitution
    If n < IIf(passage = 1, 19, 9) Then Range(Rows(IIf(passage = 1, 5, 26) + n), Rows(IIf(passage = 1, 23, 34))).ClearContents 'RAZ dessous
Next passage
End Sub
Elle se déclenche quand on modifie ou valide une cellule de la plage A2:G2.

A+
 

Pièces jointes

  • Filtre(1).xlsm
    233.5 KB · Affichages: 7

sousou

XLDnaute Barbatruc
Bonjour
Je te propose une macro (cherche)
sans doute pas la plus rapide, mais facile à faire évoluer
tu peux à loisir, changer les critères de recherche et les valeurs à cherchées. elles sont gérées par le gestionnaire de nom ( "valeurs et critères")
pas vue. tout le monde bonjour à tous
 

Pièces jointes

  • Copie de Formules.xlsm
    232.5 KB · Affichages: 10

cl4ud10

XLDnaute Junior
Merci pour les réponses et les exemples....
"sousou", je suis désolé mais je n'arrive pas a faire fonctionner ton fichier.
"job75", le fichier fonctionne bien, juste une question il donne une erreur et rentre en mode "débogage" (erreur 1004), si une condition n'est pas rempli ou si le produit existe dans une centrale et pas dans l'autre.
Existe t'il la possibilité de ne pas rentrer en mode débogage et de seulement afficher un message.

Une grande précision a faire est que je me débrouille dans excel mais question Macro, je suis nul de chez nul........en somme je sais rien faire avec les macros
 

sousou

XLDnaute Barbatruc
RE

En théorie, tu remplies tes critères de recherches, et tu lances la macro cherche, je n'ai pas associé de bouton, et je n'ai pas traité les codes désactivés, car j'ai pas vue comment on les différenciait des autres
 

job75

XLDnaute Barbatruc
"job75", le fichier fonctionne bien, juste une question il donne une erreur et rentre en mode "débogage" (erreur 1004), si une condition n'est pas rempli ou si le produit existe dans une centrale et pas dans l'autre.
Oui j'avais oublié le test If n Then :
VB:
    If n Then IIf(passage = 1, [A5], [A26]).Resize(n, ubcol + 1) = tablo 'restitution
Utilisez ce fichier (2).
 

Pièces jointes

  • Filtre(2).xlsm
    233.2 KB · Affichages: 7

cl4ud10

XLDnaute Junior
Merci job75, le fichier est presque parfait..... après plusieurs teste je ne trouve que 1 petit problème;
il y a des Concrete Code qui sont DESACTIVER sur le feuille de RUSSANGE mais le RECHERCHE les affiche quand même.
Le cas ne se passe pas sur la feuille de SCHIFFLANGE ou tout semble fonctionner parfaitement...
Merci pour le grand coup de main que tu me donnes...

Laurent78, je ne le savais pas mais je vais essayer de voir si j’apprends comment ça fonctionne.
 

job75

XLDnaute Barbatruc
il y a des Concrete Code qui sont DESACTIVER sur le feuille de RUSSANGE mais le RECHERCHE les affiche quand même.
Ah oui en effet il y a 5 lignes où DESACTIVER est suivi d'un texte, alors il suffit d'utiliser le caractère générique * en remplaçant :
VB:
If tablo(i, ncol) <> "DESACTIVER" Then
par :
VB:
If Not tablo(i, ncol) Like "DESACTIVER*" Then
Fichier (3).
 

Pièces jointes

  • Filtre(3).xlsm
    232.9 KB · Affichages: 7

Discussions similaires

Réponses
4
Affichages
503

Statistiques des forums

Discussions
314 628
Messages
2 111 333
Membres
111 104
dernier inscrit
JEMADA