Autres [Résolu] Excel 2024 : Regrouper racine nom en un seul nom

  • Initiateur de la discussion Initiateur de la discussion kdet
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

kdet

XLDnaute Occasionnel
Bonjour à tous, le forum,

J'aurai besoin de votre aide svp. J'utilise Excel 2024 LTSC. j'ai utilisé cette formule en A2 qui est un peu longue désolé :

"=CHOISIR({1.2.3.4.5.6}; UNIQUE(TblSaisieFactures[FOURNISSEURS]); SOMME.SI.ENS(TblSaisieFactures[MONTANT]; TblSaisieFactures[FOURNISSEURS]; UNIQUE(TblSaisieFactures[FOURNISSEURS]) & "*"; TblSaisieFactures[DATE]; ">="&DATE(B$1;1;1); TblSaisieFactures[DATE]; "<="&DATE(B$1;12;31)); SOMME.SI.ENS(TblSaisieFactures[MONTANT]; TblSaisieFactures[FOURNISSEURS]; UNIQUE(TblSaisieFactures[FOURNISSEURS]) & "*"; TblSaisieFactures[DATE]; ">="&DATE(C$1;1;1); TblSaisieFactures[DATE]; "<="&DATE(C$1;12;31)); SOMME.SI.ENS(TblSaisieFactures[MONTANT]; TblSaisieFactures[FOURNISSEURS]; UNIQUE(TblSaisieFactures[FOURNISSEURS]) & "*"; TblSaisieFactures[DATE]; ">="&DATE(D$1;1;1); TblSaisieFactures[DATE]; "<="&DATE(D$1;12;31)); SOMME.SI.ENS(TblSaisieFactures[MONTANT]; TblSaisieFactures[FOURNISSEURS]; UNIQUE(TblSaisieFactures[FOURNISSEURS]) & "*"; TblSaisieFactures[DATE]; ">="&DATE(E$1;1;1); TblSaisieFactures[DATE]; "<="&DATE(E$1;12;31)); SOMME.SI.ENS(TblSaisieFactures[MONTANT]; TblSaisieFactures[FOURNISSEURS]; UNIQUE(TblSaisieFactures[FOURNISSEURS]) & "*"; TblSaisieFactures[DATE]; ">="&DATE(F$1;1;1); TblSaisieFactures[DATE]; "<="&DATE(F$1;12;31)))"

Dans mon fichier joint, colonne H et I, par quelle formule peut-on regrouper les fournisseurs qui ont les mêmes racines et de l'inclure dans la formule ci-dessus?

Vous remerciant par avance de votre aimable collaboration.

kdet
 

Pièces jointes

Bonsoir kdet, le forum,

Pas trop compris ce que vous voulez faire mais voici une solution VBA avec filtrage par liste de validation, le code de la feuille :
VB:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Range("H2:H" & Rows.Count).ClearContents 'RAZ
If Intersect(Target, UsedRange(1)) Is Nothing Then Exit Sub
Dim d As Object, tablo, i&, s
Set d = CreateObject("Scripting.Dictionary")
tablo = [A1].CurrentRegion
For i = 3 To UBound(tablo)
    s = Split(tablo(i, 1))
    If UBound(s) > -1 Then d(UCase(s(0))) = ""
Next i
If d.Count = 0 Then Exit Sub
With [H2].Resize(d.Count)
    .Value = Application.Transpose(d.keys) 'Transpose est limitée à 65536 lignes
    .Sort .Cells, xlAscending, Header:=xlNo 'tri alphabétique
    .Name = "Liste"
End With
'---liste de validation---
[A1].Validation.Delete
[A1].Validation.Add xlValidateList, Formula1:="=Liste"
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [A1]) Is Nothing Then [A1].CurrentRegion.Offset(1).AutoFilter 1, [A1] & "*" 'filtre automatique
End Sub
Masquez la colonne H.

A+
Re-bonjour job75, le forum,

Merci pour la version macro. mais comment l'intégrer dans mon fichier joint

kdet
 

Pièces jointes

C'est vrai qu'elle est récente mais Microsoft l'indique comme disponible pour 2024
msedge_kEatgHEJrW.png


 
Au vu des données, et des "racines", j'ai bien peur qu'un "Fractionner.Texte" ne soit 100% compatible...
Je ne prend que le 1er, la "racine", les autres étages j'ignore (en attente d'infos contradictoires de kdet)
@Hecatonchire comment vous retrouvez les colonnes qui manquent DATE et MONTANT dans le tableau qui manque lui aussi ?
J'ai fais preuve d'imagination 😁

@kdet

Une version sans PIVOTER (attention en terme de performances !)

=LET(mfs;INDEX(FRACTIONNER.TEXTE(TblSaisieFactures[FOURNISSEURS];" ");;1);
mf;TRIER(UNIQUE(mfs));
mas;SIERREUR(ANNEE(TblSaisieFactures[DATE]);1900);
ma;TRIER(UNIQUE(mas));
smt;MAKEARRAY(NBVAL(mf);NBVAL(ma);
LAMBDA(l;c;SOMME(TblSaisieFactures[MONTANT]*(mas=INDEX(ma;c))*(mfs=INDEX(mf;l)))
));
ASSEMB.H(ASSEMB.V("";mf);ASSEMB.V(TRANSPOSE(ma);smt)))
 
La version avec TCD et ajout d'une colonne pour récupérer la partie gauche du nom du fournisseur (ce qui ne donne pas un résultat correct, mais à moins de faire un tableau de correspondance ça me semble la seule solution)

Edit, pour pouvoir regrouper les années j'ai du modifié mettre des dates là où elle manquait et corriger celles qui sont invalides
2026-02-27_22-55-28.png
 

Pièces jointes

Dernière édition:
Je ne prend que le 1er, la "racine", les autres étages j'ignore (en attente d'infos contradictoires de kdet)

J'ai fais preuve d'imagination 😁

@kdet

Une version sans PIVOTER (attention en terme de performances !)

=LET(mfs;INDEX(FRACTIONNER.TEXTE(TblSaisieFactures[FOURNISSEURS];" ");;1);
mf;TRIER(UNIQUE(mfs));
mas;SIERREUR(ANNEE(TblSaisieFactures[DATE]);1900);
ma;TRIER(UNIQUE(mas));
smt;MAKEARRAY(NBVAL(mf);NBVAL(ma);
LAMBDA(l;c;SOMME(TblSaisieFactures[MONTANT]*(mas=INDEX(ma;c))*(mfs=INDEX(mf;l)))
));
ASSEMB.H(ASSEMB.V("";mf);ASSEMB.V(TRANSPOSE(ma);smt)))
@Hecatonchire, le forum,

Merci pour ta contribution malgré la complexité de ma première formule, comme disait @Nain porte quoi, tu as pu la réduire avec la combinaison de LET, TRIER, LAMBDA, ASSEMBLER.H et ASSEMBLER.V

Kdet
 
La version avec TCD et ajout d'une colonne pour récupérer la partie gauche du nom du fournisseur (ce qui ne donne pas un résultat correct, mais à moins de faire un tableau de correspondance ça me semble la seule solution)

Edit, pour pouvoir regrouper les années j'ai du modifié mettre des dates là où elle manquait et corriger celles qui sont invalides
Regarde la pièce jointe 1228201
@Nain porte quoi , le forum,

D'après les remarques faites par @Cousinhub , je devrais revoir ma base car il y a effectivement un surplus d'espace, des cellules vides dans la colonne DATE.

Merci pour ton retour,
Kdet
 
Bonjour kdet, le forum,

J'ai ouvert votre fichier du post #16 et je vois que le problème est très simple et se résout facilement par formules.

1) Dans la feuille "Base Factures" j'ai ajouté les 2 colonnes RACINE et ANNEE, les formules sont évidentes.

2) Dans la feuille "RECAPITUL" formule matricielle en A2 :
Code:
=SIERREUR(INDEX('Base Factures'!D:D;PETITE.VALEUR(SI(NON(NB.SI(A$1:A1;TblSaisieFactures[RACINE]));LIGNE(TblSaisieFactures));1));"")
En effet ma version Excel n'a pas la fonction UNIQUE.

3) Dans la feuille "RECAPITUL" formule normale en B2 à tirer vers la droite et le bas :
Code:
=SOMME.SI.ENS(TblSaisieFactures[[MONTANT]:[MONTANT]];TblSaisieFactures[[RACINE]:[RACINE]];$A2;TblSaisieFactures[[ANNEE]:[ANNEE]];--B$1)
Les références des colonnes sont doublées pour ne pas s'incrémenter quand on tire vers la droite.

Au cas où les années en ligne 1 seraient des textes, j'ai mis 2 tirets -- pour les convertir en nombres.

A+
 

Pièces jointes

Bonjour kdet, le forum,

J'ai ouvert votre fichier du post #16 et je vois que le problème est très simple et se résout facilement par formules.

1) Dans la feuille "Base Factures" j'ai ajouté les 2 colonnes RACINE et ANNEE, les formules sont évidentes.

2) Dans la feuille "RECAPITUL" formule matricielle en A2 :
Code:
=SIERREUR(INDEX('Base Factures'!D:D;PETITE.VALEUR(SI(NON(NB.SI(A$1:A1;TblSaisieFactures[RACINE]));LIGNE(TblSaisieFactures));1));"")
En effet ma version Excel n'a pas la fonction UNIQUE.

3) Dans la feuille "RECAPITUL" formule normale en B2 à tirer vers la droite et le bas :
Code:
=SOMME.SI.ENS(TblSaisieFactures[[MONTANT]:[MONTANT]];TblSaisieFactures[[RACINE]:[RACINE]];$A2;TblSaisieFactures[[ANNEE]:[ANNEE]];--B$1)
Les références des colonnes sont doublées pour ne pas s'incrémenter quand on tire vers la droite.

Au cas où les années en ligne 1 seraient des textes, j'ai mis 2 tirets -- pour les convertir en nombres.

A+
Bonjour job75, le forum,

Je vous remercie de votre collaboration.
J'ai dû réctifier ma base avec les espaces en surplus et les dates vides et j'ai adapté vos formules avec. Tout va à merveille.
Encore encore à toi, le forum.
kdet
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Retour