XL 2021 Question index/equiv

Franck_77

XLDnaute Nouveau
Bonjour,

J'ai eu beau tester dans tous les sens des recherchv etc... regarder les exemples des précédents post sur le forum, questionner notre ami gpt... je ne parviens pas à la bonne formule pour récupérer des données croisées. Je vois qu'on parle parfois de matrice, mais ça ne me parle pas.

Dans le fichier exemple joint, je cherche une formule pour la cellule A3 et les suivantes (A4, A5 etc...) de la feuille Récap, afin de récupérer la liste des noms de la colonne C de la feuille Données s'ils sont inscrits avec un 0 ou un 1 renseigné dans la colonne de la date correspondant à la cellule A1 de la feuille Récap.

Si vous avez une idée, pour que lorsque la date renseignée change, la liste se mette à jour en fonction.


Merci de votre aide 🙏
 

Pièces jointes

  • Test données.xlsx
    22.2 KB · Affichages: 5
Solution
Bonjour Franck_77, le forum,
Cela doit fonctionner sur Office 365 également ?
Bien sûr, et comme je l'ai dit la validation matricielle n'est pas nécessaire.

Maintenant on peut se servir du fait que dans la feuille "Données" le tableau est structuré.

S'il se nomme bien Tableau4 entrez en Récap!A3 la formule :
Code:
=SIERREUR(INDEX(Tableau4[NOM Prénom];PETITE.VALEUR(SI(ESTNUM(DECALER(Tableau4;;EQUIV(A$1;--Tableau4[#En-têtes];0)-1;;1));LIGNE(Tableau4)-LIGNE(Tableau4[#En-têtes]));LIGNE(A1)));"")
Le tableau Tableau4 peut être déplacé sans inconvénient.

A+

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Franck,
Un essai en PJ avec cette macro qui s'exécute automatiquement lorsqu'on change la date en Récap A1 :
VB:
Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Fin: If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, [A1]) Is Nothing Then
        Application.ScreenUpdating = False
        Application.EnableEvents = False
        [A3:A1000].ClearContents: Ligne = 3
        T = Sheets("Données").[A1].CurrentRegion
        For i = 4 To UBound(T, 2)
            If CDate(T(1, i)) = Target Then Colonne = i: Exit For
        Next i
        For i = 2 To UBound(T, 1)
            If Not IsEmpty(T(i, Colonne)) Then
                Cells(Ligne, "A") = T(i, 3)
                Ligne = Ligne + 1
            End If
        Next i
    End If
Fin:
Application.EnableEvents = True
End Sub

s'ils sont inscrits avec un 0 ou un 1
J'ai traduit par "non vide", ou est ce qu'il ne faut prendre que 0 et 1 ?
 

Pièces jointes

  • Test données (2).xlsm
    28.1 KB · Affichages: 1

Franck_77

XLDnaute Nouveau
Bonjour Sylvanu,
Merci pour ta proposition rapide 😇

Non vide convient très bien, c'est ça.
Là on passe par du vba/macro ; est-ce possible de le faire avec des formules, pour éviter les problèmes de sécurité avec les macros pour les utilisateurs ?
 

job75

XLDnaute Barbatruc
Bonsoir Franck_77, sylvanu,

Formule (matricielle) en Récap!A3 :
Code:
=SIERREUR(INDEX(Données!C:C;PETITE.VALEUR(SI(ESTNUM(DECALER(Données!A$2:A$1000;;EQUIV(A$1;--Données!$1:$1;0)-1));LIGNE(Données!A$2:A$1000));LIGNE(A1)));"")
Sur Excel 2021 la validation matricielle par Ctrl+Maj+Entrée n'est plus nécessaire.

La référence A$1000 est à adapter à la dimension maximum du tableau.

A+
 

Pièces jointes

  • Test données.xlsx
    22.8 KB · Affichages: 4

job75

XLDnaute Barbatruc
Bonjour Franck_77, le forum,
Cela doit fonctionner sur Office 365 également ?
Bien sûr, et comme je l'ai dit la validation matricielle n'est pas nécessaire.

Maintenant on peut se servir du fait que dans la feuille "Données" le tableau est structuré.

S'il se nomme bien Tableau4 entrez en Récap!A3 la formule :
Code:
=SIERREUR(INDEX(Tableau4[NOM Prénom];PETITE.VALEUR(SI(ESTNUM(DECALER(Tableau4;;EQUIV(A$1;--Tableau4[#En-têtes];0)-1;;1));LIGNE(Tableau4)-LIGNE(Tableau4[#En-têtes]));LIGNE(A1)));"")
Le tableau Tableau4 peut être déplacé sans inconvénient.

A+
 

Pièces jointes

  • Test données.xlsx
    22.8 KB · Affichages: 3

Discussions similaires

Réponses
5
Affichages
274
Réponses
2
Affichages
117

Statistiques des forums

Discussions
312 211
Messages
2 086 295
Membres
103 171
dernier inscrit
clemm