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

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 !

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

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

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
 
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

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

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"
 
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

Dernière édition:
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)
)
 
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

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🥵 .
 
Notre forum d’entraide est 100 % gratuit et le restera.
Aucune formation payante, aucun fichier à acheter, rien à vendre. Mais comme tout site, nous devons couvrir nos frais pour continuer à vous accompagner.
Soutenez-nous en souscrivant à un compte membre : c’est rapide, vous choisissez simplement votre niveau de soutien et le tour est joué.

Je soutiens la communauté et j’accède à mon compte membre

Discussions similaires

Retour