XL 2016 Recherchev avec 2 critères et affichage de plusieurs résultats uniques (sans doublons)

doudou33

XLDnaute Nouveau
Bonsoir,

Je cherche une formule Excel (ou sinon code Vba) pour effectuer une recherchev avec 2 critères (Col A & Col B) et affichage de plusieurs résultats uniques (sans doublons). J'ai mis un exemple dans le fichier Excel en pièce jointe. Par avance, merci beaucoup pour le partage d'astuces.

Fichier : 2 feuilles dont 1 feuille pour les résultats avec chaque résultat unique affiché dans une colonne unique et 1 feuille pour la base avec plusieurs lignes en doubles qu'il ne faut pas effacer.

J'ai essayé avec des formules matricielles mais sans succès du fait de l'affichage des résultats en doublon.

Salutations.
 

Pièces jointes

  • Fichier Besoin.xls
    49.5 KB · Affichages: 21

CISCO

XLDnaute Barbatruc
Bonsoir

Une possibilité en pièce jointe, avec 3 formules matricielles à valider avec Ctrl+maj+entrer, à tirer vers le bas. Cela ne fonctionne que si les dates pour chaque mag sont données dans l'ordre croissant.
Une couleur = une formule.

@ plus
 

Pièces jointes

  • Fichier Besoin.xlsx
    11.2 KB · Affichages: 23
Dernière édition:

Monptipiton

XLDnaute Nouveau
Bonjour,

3 autres solutions dans le fichier joint :
- tableau croisé (à actualiser à chaque fois)
- filtres (grand classique)
- macro VBA (le plus rapide et pratique, à adapter) qui actualise à chaque changement de cellule dans la feuille de données

@ plus
 

Pièces jointes

  • Copie de Fichier Besoin.xlsm
    31.2 KB · Affichages: 24

CISCO

XLDnaute Barbatruc
Bonjour à tous

Dans ma proposition précédente, la formule dans la seconde colonne, en RECHERCHEV, n'était pas assez précise, il me semble. Par conséquent, j'ai changé le fichier en pièce jointe dans ce post 2.

@ plus
 

doudou33

XLDnaute Nouveau
Bonjour,

Merci mais est-il possible d'avoir la formule matricielle qui s'actualise à chaque fois qu'on clique une fois dans la feuille des résultats ? Ctrl+Maj+entrée en via par exemple ?

Dans la formule matricielle, le chiffre 1000 correspond à quoi ? et si on a plus de 10000 lignes, il faut remplacer le chiffre 9 par 10 000 ?

Enfin, possible d'avoir la formule matricielle convertie en code via ?

Merci encore pour toutes ces solutions rapides.
 

Monptipiton

XLDnaute Nouveau
Re-bonjour,

Je me suis amusé à rajouter des lignes pour voir les limites de mon code, je l'ai pas mal optimisé du coup (moins d'une seconde pour traiter plus de 137 000 lignes quand modification de la base). Voir fichier joint.

Je me pencherai sur la formule matricielle après le marché.

@+
 

Pièces jointes

  • Copie de Fichier Besoin optimisé.xlsm
    27.4 KB · Affichages: 15

CISCO

XLDnaute Barbatruc
Bonjour,
...
Dans la formule matricielle, le chiffre 1000 correspond à quoi ?

SI(test;résultat si VRAI) renvoie 0 si le résultat est FAUX (puisqu'on n'a pas défini résultat si FAUX). Cela poserait problème si on utilisait MIN(SI(test;résultat si VRAI)) puisqu'on veut le MIN de résultat si VRAI, et pas 0. Donc j'ai écri résultat si FAUX = 1000 juste pour éliminer ces 0. Bien sûr, cela n'est utilisable que si ton fichier à moins de 1000 lignes.

et si on a plus de 10000 lignes, il faut remplacer le chiffre 9 par 10 000 ?

Par 10 000 -1 =9 999.

Si c'est le cas, il faut mieux utiliser les propositions de Monptipiton, car les formules matricielles consomment beaucoup de temps de calcul, et cela risque de ramer.

@ plus

P.S : @ Monptipiton : Depuis quand les gens branchés python font aussi du VBA :) ? Il y en a qui ont plus de neurones que les autres, ou quoi ?
 
Dernière édition:

Monptipiton

XLDnaute Nouveau
Si c'est le cas, il faut mieux utiliser les propositions de Monptipiton, car les formules matricielles consomment beaucoup de temps de calcul, et cela risque de ramer.

Bien ce qui me semblait. Les formules, matricielles ou non, ne sont et ne seront jamais adaptées aux gros volumes.

Je me rappelle à mes débuts en compta, quand je ne bricolait que via des formules.. Outil très efficace ! J'avais réussi à faire passer 4h de travail de la cheffe qu'elle n'arrivait pas à caler dans son edt quotidien en... 5 minutes de calcul, où le pc n'était plus du tout accessible (donc on prenait le café X) arrivant aux limites d'Excel 97, 2000, puis 2003.
Puis j'ai retroussé les manches et ai commencé à coder, faisant passer ce même genre de travail et beaucoup plus en.. 2 secondes (ça prend du temps de cliquer!) :D Le temps investit en valait la peine.

P.S : @ Monptipiton : Depuis quand les gens branchés python font aussi du VBA :) ? Il y en a qui ont plus de neurones que les autres, ou quoi ?

Je rêve de me mettre à coder en python ! Mais pour ça j'ai besoin d'un projet concret, je n'aime pas travailler dans le vide ^^ Tu aurais ça à trainer Cisco ? :D

@ doudou33 : Problème résolu ?
 

CISCO

XLDnaute Barbatruc

doudou33

XLDnaute Nouveau
Bonjour,

Merci à [U]Monptipiton[/U] mais est-il possible d 'avoir dans l'onglet "Résultats", ne pas avoir le codage pour faire un tableau de synthèse. J'ai du mal définir mon besoin - désolé.

Je n'arrive pas empêcher aux macros de venir écraser les nouvelles lignes enregistrées et avec aucun résultats dans l'onglet "Base".

J'ai posté un besoin complémentaire.

Merci encore.
 

Pièces jointes

  • Copie de Fichier Besoin optimisé.xlsm
    32.6 KB · Affichages: 7

Monptipiton

XLDnaute Nouveau
Bonsoir,

Désolé doudou, je n'ai rien compris..

est-il possible d 'avoir dans l'onglet "Résultats", ne pas avoir le codage pour faire un tableau de synthèse
Si j'essaie de lire entre les fautes de syntaxe, je comprends que tu ne veux pas avoir le codage pour faire un tableau de synthèse. OK. Mais on mets le résultat où ? Faut-il avoir du code pour répondre à ton besoin ?

Je n'arrive pas empêcher aux macros de venir écraser les nouvelles lignes enregistrées
Suffit d'éditer ou adapter le code.. Comprends tu les lignes suivantes ?
VB:
    'On écrase les anciens résultats par les nouveaux sur la feuille de destination
    With ThisWorkbook.Sheets("Résultats")
    .Range(.Range("A1").CurrentRegion.Address).Clear
    .Range(.Cells(1, 1), .Cells(UBound(TablReport, 1), UBound(TablReport, 2))).Value = TablReport
    End With
Que je sache si je dois les expliquer ligne par ligne, te présenter un type de variable que tu ne connais pas, etc.
Je ne suis pas contre, je veux bien aider à répondre à un besoin, mais s'il n'est pas exprimé, ça va être compliqué ^^'

et avec aucun résultats dans l'onglet "Base".
J'ai sans doute mal saisi, pas de souci. Donc tu ne renseignes pas la base, dans laquelle tu viens chercher tes résultats, pour renseigner ta feuille résultat, à laquelle tu ne veux pas qu'on touche.. Désolé je beug. Tu mets tes données où ? Tu en fait quoi ? Comment et où veux-tu qu'un résultat s'affiche ? Quel est le besoin réel ?

Et as-tu une quelconque connaissance de VBA ? Parce que si malheureusement ce n'est pas le cas et qu'il n'y pas d'envie de poser des questions précises et d'apprendre il vaut mieux en rester aux formules. C'est moins puissant, prend beaucoup de mémoire pour pas grand chose, mais pour des petits tableaux ça fait tout autant le taf.

J'ai joins un exemple avec des formules non matricielles qui font le job.

@+
 

Pièces jointes

  • Copie de Fichier Besoin optimisé.xlsx
    10.7 KB · Affichages: 9

doudou33

XLDnaute Nouveau
Bonsoir,

J'ai pas pu répondre avant. Merci beaucoup pour la formule qui fonctionne parfaitement.Un GRAND MERCI à Montipiton. Sinon, je connais un peu le codage VBA mais celui proposé j'ai essayé de le modifier/bricoler mais sans SUCCES afin d'éviter d'avoir un tableau effectué automatiquement.

Du coup, les formules Excel sont effectivement plus longue que ton codage proposé. Si cela n'est pas trop demandé bien sûr, ce serait d'avoir le même principe que les formules mais en codage via avec exécution automatique dés nouvelle ligne dans l'onglet BASE et du coup mise à jour date dans l'onglet "résultats".

J'ai beaucoup à apprendre encore sur le codage VBA.

MERCI ENCORE.
 

Monptipiton

XLDnaute Nouveau
Bonsoir Doudou33,

Ce que tu me demandes en vba est réalisé par le fichier que je t'ai proposé.

Si tu veux comprendre mon code et interagir avec il te faut comprendre le principe d'une variable, d'une range, d'un array, d'un dictionnaire, d'une boucle for, d'une condition if, et d'une transcription d'un array vba dans une range d'une feuille excel.

Sans ça, "connaître un peu vba" ou pas, ça va être compliqué.. Mais je te rassures il existe plein de bon tutos sur la toile expliquant chaque notion une à une ;)

Bonne lecture :)

@+
 
Dernière édition:

Discussions similaires