Formule avec INDEX EQUIV

BChaly

XLDnaute Occasionnel
Bonsoir,

Je souhaite extraire sur une feuille "Résultat" une liste de noms se trouvant sur une feuille "Données",
à condition que ces derniers correspondent à une référence qui se termine par "A", "B", "C".

La formule que j'ai testée en "B2" ne fonctionne que pour la première référence.

Code:
{=IF(ISERROR(INDEX(Données!$C$2:$C$25;MATCH(A2;IF(Données!B2:B25="C-1-B";Données!A2:A25);0)));"";INDEX(Données!$C$2:$C$25;MATCH(A2;IF(Données!B2:B25="C-1-B";Données!A2:A25);0)))}

Merci pour votre aide.

Cordialement

BChaly
 

Pièces jointes

  • Test_Index.xlsx
    11 KB · Affichages: 43

R@chid

XLDnaute Barbatruc
Re : Formule avec INDEX EQUIV

Bonsoir,
je ne comprends pas le critère du tri.
en B2 :
Code:
=SIERREUR(INDEX(Données!C$2:C$25;PETITE.VALEUR(SI(CODE(DROITE(Données!B$2:B$25))<=67;LIGNE(INDIRECT("1:"&LIGNES(Données!B$2:B$25))));LIGNES($2:2)));"")
@ valider par Ctrl+Shift+Enter
@ tirer vers le bas


@ + +
 

BChaly

XLDnaute Occasionnel
Re : Formule avec INDEX EQUIV

Bonjour R@chid,

Merci d'étudier ma question.

En fait je souhaite reporter tous les noms figurant dans le tableau de la feuille "Données" (colonne "C"),
dans la feuille "Résultat" (colonne "B"), si ces noms correspondent à une valeur de la colonne "B" qui se
terminent par A, B, C, dans la feuille "Données".

Merci pour votre aide.

BChaly

Cordialement
 

job75

XLDnaute Barbatruc
Re : Formule avec INDEX EQUIV

Bonjour BChaly, R@chid, le forum,

Même en VBA ce n'est pas très facile :

Code:
Function TriFiltre(t, liste$, colref%, coltri%, colrestit%)
Dim i&, n&, a(), b()
t = t 'matrice, plus rapide
For i = 1 To UBound(t)
  If InStr(liste, Right(t(i, colref), 1)) Then
    n = n + 1
    ReDim Preserve a(1 To n): ReDim Preserve b(1 To n)
    a(n) = t(i, coltri)
    b(n) = t(i, colrestit)
  End If
Next
tri a, b, 1, UBound(a)
TriFiltre = b 'vecteur ligne
End Function

Sub tri(a, b, gauc, droi)     ' Quick sort (2 colonnes triées)
Dim ref, g, d, temp
ref = a((gauc + droi) \ 2) & b((gauc + droi) \ 2)
g = gauc: d = droi
Do
    Do While a(g) & b(g) < ref: g = g + 1: Loop
    Do While ref < a(d) & b(d): d = d - 1: Loop
    If g <= d Then
      temp = a(g): a(g) = a(d): a(d) = temp
      temp = b(g): b(g) = b(d): b(d) = temp
      g = g + 1: d = d - 1
    End If
Loop While g <= d
If g < droi Then Call tri(a, b, g, droi)
If gauc < d Then Call tri(a, b, gauc, d)
End Sub
J'ai aménagé la macro Quick sort pour trier à la fois sur 2 colonnes.

Tirer les formules en A2 et B2 vers le bas jusqu'à rencontrer des valeurs d'erreur, ou utiliser SIERREUR.

Fichier joint.

A+
 

Pièces jointes

  • Test_Index(1).xls
    67.5 KB · Affichages: 25
Dernière édition:

job75

XLDnaute Barbatruc
Re : Formule avec INDEX EQUIV

Re,

Sur un grand tableau il sera beaucoup plus rapide d'utiliser une procédure Sub :

Code:
Private Sub Worksheet_Activate()
Dim t, liste$, colref%, coltri%, colrestit%, i&, n&, a()
t = Sheets("Données").[A1].CurrentRegion 'matrice, plus rapide
liste = "ABC"
colref = 2: coltri = 1: colrestit = 3
For i = 1 To UBound(t)
  If InStr(liste, Right(t(i, colref), 1)) Then
    n = n + 1
    ReDim Preserve a(1 To 2, 1 To n)
    a(1, n) = t(i, coltri)
    a(2, n) = t(i, colrestit)
  End If
Next
If n Then
  '---transposition---
  ReDim t(1 To n, 1 To 2)
  For i = 1 To n
    t(i, 1) = a(1, i): t(i, 2) = a(2, i)
  Next
  '---restitution---
  Application.ScreenUpdating = False
  [A2].Resize(n, 2) = t
  [A2].Resize(n, 2).Sort [A2], xlAscending, [B2], , xlAscending, Header:=xlNo
End If
Range("A" & n + 2 & ":B" & Rows.Count).Delete xlUp
End Sub
La macro se déclenche quand on active la feuille "Résultat".

Il est plus simple de trier directement le tableau dans la feuille.

Fichier (2).

A+
 

Pièces jointes

  • Test_Index(2).xls
    66.5 KB · Affichages: 23
Dernière édition:

job75

XLDnaute Barbatruc
Re : Formule avec INDEX EQUIV

Re,

Une solution par formule matricielle dans le fichier joint.

Les résultats en colonne A sont triés mais contrairement aux apparences ils ne le sont pas en colonne B.

A+
 

Pièces jointes

  • Test_Index par formules(1).xls
    53.5 KB · Affichages: 34

BChaly

XLDnaute Occasionnel
Re : Formule avec INDEX EQUIV

Bonsoir job75,

Merci, Merci et Merci pour ces trois solutions qui fonctionnent à merveille!!!

Ma demande était compliquée, mais rien n'arrête un magicien comme vous!!!

Le deuxième code est fantastique. Quant à la solution par formule, je vais maintenant m'en inspirer
pour créer des formules en définissant des noms.

Encore une fois Merci pour votre aide.

Cordialement,

BChaly
 

Statistiques des forums

Discussions
312 338
Messages
2 087 397
Membres
103 536
dernier inscrit
komivi