Microsoft 365 Synthese d'un tableau dont les lignes sont doublées

Bichette001

XLDnaute Junior
Bonjour je m'explique...
ColA. Col B. Col C
Domaine 1. Exigence1. Nb ok
Sous domaine A. Ss exigence 1. 1
Sous domaine A. Ss exigence 2. 1
Sous domaine A. Ss exigence 3. 1
Sous domaine B. Ss exigence a. 2
Sous domaine B. Ss exigence b. 2

Je voudrais faire un recap sur un autre tableau ds lequel il faut recuperer le sous domaine A mais sans le répéter sur 3 lignes
Sous domaine A.
Le tcd n'est pas la bonne solution car l'utilisateur devra saisir un numéro de priorité sur ce recap de manière à trier le tableau par numéro de priorité...

Si vous avez une formule simple pr récupérer tous les noms de domaine et sous domaine sans doublons cest top

Merci
Bichette
Sous domaine A
Sous domaine A
Sous domaine B
Sous domaine B
 

Bichette001

XLDnaute Junior
Bonjour à tous


Il faut que le tableau source soit sous forme de tableau...
Si lignes vides il faudra sans doute filter
Sinon se met à jour par Données, Actualiser tout (un clic) ou on peut prévoir une ligne de code : définir l'événement déclencheur de la MAJ auto
Merci , oui pour l'évènement déclencheur ce serait quitter la colonne sous domaine ou domaine.. j'enregistre une macro c'est ça ? je sais pas coder de mon côté
 

chris

XLDnaute Barbatruc
RE

Le tableau source est nommé Donnees (dans mon exemple du #15)

A placer dans le module de la feuille contenant la source
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, ListObjects("Donnees").ListColumns(1).DataBodyRange) Is Nothing And _
    Intersect(Target, ListObjects("Donnees").ListColumns(2).DataBodyRange) Is Nothing Then Exit Sub
    ThisWorkbook.RefreshAll
End Sub
 

Bichette001

XLDnaute Junior
Bonjour Cisco, je ne comprends pas la formule : =SI(C$2:C$16;LIGNE($2:$16);0) ?
px tu m'expliquer stp tte la formule que je sache la reproduire seule : =SIERREUR(INDEX(A$1:A$16;MIN(SI(SI(C$2:C$16;LIGNE($2:$16);0)>=EQUIV(INDEX(A$1:A$16&B$1:B$16;MAX(SI(A$2:A$16&B$2:B$16=J3&K3;LIGNE(A$2:A$16)))+1);A$1:A$16&B$1:B$16;0);LIGNE($2:$16))));"")
index pr trouver le numéro de colonne
equiv le numéro de la ligne mais tte l'imbrication, je ne saurais pas la refaire
merci ;-)
 

CISCO

XLDnaute Barbatruc
Bonjour

Essaye de comprendre l'ensemble en sélectionnant la formule, puis en passant par Formule --> Évaluation de formule. Cela donne cela :

SI(C$2:C$16;LIGNE($2:$16);0)
Dans C$2:C$16, tu n'as que des 0 et des 1, ce qui équivaut pour Excel à des FAUX et des VRAI. Seuls les 1 m'intéressent. Dans ce cas, Excel, renvoie le n° de la ligne correspondante.
Bichette1.JPG

Bichette2.JPG


Dans INDEX(A$1:A$16&B$1:B$16;MAX(SI(A$2:A$16&B$2:B$16=J2&K2;LIGNE(A$2:A$16)))+1) regardons la partie SI(A$2:A$16&B$2:B$16=J2&K2;LIGNE(A$2:A$16))
Dans ce cas, Excel renvoie aussi les n° de lignes contenant J2&K2 dans la concaténation des colonnes A et B.
On prend le MAX de ces n° de lignes (Autrement dit, on veut connaitre le n° de la dernière ligne contenant J2&K2 dans la concaténation des colonnes A et B).
On ajoute 1 à ce MAX, car les valeurs qui nous intéressent ne sont pas sur cette dernière ligne contenant J2&K2, mais sur les suivantes (Ce qui signifie que la formule ne fonctionne que si les données sont classées comme dans ton fichier exemple). Si on a domaine sous domaine, on cherche la position des 1&a qui se trouve forcément en dessous. Si on a 1&a, on cherche 1&b qui se trouve forcément en dessous. De plus, INDEX(...,0) poserait problème.
Bichette3.JPG
Bichette4.JPG

ce qui nous donne ici "domaine sous domaine". On a donc
Bichette5.JPG

...
Autrement dit, en simplifiant, la méthode consiste a trouver le n° de la ligne contenant un 1 en colonne C (les lignes avec des domaines sous domaines ayant un 0 en colonne C ne nous intéressent pas), juste après la dernière ligne contenant J2&K2 en concaténant les colonnes A et B.

@ plus

P.S : C'est peut-être plus compréhensible en analysant les résultats intermédiaires obtenus avec la formule dans J4, plutôt que J3.
On a dans J3, 1, et dans K3, a.
On cherche le dernier 1&a dans A&B. On le trouve ligne 4. Il faut donc que la formule nous renvoie la première ligne contenant un 1 en colonne C, supérieure ou égale à 5.
 
Dernière édition:

CISCO

XLDnaute Barbatruc
Bonjour

Comme les colonnes A et B sont classées, on peut faire un tout petit peu plus court :
* en écrivant les résultats attendus dans J3 et K3
* en remplaçant, dans les formules dans J4 et K4 MAX(SI(A$2:A$16&B$2:B$16=J3&K3;LIGNE(A$2:A$16)))+1) par EQUIV(J3&K3;A$1:A$16&B$1:B$16;1)+1, puis en tirant ces formules vers le bas

@ plus
 

Pièces jointes

  • synthèse excel testbis.xlsx
    10.8 KB · Affichages: 2

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16