Dupliquer des cellules sur plusieurs lignes

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 !

virginie_kirika

XLDnaute Nouveau
Bonjour,
après une recherche infructueuse sur le net (ne sachant comment formuler la problématique) je vous soumets ce problème.

Voici l'idée :
j'ai un onglet de plusieurs centaines de lignes mais avec 4 colonnes :
"Prénom" / "Nom" / "Couleur 1" / "Couleur 2".
Sachant que les couleurs peuvent parfois être vide, ce n'est pas un problème.

Exemple :
Ligne 1 : Martin / GRISET / Noir / Rouge
Ligne 2 : Vanessa / ROBAD / Vert / Noir
Ligne 3 : Clara / DELMO / Noir / (vide)
Ligne 4 : Lola / ELFA / (vide) / (vide)

Je voudrais copier cet onglet mais en faisant en sorte de n'avoir que 3 colonnes :
"Prénom" / "Nom" / "Couleur",
ce qui signifie que je me retrouve systématiquement avec 2 lignes ayant le même Nom et Prénom, même si certaines couleurs seront vides.

Dans l'exemple cela deviendrait :
Ligne 1 : Martin / GRISET / Noir
Ligne 2 : Martin / GRISET / Rouge
Ligne 3 : Vanessa / ROBAD / Vert
Ligne 4 : Vanessa / ROBAD / Noir
Ligne 5 : Clara / DELMO / Noir
Ligne 6 : Clara / DELMO / (vide)
Ligne 7 : Lola / ELFA / (vide)
Ligne 7 : Lola / ELFA / (vide)

D'avance merci pour vos retours, je ne vois pas de solutions alors que j'aurai des centaines de réponses !
 
Bonjour,
après une recherche infructueuse sur le net (ne sachant comment formuler la problématique) je vous soumets ce problème.

Voici l'idée :
j'ai un onglet de plusieurs centaines de lignes mais avec 4 colonnes :
"Prénom" / "Nom" / "Couleur 1" / "Couleur 2".
Sachant que les couleurs peuvent parfois être vide, ce n'est pas un problème.

Exemple :
Ligne 1 : Martin / GRISET / Noir / Rouge
Ligne 2 : Vanessa / ROBAD / Vert / Noir
Ligne 3 : Clara / DELMO / Noir / (vide)
Ligne 4 : Lola / ELFA / (vide) / (vide)

Je voudrais copier cet onglet mais en faisant en sorte de n'avoir que 3 colonnes :
"Prénom" / "Nom" / "Couleur",
ce qui signifie que je me retrouve systématiquement avec 2 lignes ayant le même Nom et Prénom, même si certaines couleurs seront vides.

Dans l'exemple cela deviendrait :
Ligne 1 : Martin / GRISET / Noir
Ligne 2 : Martin / GRISET / Rouge
Ligne 3 : Vanessa / ROBAD / Vert
Ligne 4 : Vanessa / ROBAD / Noir
Ligne 5 : Clara / DELMO / Noir
Ligne 6 : Clara / DELMO / (vide)
Ligne 7 : Lola / ELFA / (vide)
Ligne 7 : Lola / ELFA / (vide)

D'avance merci pour vos retours, je ne vois pas de solutions alors que j'aurai des centaines de réponses !
Bonsoir,
Avec Feuil1 les données source
En feuil2 le résultat
Exemple avec un peu de VBA en PJ
 

Pièces jointes

Dernière édition:
Re,

Une solution simple et très rapide en VBA :
Code:
Private Sub Worksheet_Activate()
If FilterMode Then ShowAllData 'si la feuille est filtrée
With Feuil1.[A1].CurrentRegion 'Feuil1 est le CodeName de la feuille source
  With [A2].Resize(2 * .Rows.Count, 3)
    .Formula = "=T(OFFSET(Feuil1!A$1,ROW()/2,(COLUMN()=3)*MOD(ROW(),2)))"
    .Value = .Value 'supprime les formules
  End With
  Range("A" & 2 * .Rows.Count & ":C" & Rows.Count).Delete xlUp 'RAZ sous le tableau
End With
End Sub
Cette macro est à placer dans le code de Feuil2 et s'exécute quand on active la feuille.

Une seule formule est entrée par la macro dans toute la plage :
Code:
=T(DECALER(Feuil1!A$1;LIGNE()/2;(COLONNE()=3)*MOD(LIGNE();2)))
Edit : j'ai ajouté une ligne s'il prenait fantaisie de filtrer Feuil2.

Fichier .xlsm joint.

A+
 

Pièces jointes

Dernière édition:
Bonjour virginie_kirika, Jacky67, le forum,

Avec des tableaux VBA c'est encore plus rapide :
Code:
Private Sub Worksheet_Activate()
Dim t1, t2$(), i&, j&
t1 = Feuil1.[A1].CurrentRegion.Resize(, 4) 'Feuil1 est le CodeName de la feuille source
ReDim t2(1 To 2 * UBound(t1) - 1, 1 To 3)
For i = 1 To UBound(t2)
  j = 1 + i \ 2
  t2(i, 1) = t1(j, 1): t2(i, 2) = t1(j, 2): t2(i, 3) = t1(j, 3 + i Mod 2)
Next
t2(1, 3) = "Couleur"
If FilterMode Then ShowAllData 'si la feuille est filtrée
[A1].Resize(i - 1, 3) = t2 'restitution
Range("A" & i & ":C" & Rows.Count).ClearContents 'RAZ sous le tableau
With UsedRange: End With 'actualise la barre de défilement verticale
End Sub
Fichier (2), avec 40 000 lignes en Feuil1 => 0,47 seconde chez moi.

PS : i \ 2 c'est la même chose que Int(i / 2).

Bonne journée.
 

Pièces jointes

- 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

Discussions similaires

Réponses
0
Affichages
460
Réponses
0
Affichages
332
Réponses
0
Affichages
475
Réponses
2
Affichages
720
Retour