Mix entre recherchev et formule matricielle

stef92230

XLDnaute Junior
Bonjour à tous,

Je vous contacte car je n'arrive pas à trouver de solution bien que je sois dessus depuis ce matin... La formule que je cherche ressemble à d'autres que je fais régulièrement mais rien n'y fait car, au final, je recherche un mot (Gxxxxxx)...

J'ai un tableau récap", qui puise dans différentes feuilles de "base" (compta, adid ou hrv)... mes critères sont :
* matricule
* nb (colonne A : pour définir l'imputation concernées)
résultats recherchés : la section et le %. (G125485 et 100% par exemple..)

Mon but est de croiser les données des 3 tableaux (cpta, adid, hrv) afin de corriger là où les éléments sont mal renseignées

La petite formule (en jaune pale) dans la colonne A des 3 tableaux de base sert à alimenter les colonnes "IMPUTATION" dans récap. Par exemple, si je recherche l'imputation 1 du matricule 100250, je croise le matricule avec si A:A=1, j'aurai G924470 (colonne U dans récap) avec le pourcentage correspondant : 80 (col.v). Quant à l'imputation pour ce même matricule : G925128 et % : 20. Rien pour les imputations 3 et 4 col. w et x)....

J'ai laissé différents tests en exemple... quelqu'un aurait une soluce ???

Je vous remercie par avance car là, je galère... !

Thanks, Stef
 

Pièces jointes

  • sections_xls.xls
    70 KB · Affichages: 56
  • sections_xls.xls
    70 KB · Affichages: 57
  • sections_xls.xls
    70 KB · Affichages: 62

Dugenou

XLDnaute Barbatruc
Re : Mix entre recherchev et formule matricielle

Bonjour Stef, Le forum,

avec =SI(MAX((Compta!$B$2:$B$13=Récap!$A5)*(Compta!$A$2:$A$13=1))=0;"";INDEX(Compta!$D$1:$D$13;MAX((Compta!$B$2:$B$13=Récap!$A5)*(Compta!$A$2:$A$13=1)*(LIGNE(Compta!$B$2:$B$13)));))
en matriciel en D5 j'ai l'impression que ça fonctionne. Valable seulement si l'item recherché est présent une seule fois !

Cordialement

pour les % imputation :
=SI(MAX((Compta!$B$2:$B$13=Récap!$A5)*(Compta!$A$2:$A$13=1))=0;"";INDEX(Compta!$J$1:$J$13;MAX((Compta!$B$2:$B$13=Récap!$A5)*(Compta!$A$2:$A$13=1)*(LIGNE(Compta!$B$2:$B$13)));))
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Mix entre recherchev et formule matricielle

Bonjour.
Vous auriez intéret à remplacer les formules des colonnes A par
Code:
=SI(B2=DECALER(B2;-1;0);DECALER(A2;-1;0);0)+1
Enfin bon ce n'était pas la question.
Si vous pouviez mettre tout à droite de chaque feuille une concaténation du matricule et du N°Imp le plus simple serait d'y rechercher cette même combinaison et de restituer la section à la même ligne. Sinon je pourrais vous écrire une fonction personnalisée qui restitue l'information souhaitée.
À+
 

stef92230

XLDnaute Junior
Re : Mix entre recherchev et formule matricielle

Bonjour et merci pour vos réponses.
@ dugenou, j'ai testé, j'ai eu un #nom? ...!!??
@ Dranreb : je suis preneur de toute solution :) ... idem pour la colonne A si vous avez qqchose de moins moche ou même la retirer (s'il existe par exemple une façon de dire si on trouve 1 fois ce matricule = alimente la l'imputation 1, 2 fois ce matricule = alimente imputation 2,...

Merci par avance, Stef
 

Dugenou

XLDnaute Barbatruc
Re : Mix entre recherchev et formule matricielle

Stef,

il faut enlever les espaces qui se mettent dans les noms de plage et valider avec ctrl+maj+entrée
Code:
=SI(MAX((Compta!$B$2:$B$13=Récap!$A5)*(Compta!$A$2:$A$13=1))=0;"";INDEX(Compta!$D$1:$D$13;MAX((Compta!$B$2:$B$13=Récap!$A5)*(Compta!$A$2:$A$13=1)*(LIGNE(Compta!$B$2:$B$13)));))
pour l'imputation : =NB.SI($B$2:B2;B2) comme le propose Dranreb (que je salue !)
 

Pièces jointes

  • sections_xls.xls
    82 KB · Affichages: 84
  • sections_xls.xls
    82 KB · Affichages: 81
  • sections_xls.xls
    82 KB · Affichages: 81
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Mix entre recherchev et formule matricielle

Je vous ai fabriqué cette fonction à mettre dans un module ordinaire :
VB:
Function RechOcc(ByVal Arg As Variant, ByVal NuOcc As Long, ByVal PlageClé As Range, ByVal Restituer As Range) As Variant
Rem. 1) - Arg:       La valeur cherchée
'    2) - NuOcc :    Le numéro d'occurence  1: le premier, 2: le 2ième de ceux en double, 3: le 3ième des triples etc.
'    3) - PlageClé:  La plage dans laquelle l'argument Arg doit être recherché.
'    4) - Restituer: La colonne entière contenant l'information à la ligne trouvée à restituer.
Dim L As Long
On Error GoTo ÇaCoince
Do
   L = WorksheetFunction.Match(Arg, PlageClé, 0): If NuOcc = 1 Then Exit Do
   NuOcc = NuOcc - 1: Set PlageClé = PlageClé.Rows(L + 1).Resize(PlageClé.Rows.Count - L)
   Loop
RechOcc = Intersect(PlageClé.Rows(L).EntireRow, Restituer.EntireColumn).Value
Exit Function
ÇaCoince: Resume Bredouille
Bredouille: RechOcc = "": Exit Function
End Function
En W9 par exemple
Code:
=RechOcc($A9;DROITE(W$3;1);'HRV_GV IMPUTATIONS'!$B$2:$B$13;'HRV_GV IMPUTATIONS'!$E:$E)
renvoit "G205" sur cette seule ligne de la colonne
À+
 

Discussions similaires

Réponses
3
Affichages
528

Statistiques des forums

Discussions
312 505
Messages
2 089 070
Membres
104 016
dernier inscrit
Mokson