Microsoft 365 Cherche a dupliquer des lignes en fonction d'un nombre indépendant sans macro

Naya.05

XLDnaute Nouveau
Bonjour,
Je suis à la recherche d'une fonction me permettant de remplir les colonnes d'un tableau avec plusieurs lignes ayant la même valeur.
Je m'explique : j'ai un tableau avec des entrées (à droite sur l'exemple fourni) et je souhaite remplir le tableau de gauche qui existe déjà mais est vide.
J'ai besoin que ce tableau se mette à jour quand je change les valeurs du premier tableau.
Pour le remplir, il faut écrire plusieurs fois la même occurrence en fonction du nombre correspondant dans le tableau de droite.
J'aimerais faire cela sans utiliser de macros car je ne sais pas les utiliser.
J'espère que mon explication est suffisamment claire...

Pouvez vous m'aider ?
Un grand merci d'avance,
 

Pièces jointes

  • Exemple.xlsx
    12 KB · Affichages: 13

vgendron

XLDnaute Barbatruc
bonjour
sans macro, je ne sais pas faire

mais avec macro ca donne ca: il te suffit de cliquer sur le bouton

PS: j'ai transformé ton tableau "initial" en Table Structurée que j'ai nommée "t_Entrée"

l'avantage, tu peux ajouter des lignes et des colonnes, la macro fonctionnera encore

pour aller voir le code de la macro
1) ouvrir l'éditeur VBA: Alt +F11
et regarde le code: j'ai mis des commentaires pour expliquer ce que ca fait..
 

Pièces jointes

  • Exemple (1).xlsm
    22.4 KB · Affichages: 1

crocrocro

XLDnaute Impliqué
Bonjour le fil,
une proposition sans VBA
J'ai Excel 2016, avec 365, on doit faire plus simple, car ici si on ajoute des lignes dans le tableau en entrée, il faut rajouter autant de si dans la formule.
En B2 : =I2 propagée sur C et D
en B3 : =SI($A3<=I$7;B$2&SI($A3<=SOMME(I$3:I$3);$H$3;SI($A3<=SOMME(I$3:I$4);$H$4;SI($A3<=SOMME(I$3:I$5);$H$5;$H$6)));"") propagée sur colonne C et D et lignes 22
En I7 : = =SOMME(I3:I6) propagée sur J, K

1732015462025.png
 

Efgé

XLDnaute Barbatruc
Bonjour à tous
Une proposition qui demande à être améliorée.
Je crée une table digne de ce nom avec Power Query et j'utilise des formules pour créer le tableau final.

Je pense que l'on peut aller jusqu'au bout uniquement avec Power Query, mais je bloque...
Cordialement
 

Pièces jointes

  • Exemple (23).xlsx
    23.5 KB · Affichages: 1

crocrocro

XLDnaute Impliqué
Une petite amélioration en pj à ma proposition post 4 toujours sans macro :
En B2 : =I2 propagée sur C et D
en B3 : =SI($A3<=I$7;B$2&SI($A3<=SOMME(I$3:I$3);$H$3;SI($A3<=SOMME(I$3:I$4);$H$4;SI($A3<=SOMME(I$3:I$5);$H$5;$H$6)));"") propagée sur colonne C et D et lignes 22
En I7 : = =SOMME(I3:I6) propagée sur J, K
Utilisation d'une MFC pour avoir un contour gras pour les valeurs identiques (ce qui est dans le fichier initial).
Tout d'abord : B3 : C22 avec bordures en Gras
Créer la MFC suivante
1732017153169.png

1732017194869.png


1732017009021.png
 

Pièces jointes

  • DupliquerLigne crocrocro.xlsx
    15.7 KB · Affichages: 2

vgendron

XLDnaute Barbatruc
hello @Efgé
je suis un peu comme toi, je bloque

sur ta solution, j'ai ajouté deux étapes..
mais il manque le développement des 3 tables sur les 3 colonnes

VB:
let
    Source = Excel.CurrentWorkbook(){[Name="Tableau1"]}[Content],
    #"Type modifié" = Table.TransformColumnTypes(Source,{{"index", Int64.Type}, {"A", Int64.Type}, {"B", Int64.Type}, {"C", Int64.Type}}),
    #"Supprimer le tableau croisé dynamique des autres colonnes" = Table.UnpivotOtherColumns(#"Type modifié", {"index"}, "Attribut", "Valeur"),
    #"Personnalisée ajoutée" = Table.AddColumn(#"Supprimer le tableau croisé dynamique des autres colonnes", "Personnalisé", each List.Repeat({""}, [Valeur])),
    #"Personnalisé développé" = Table.ExpandListColumn(#"Personnalisée ajoutée", "Personnalisé"),
    #"Colonne fusionnée insérée" = Table.AddColumn(#"Personnalisé développé", "Fusionné", each Text.Combine({[Attribut], Text.From([index], "fr-FR")}), type text),
    #"Colonnes supprimées" = Table.RemoveColumns(#"Colonne fusionnée insérée",{"Personnalisé", "Valeur", "index"}),
    #"Lignes groupées" = Table.Group(#"Colonnes supprimées", {"Attribut"}, {{"Nombre", each _, type table [Attribut=text, Fusionné=text]}}),
    #"Table transposée" = Table.Transpose(#"Lignes groupées")
in
    #"Table transposée"
 

job75

XLDnaute Barbatruc
Bonjour Naya.05 et les autres,

Voyez le fichier .xlsm joint et cette macro :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim source As Range, nlig&, dest As Range, col%, a(), n&, lig&, i&
Set source = [H1].CurrentRegion
nlig = source.Rows.Count
Set dest = [B1]
Application.ScreenUpdating = False
Application.EnableEvents = False 'désactive les évènements
dest.CurrentRegion.Offset(1, 1).ClearContents 'RAZ
For col = 2 To source.Columns.Count
    Erase a
    n = 0
    For lig = 3 To nlig
        For i = 1 To Int(Val(source(lig, col)))
            ReDim Preserve a(n)
            a(n) = source(2, col) & source(lig, 1)
            n = n + 1
    Next i, lig
    '---restitution---
    dest(2, col - 1) = source(2, col)
    If n Then dest(3, col - 1).Resize(n) = Application.Transpose(a) 'Transpose est limitée à à65536 lignes
Next col
Application.EnableEvents = True 'réactive les évènements
End Sub
Elle se déclenche quand on modifie ou valide une cellule quelconque.

A+
 

Pièces jointes

  • Exemple.xlsm
    19.2 KB · Affichages: 0
Dernière édition:

Efgé

XLDnaute Barbatruc
Re
Bonjour @chris
Merci pour l'exemple.
Je n'arrive a reproduire la ligne:
VB:
= Table.Group(#"Colonnes supprimées", {"T"}, {{"Tabl",each Table.AddIndexColumn(_,"ID",1,1),type table}})
L'as tu ajoutée dans le code ou y a t-il un "bouton" existant ?

Cordialement
 

chris

XLDnaute Barbatruc
RE
On peut le faire en 2 fois mais là j'ai choisi dans la fenêtre Tabl, Toutes les lignes puis corrigé dans la barre de formule pour faire en une fois

(En 2 fois on fait le regroupement comme indiqué et juste derrière Colonne personnalisée
avec la formule
Table.AddIndexColumn([Tabl],"ID",1)
)
 

AtTheOne

XLDnaute Accro
Supporter XLD
Bonjour à toutes & à tous, bonjour @Naya.05

Voici une version par formule pour version EXCEL 2021, 2024 ou 365 avec formules matricielles dynamiques :
en B3 à tirer vers la droite
VB:
=FILTRE.XML("<t><c>"&LET(c;JOINDRE.TEXTE("";VRAI;REPT(B$2&tb[Item]&"</c><c>";INDEX(tb;;EQUIV(B$2;tb[#En-têtes];0))));GAUCHE(c;NBCAR(c)-3))&"</t>";"//c")
1732025473203.png

Les données d'entrées sont transformées en Tableau Structuré, les formules se propagent automatiquement vers le bas.
(J'ai piqué l'idée de la fonction FILTRE.XML sur une vidéo YouTube de Aliou Badara KADJO)

À bientôt
 

Pièces jointes

  • Exemple AtTheOne.xlsx
    13.9 KB · Affichages: 4

crocrocro

XLDnaute Impliqué
Voici une version par formule pour version EXCEL 2021, 2024 ou 365 avec formules matricielles dynamiques :
en B3 à tirer vers la droite
VB:
=FILTRE.XML("<t><c>"&LET(c;JOINDRE.TEXTE("";VRAI;REPT(B$2&tb[Item]&"</c><c>";INDEX(tb;;EQUIV(B$2;tb[#En-têtes];0))));GAUCHE(c;NBCAR(c)-3))&"</t>";"//c")
Bonjour à tous,
@AtTheOne, je pleure un peu quand je vois les formules magiques à disposition avec 365 😢. Je sèche mes larmes quand je vois le prix d'un abonnement et continue à transpirer en creusant mon cerveau à mains nues pour essayer d'en tirer quelque chose🥵 .
 

Discussions similaires

Statistiques des forums

Discussions
315 118
Messages
2 116 422
Membres
112 745
dernier inscrit
mcanas