Microsoft 365 Dupliquer une ligne dans la même feuille selon plusieurs conditions

  • Initiateur de la discussion Initiateur de la discussion VirginieO
  • 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 !

VirginieO

XLDnaute Nouveau
Bonjour à tous,
J'ai cherché vainement dans plusieurs discussions pour trouver ma réponse. Aussi, si j'ai mal cherché, veuillez m'en excuser.
J'ai une feuille excel qui comporte plusieurs milliers de lignes et une cinquantaine de colonnes.
Je vous joins un exemple.
Pour chaque ligne, une structure unique avec ses détails (colonnes M à R), mais plusieurs individus (de 0 à 3 maximum) :
- premier individu de la colonne A à D
- deuxième individu de la colonne E à H
- troisième individu de la colonne I à L
Je souhaite pouvoir copier les données de M à R dans une autre ligne (idéalement, juste en dessous), autant de fois qu'il y a d'individus indiqués.
Ex : pour la ligne 2, je voudrais recopier les données une fois
Ex : pour la ligne 3, je voudrais recopier les données deux fois (puisqu'il y a 3 individus)
Et s'il n'y a qu'un seul individu (ou zéro), elle ne se recopie pas.
Merci pour votre aide !
Virginie
 

Pièces jointes

Bonjour

Ce n'est rien à faire avec PowerQuery, intégré à Excel si on a un tableau propre
Ici
  • tantôt Prenom et tantôt Prénom
  • Civilite ou Civilité
  • Titre ou Fonction
  • Espace ou _
De ce fait 4 étapes inutiles sur 11...
 
Bonjour Virginie, Chris,
Une autre approche en VBA. La macro s'exécute automatiquement lorsqu'on sélectionne la Feuil2, avec :
VB:
Sub Worksheet_Activate()
    Dim itablo, tablo_out, i%, i_out%, N%
    Range("A2:D1000").ClearContents
    Application.ScreenUpdating = False
    With Sheets("Feuil1")
        tablo = .Range("A2:L" & .Range("A65500").End(xlUp).Row)
    End With
    ReDim tablo_out(4 * UBound(tablo), 3)   ' Max taille tableau de sortie
    i_out = 0   ' Pointeur d'écriture
    For i = 1 To UBound(tablo)
        For N = 1 To 10 Step 4          ' 4 champs à copier
            If tablo(i, N) <> "" Then   ' Si champ non vide
                tablo_out(i_out, 0) = tablo(i, N + 0)
                tablo_out(i_out, 1) = tablo(i, N + 1)
                tablo_out(i_out, 2) = tablo(i, N + 2)
                tablo_out(i_out, 3) = tablo(i, N + 3)
                i_out = i_out + 1       ' Ligne suivante pour le prochain
            End If
        Next N
    Next i
    [A2].Resize(UBound(tablo_out, 1), 1 + UBound(tablo_out, 2)) = tablo_out ' Restitution résultat
    Columns.AutoFit 'Ajustement largeurs colonnes
End Sub
 

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
4
Affichages
163
  • Question Question
Microsoft 365 MFC dans tableau
Réponses
2
Affichages
224
Retour