Compilation complète de la conversation
1. [Demande initiale] L'utilisateur souhaite créer une formule pour calculer la dernière localisation d'un item dans deux
tableaux Excel distincts en fonction de la date la plus récente. Il veut utiliser les données "code", "nom", "qty", "location",
et "date" pour chaque item. La solution initiale proposait une formule pour combiner deux tableaux, mais l'utilisateur
souhaite traiter les tableaux séparément.
Solution initiale :
Formule combinée avec la fonction MAX et SI :
=IF(
MAX(SI(Tableau1!A:A=B10, Tableau1!E:E), SI(Tableau2!A:A=B10, Tableau2!E:E))
= MAX(SI(Tableau1!A:A=B10, Tableau1!E:E)),
INDEX(Tableau1!D:D, MATCH(MAX(SI(Tableau1!A:A=B10, Tableau1!E:E)), Tableau1!E:E, 0)),
INDEX(Tableau2!D:D, MATCH(MAX(SI(Tableau2!A:A=B10, Tableau2!E:E)), Tableau2!E:E, 0))
2. [Erreur et modifications] L'utilisateur reçoit une erreur car Excel ne peut pas interpréter correctement certaines parties
de la formule, notamment les références à purshase_tbl et selling_tbl3.
Formule adaptée (après correction des références des tableaux) :
=IF(
MAX(
SI(purshase_tbl[Part Number]=B10, purshase_tbl[Date]),
SI(selling_tbl3[Part Number]=B10, selling_tbl3[Date])
) = MAX(SI(purshase_tbl[Part Number]=B10, purshase_tbl[Date])),
INDEX(purshase_tbl[Location], MATCH(MAX(SI(purshase_tbl[Part Number]=B10, purshase_tbl[Date])),
purshase_tbl[Date], 0)),
INDEX(selling_tbl3[Location], MATCH(MAX(SI(selling_tbl3[Part Number]=B10, selling_tbl3[Date])), selling_tbl3[Date],
0))
3. [Utilisation de [Link]] Pour simplifier la formule et résoudre le problème, une suggestion d'utilisation de
[Link] est proposée.
Formule utilisant [Link] :
=SI(
MAX([Link](purshase_tbl[Date], purshase_tbl[Part Number], B10), [Link](selling_tbl3[Date],
selling_tbl3[Part Number], B10))
= [Link](purshase_tbl[Date], purshase_tbl[Part Number], B10),
INDEX(purshase_tbl[Location], EQUIV([Link](purshase_tbl[Date], purshase_tbl[Part Number], B10),
purshase_tbl[Date], 0)),
INDEX(selling_tbl3[Location], EQUIV([Link](selling_tbl3[Date], selling_tbl3[Part Number], B10),
selling_tbl3[Date], 0))
4. [Ajout d'une barre de recherche avec filtrage] L'utilisateur souhaite ajouter une barre de recherche pour filtrer les
lignes du tableau en fonction de la donnée saisie dans une cellule spécifique.
Macro VBA pour barre de recherche :
Private Sub txtSearch_Change()
Dim ws As Worksheet
Dim tableau As ListObject
Dim critereRecherche As String
' Définir la feuille et le tableau
Set ws = [Link]("Feuil1")
Set tableau = [Link]("NomTableau")
' Récupérer la valeur saisie dans la zone de texte
critereRecherche = [Link]
' Si la barre de recherche est vide, supprimer les filtres
If critereRecherche = "" Then
[Link] Field:=1
Else
[Link] Field:=1, Criteria1:="*" & critereRecherche & "*"
End If
End Sub
5. [Ajout d'un menu déroulant pour sélectionner la colonne à filtrer] L'utilisateur souhaite ensuite ajouter un menu
déroulant à côté de la barre de recherche pour choisir la colonne dans laquelle appliquer le filtre.
Code VBA pour le menu déroulant avec barre de recherche :
Private Sub txtSearch_Change()
Dim ws As Worksheet
Dim tableau As ListObject
Dim critereRecherche As String
Dim colonneChoisie As String
Dim colonneFiltre As Long
' Définir la feuille et le tableau
Set ws = [Link]("Feuil1")
Set tableau = [Link]("NomTableau")
' Récupérer la valeur saisie dans la zone de texte
critereRecherche = [Link]
' Récupérer le critère de colonne choisi dans la ComboBox
colonneChoisie = [Link]
' Assigner le numéro de colonne en fonction du critère sélectionné
Select Case colonneChoisie
Case "Col1"
colonneFiltre = 1
Case "Col2"
colonneFiltre = 2
Case "Col3"
colonneFiltre = 3
Case Else
colonneFiltre = 1
End Select
' Si la barre de recherche est vide, supprimer les filtres
If critereRecherche = "" Then
[Link] Field:=colonneFiltre
Else
[Link] Field:=colonneFiltre, Criteria1:="*" & critereRecherche & "*"
End If
End Sub