Répéter une liste plusieurs fois

Bonjour à tous,

Voici quelques techniques (Excel 365) pour répéter une séquence plusieurs fois.

La plus simple, mais non dynamique consiste simplement à écrire les 4 valeurs et ensuite les recopier vers le bas :

Pour du dynamique, une idée serait de générer une suite, par exemple pour 4 éléments, 1;2;3;4;1;2;3;4;1;2;3;4... qui va ensuite être combinée avec la fonction index ou la fonction choisir.

Ca nous donne ceci pour 20 000 lignes, donc 5 000 répétitions.

=MOD(SEQUENCE(20000;1;0;1);4)+1

La fonction SEQUENCE génère une série de nombre, ici 0;1;2;3;4;5...20 000

La fonction MOD retourne le reste de la division, donc ca nous donne 0;1;2;3;0;1;2;3;0;1;2;3... et on ajoute un pour avoir la série qui nous intéresse.

De là, on peut ajouter une fonction comme celle-ci :

=INDEX({"a";"b";"c";"d"};MOD(SEQUENCE(20000;1;0;1);4)+1)

ou encore

=CHOISIR(MOD(SEQUENCE(20000;1;0;1);4)+1;"a";"b";"c";"d")

Et si la suite se trouve dans une plage de cellule, ca nous donne ceci :

=INDEX(A1:A4;MOD(SEQUENCE(20000;1;0;1);4)+1)

Suite à une longue discussion avec Rick, voici les améliorations apportées à la fonction :

En passant la plage en variable, on aurait :

=LET(r;A1:A4;INDEX(r;MOD(SEQUENCE(LIGNES(r)*5000;;0);LIGNES(r))+1))

Et en passant le nombre de répétitions en variable, on aurait :

=LET(r;A1:A4;nRepetitions;5000;INDEX(r;MOD(SEQUENCE(LIGNES(r)*nRepetitions;;0);LIGNES(r))+1))

Et enfin, il ne manque plus que la transformation en Lambda pour avoir une formule universelle :

=LAMBDA(r;nRepetitions;INDEX(r;MOD(SEQUENCE(LIGNES(r)*nRepetitions;;0);LIGNES(r))+1))(A1:A4;5000)

Et pour l'utiliser directement dans un nom (par exemple L.REPETER.PLAGE), et en affinant le nom des paramètres :

=LAMBDA(Plage_A_Recopier;Nombre_Repetitions;INDEX(Plage_A_Recopier;MOD(SEQUENCE(LIGNES(Plage_A_Recopier)*Nombre_Repetitions;;0);LIGNES(Plage_A_Recopier))+1))

Plus précisément, via Formules, Gestionnaire de Noms, Nouveau...Et vous faites deux copier-coller.

Et une fois le nom créé, la formule est super simple d'utilisation :

=L.REPETER.PLAGE(A1:A4;5000)

Si vous voulez avoir une explication détaillée, mettre en pratique et comprendre en profondeur ces fonctions, rejoignez moi ici pour ce séminaire (replay disponible) :

Amusez vous bien !!!

Pour marque-pages : Permaliens.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.