=SIERREUR(SI(ESTNUM(EQUIV($D3;$B$3:$B$14;0));INDEX($A$3:$A$14;PETITE.VALEUR(SI($B$3:$B$14=$D3;LIGNE($B$3:$B$14)-2);COLONNES($A:A)));SI(ESTNUM(EQUIV($D3;$C$3:$C$14;0));INDEX($A$3:$A$14;PETITE.VALEUR(SI($C$3:$C$14=$D3;LIGNE($C$3:$C$14)-2);COLONNES($A:A)));""));"")
Private Sub Worksheet_Change(ByVal Target As Range)
Dim P As Range, d As Object, tablo, i&, x$
Set P = Intersect(Range("D3:E" & Rows.Count), UsedRange)
If P Is Nothing Then Exit Sub
Set d = CreateObject("Scripting.Dictionary")
tablo = [A2].CurrentRegion.Resize(, 3) 'matrice, plus rapide
For i = 2 To UBound(tablo)
x = tablo(i, 2)
If x <> "" Then d(x) = d(x) & Chr(1) & tablo(i, 1)
x = tablo(i, 3)
If x <> "" Then d(x) = d(x) & Chr(1) & tablo(i, 1)
Next
tablo = P 'matrice, plus rapide
For i = 1 To UBound(tablo)
x = tablo(i, 1)
If d.exists(x) Then tablo(i, 2) = Mid(d(x), 2) Else tablo(i, 2) = ""
Next
'---restitution---
Application.ScreenUpdating = False
Application.EnableEvents = False 'désactive les évènements
P.Resize(, Columns.Count - P.Column + 1).ClearContents 'RAZ
P = tablo
P.Columns(2).TextToColumns P.Columns(2), xlDelimited, Other:=True, OtherChar:=Chr(1) 'commande Convertir
Application.EnableEvents = True 'réactive les évènements
End Sub
JHA bonjour j ai donc essaye le fichier comme je disais ca fonctionne mais j ai quelque soucisBonjour à tous,
Un essai à essayer en "E3" sous excel 2007 avec cette formule matricielle.
Valider par Ctrl+Maj+EntréeVB:=SIERREUR(SI(ESTNUM(EQUIV($D3;$B$3:$B$14;0));INDEX($A$3:$A$14;PETITE.VALEUR(SI($B$3:$B$14=$D3;LIGNE($B$3:$B$14)-2);COLONNES($A:A)));SI(ESTNUM(EQUIV($D3;$C$3:$C$14;0));INDEX($A$3:$A$14;PETITE.VALEUR(SI($C$3:$C$14=$D3;LIGNE($C$3:$C$14)-2);COLONNES($A:A)));""));"")
JHA
=SIERREUR(SI(ESTNUM(EQUIV($M3;$C$6:$C$500;0));INDEX($A$6:$A$500;PETITE.VALEUR(SI(($C$6:$C$500=$M3)*($B$6:$B$500=1);LIGNE($C$6:$C$500)-5);COLONNES($A:A)));SI(ESTNUM(EQUIV($M3;$D$6:$D$500;0));INDEX($A$6:$A$500;PETITE.VALEUR(SI(($D$6:$D$500=$M3)*($B$6:$B$500=1);LIGNE($D$6:$D$500)-5);COLONNES($A:A)));""));"")
bonjour JHA je n ai pas utilise la dernière version envoyé je suis reste sur la précédente par contre pour la ligne 6 avec-5 ça ne marche pas je dois rester sur la ligne 3
j ai encore une question comment peut on transformer cette formule de Excel 365 en Excel 2007
=SIERREUR(TRANSPOSE(FILTRE($A$3:$A$20;($B$3:$B$20=B3)*($C$3:$C$20=C3)*($A$3:$A$20<>A3));"")
d avance merci
phv62
bonjour jhaBonjour à tous,
Peux-tu mettre le fichier qui te pose problème?
la formule index proposée devrait te donner le bon résultat.
JHA
bonjour job 75Bonsoir,
Curieux que vous n'ayez pas accusé réception de mon post #5.
Le fichier fonctionne pourtant sur toutes versions Excel.
A+
Private Sub Worksheet_Change(ByVal Target As Range)
Dim P As Range, d As Object, tablo, i&, x$, resu()
Set P = Intersect(Range("A6:M" & Rows.Count), UsedRange.EntireRow)
If P Is Nothing Then Exit Sub
Set d = CreateObject("Scripting.Dictionary")
tablo = P.Resize(, 13) 'matrice, plus rapide
For i = 1 To UBound(tablo)
x = tablo(i, 3)
If x <> "" Then d(x) = d(x) & Chr(1) & tablo(i, 1)
x = tablo(i, 4)
If x <> "" Then d(x) = d(x) & Chr(1) & tablo(i, 1)
Next
ReDim resu(1 To UBound(tablo), 1 To 1)
For i = 1 To UBound(tablo)
x = tablo(i, 13) 'colonne M
If d.exists(x) Then resu(i, 1) = Mid(d(x), 2)
Next
'---restitution---
Application.ScreenUpdating = False
Application.EnableEvents = False 'désactive les évènements
P.Columns(26).Resize(, Columns.Count - 25).ClearContents 'RAZ
P.Columns(26) = resu
P.Columns(26).TextToColumns P.Columns(26), xlDelimited, Other:=True, OtherChar:=Chr(1) 'commande Convertir
Application.EnableEvents = True 'réactive les évènements
End Sub
Bonjour job75Bonjour PHV62, salut Bruno,
Vous vous êtes enfin intéressé.
Il suffit de modifier un peu la macro pour traiter les nouvelles colonnes :
A+VB:Private Sub Worksheet_Change(ByVal Target As Range) Dim P As Range, d As Object, tablo, i&, x$, resu() Set P = Intersect(Range("A6:M" & Rows.Count), UsedRange.EntireRow) If P Is Nothing Then Exit Sub Set d = CreateObject("Scripting.Dictionary") tablo = P.Resize(, 13) 'matrice, plus rapide For i = 1 To UBound(tablo) x = tablo(i, 3) If x <> "" Then d(x) = d(x) & Chr(1) & tablo(i, 1) x = tablo(i, 4) If x <> "" Then d(x) = d(x) & Chr(1) & tablo(i, 1) Next ReDim resu(1 To UBound(tablo), 1 To 1) For i = 1 To UBound(tablo) x = tablo(i, 13) 'colonne M If d.exists(x) Then resu(i, 1) = Mid(d(x), 2) Next '---restitution--- Application.ScreenUpdating = False Application.EnableEvents = False 'désactive les évènements P.Columns(26).Resize(, Columns.Count - 25).ClearContents 'RAZ P.Columns(26) = resu P.Columns(26).TextToColumns P.Columns(26), xlDelimited, Other:=True, OtherChar:=Chr(1) 'commande Convertir Application.EnableEvents = True 'réactive les évènements End Sub