Microsoft 365 Fusion plusieurs lignes excel en une seule

Poulpevert

XLDnaute Nouveau
Bonjour,

Je cherche a fusionner plusieurs lignes d'une fichier Excel en une seule afin de pouvoir les exporter en un fichier csv.

En fait chaque enregistrements comprend 5 lignes :
1. Prenom NOM
2. Prenom
3. Nom
4. Date enterrement
5. Numero de concession
6.Prenom NOM
7. Prenom
8. Nom
9. Date enterrement
10. Numero de concession
etc. fois 110.000 lignes

Donc je cherche à mettre les lignes 1 à 5 sur une meme ligne separée par une virgule, 6 à 10 etc....

Est-ce faisable ?

Merci.
 

Pièces jointes

  • Test.xlsx
    11.2 KB · Affichages: 10

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonsoir Poulpevert,
Un essai en PJ avec :
VB:
Option Explicit
Option Base 1
Sub Worksheet_Activate()
    Dim F, DL%, TabloIn, TabloOut, i%, j%
    Set F = Sheets("Oshawa ON Cemetery")
    DL = F.Range("A65500").End(xlUp).Row
    TabloIn = F.Range("A1:B" & DL)
    ReDim TabloOut(UBound(TabloIn))
    j = 1
    For i = 1 To UBound(TabloIn) Step 5
        TabloOut(j) = TabloIn(i, 1) & "," & TabloIn(i + 1, 2) & "," & TabloIn(i + 2, 2) & "," & _
                        TabloIn(i + 3, 2) & "," & TabloIn(i + 4, 2)
        j = j + 1
    Next i
    [A:A].ClearContents
    [A1].Resize(UBound(TabloOut), 1).Value = Application.Transpose(TabloOut)
    Columns.AutoFit
End Sub
La feuille "résultat" se met à jour automatiquement quand on la sélectionne.
 

Pièces jointes

  • Test (10).xlsm
    19.3 KB · Affichages: 2

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Ou sans VBA mais moins "esthétique" avec :
VB:
=SI(INDEX('Oshawa ON Cemetery'!A:A;5*LIGNE()-4)<>"";
INDEX('Oshawa ON Cemetery'!A:A;5*LIGNE()-4)&","&
INDEX('Oshawa ON Cemetery'!B:B;5*LIGNE()-3)&","&
INDEX('Oshawa ON Cemetery'!B:B;5*LIGNE()-2)&","&
INDEX('Oshawa ON Cemetery'!B:B;5*LIGNE()-1)&","&
INDEX('Oshawa ON Cemetery'!B:B;5*LIGNE());"")
 

Pièces jointes

  • Test (11).xlsx
    14.3 KB · Affichages: 2

merinos

XLDnaute Accro
Salut @Poulpevert ,

c'est toute la magie de Query...

1644257656951.png


et a droite tu vois toutes les étapes.

Ma version est un peu differente, mais tout a fait semblable ....

1644257765569.png
 

Pièces jointes

  • Poulpevert.xlsx
    25.9 KB · Affichages: 4

Poulpevert

XLDnaute Nouveau
Re,
Ou sans VBA mais moins "esthétique" avec :
VB:
=SI(INDEX('Oshawa ON Cemetery'!A:A;5*LIGNE()-4)<>"";
INDEX('Oshawa ON Cemetery'!A:A;5*LIGNE()-4)&","&
INDEX('Oshawa ON Cemetery'!B:B;5*LIGNE()-3)&","&
INDEX('Oshawa ON Cemetery'!B:B;5*LIGNE()-2)&","&
INDEX('Oshawa ON Cemetery'!B:B;5*LIGNE()-1)&","&
INDEX('Oshawa ON Cemetery'!B:B;5*LIGNE());"")
Je tente de comprendre ! Je vois bien la ligne commencant par Si.... mais comment je l'applique au tableau ? Merci
 

Poulpevert

XLDnaute Nouveau
Je tente de comprendre ! Je vois bien la ligne commencant par Si.... mais comment je l'applique au tableau ? Merci
Je tente de comprendre ! Je vois bien la ligne commencant par Si.... mais comment je l'applique au tableau ? Merci
Ok j'avance. J'ai en fait plus de 1000 lignes et il m'apparait un message dans les resultats : derniere ligne a tirer vers le bas si base sup a 1000 lignes. Quelle est cette ligne ? Merci.
 

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Etapes de la requête

1 - Source : Récupère les données dans le tableau structuré et nommé 'T_Datas' du classeur. Les données pourraient être récupérées, dans un autre fichier (excel ou non) éventuellement sur serveur.

2 - Index ajouté : Rajoute une colonne avec un numéro d'index à partir de 0. Ce numéro servira à calculer les deux étapes suivantes.

3 - Ligne ajoutée : Etape que j'aurais du appeler "Index Champ ajouté".
Son but est d'ajouter une colonne donnant l'index de "champ" de la future ligne csv.
Numéro de champ est calculé comme étant le reste de la division par 5 de l'index de l'étape précédente +1.
En effet la future ligne csv aura 5 champs

5 - Id : ajoute une colonne contenant le numéro de la future ligne csv. Cette étape est indispensable à l'étape "Colonne dynamique".

6 - Datas ajoutée : Rajoute une colonne qui obtient ses données en fonction du numéro du champ.
Si 1 alors 'Nom prenom' dans colonne1 sinon donnée dans colonne2

7 - Entête ajoutée : rajoute une colonne contenant les futurs 'noms de champs' d'une ligne csv.
En fait, reproduit la Colonne1 en remplaçant les noms et prénoms par 'Nom prenom'.

8 - Sélection colonnes : ne fait que conserver les colonnes nécessaires ("Id" ,"Entête","Datas") à l'étape suivante

9 - Colonne dynamique. : pivote la colonne "Entête" pour avoir le noms d'entête sur la première ligne et les donnée en dessous. Les opérations traditionnelle de pivotage de colonne, inclus des statistiques sur les données. Comme ici il n'y en a pas, l'opération a besoin d'un numéro de ligne dans lequel affiché les données en colonnes (colonne Datas)

10 - Id supprimé : ne fait que supprimer la colonne Id, inutile dans le fichier csv final (à moins que ?)

11 - Entêtes rétrogradés : l'opération de pivotage de la table a promu en entête de table les valeurs de la première ligne.
Pour que les noms de champs apparaissent en première ligne du csv, il faut annuler cette opération de promotion automatique des entêtes.

12 - Types modifiés : change le type de chaque colonne pour le type texte.

13 - colonnes fusionnées : fusionne toutes les valeurs de chaque ligne en une seule colonnes. Chaque valeur séparée de la précédente par un ";"

QUESTION : La requête pourrait très bien s'arrêter à l'étape 9 (pivotage des colonnes) qui créer une table.
Cette table pourrait être chargée dans une nouvelle feuille, qui elle-même pourrait être enregistrée en csv.
Non ?

Cordialement

P.S. à la ligne 32 de vos données vous avez 'MICHEL J ABERCROMBIE' comme 'Nom prenom'
Et en champ 'prenom' vous avez 'LOUIS J' !
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 108
Messages
2 085 366
Membres
102 874
dernier inscrit
Petro2611