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

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

  • exemple_bdd_07062022.xlsx
    15.8 KB · Affichages: 5

chris

XLDnaute Barbatruc
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...
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
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

  • exemple_bdd_07062022 (1).xlsm
    21.7 KB · Affichages: 3

Discussions similaires

Réponses
0
Affichages
368

Statistiques des forums

Discussions
299 841
Messages
1 979 469
Membres
206 744
dernier inscrit
Nicolas258