Isoler des lignes et des événements dans un tableau

Bonjour à tous...

J'ai à ma disposition le fichier ci-joint.

C'est un export d'une base de données d'un événement se déroulant sur un week end qui regroupe les réservations de repas. Je suis chargé de faire du publipostage pour imprimer des badges nominatifs avec les repas réservés (expl : un badge pour M. Dupont pour les repas de samedi midi et de dimanche midi ; Mme Durant repas uniquement de samedi soir,... etc)

Mes problèmes / contraintes sont les suivants :

- une personne peut réserver pour plusieurs personnes (tant pis, ça sera le nom de celui qui a fait la réservation sur le badge)

- une personne peut réserver 0,1,2 ou 3 repas dans n'importe quel ordre (rien, samedi midi, samedi soir, dimanche midi)

- le fichier d'export (que je ne peux pas modifier) affiche une ligne par personne et une ligne par repas (si M. Martin réserve les 3 repas possible, il y aura 3 lignes dans mon tableau)

- je me disais que j'allais faire un fichier excel intermédiaire pour afficher un seul nom avec le bon nombre de repas en face ; mais comme ces repas sont eux mêmes dans la même colonne ; je n'arrive à rien

--> Bref : je suis complètement perdu ! A part faire du publipostage ligne par ligne ; mais potentiellement une personne aura 3 badges ; c'est un peu ridicule

Merci d'avance de votre aide

15exemple-export.xlsx (10.53 Ko)

Bonjour,

Une proposition

Cordialement

16exemple-export.xlsx (22.17 Ko)

Bonjour et merci pour ta réponse. J'avance... a partir de ton conseil, j'ai donc créé un tableau croisé dynamique (feuill1) depuis les données feuille1.

Ensuite, comme je bloque, j'ai fait un copier coller feuil2 de ce tableau. Mon souci est que pour 1 personne qui a commandé 2 repas, j'ai donc un 2 dans sa colonne... J'aurais voulu que la ligne soit doublée afin de pouvoir faire le publipostage dans Word, ou indiquer à Word que ce "2" signifiait qu'il fallait pour cette personnes 2 badges... mais c'est hors de mes compétences....

Si quelqu'un a une solution ; celle-ci ou une autre idée... Je suis preneur.

10export-v2.xlsx (15.92 Ko)

Bonjour,

Pas tout compris, c'est déjà ce que l'on trouve dans les colonnes D, E et F de l'onglet feuille1

Cordialement

Bonjour,

Il faudra dissocier le 'jo' pour avoir 2 lignes..

JO1 / JO2 c'est une solution faute de mieux

P.

Je vais essayer d'être plus précis, désolé..

Si je prends la feuil1 avec le tableau croisée dynamique. Je lance mon publipostage /étiquettes à partir de là :

- Charline aura bien ses 3 repas affichés sur son étiquette : samedi midi, samedi soir, dimanche midi

- René aura son repas affiché sur son étiquette : samedi midi

- Jo : n'aura qu'un repas sur son étiquette : samedi soir. Or il en a 2 (il a invité une personne...) Pour lui je voudrais donc 2 étiquettes nominative avec son repas du samedi soir....

Bonsoir,

Un essai.

Cordialement

10export-v2.xlsx (24.82 Ko)

bonjour le fil,

6export-v2-1.xlsx (29.57 Ko)

oubien la feuille TCD

Bonjour, merci pour votre aide. Je m'en suis sorti avec du vba

Sub MettreAJourRecap()
Dim wsSource As Worksheet
Dim wsRecap As Worksheet
Dim dict As Object
Dim nomsAjoutes As Object
Dim cell As Range
Dim lastRow As Long
Dim i As Long
Dim nom As String
Dim repas As String
Dim key As String
Dim colIndex As Integer
Dim count As Integer
Dim baseRow As Long
Dim j As Integer
Dim parts As Variant
Dim k As Variant

Set dict = CreateObject("Scripting.Dictionary")
Set nomsAjoutes = CreateObject("Scripting.Dictionary")
Set wsSource = ThisWorkbook.Sheets("Feuille 1")
Set wsRecap = ThisWorkbook.Sheets("Récapitulatif")
wsRecap.Cells.ClearContents
wsRecap.Range("A1:D1").Value = Array("Nom", "Samedi midi", "Samedi soir (gala)", "Dimanche midi")

lastRow = wsSource.Cells(wsSource.Rows.Count, 1).End(xlUp).Row

For i = 2 To lastRow
nom = Trim(wsSource.Cells(i, 4).Value) & " " & Trim(wsSource.Cells(i, 5).Value)
repas = wsSource.Cells(i, 6).Value
key = nom & "|" & repas
If dict.exists(key) Then
dict(key) = dict(key) + 1
Else
dict(key) = 1
End If
Next i

Dim rowRecap As Long
rowRecap = 2

For Each k In dict.Keys
parts = Split(k, "|")
nom = parts(0)
repas = parts(1)

If Not nomsAjoutes.exists(nom) Then
wsRecap.Cells(rowRecap, 1).Value = nom
nomsAjoutes(nom) = rowRecap
rowRecap = rowRecap + 1
End If

Select Case repas
Case "Repas samedi midi 6 décembre": colIndex = 2
Case "Repas samedi soir 6 décembre (GALA)": colIndex = 3
Case "Repas dimanche midi 7 décembre": colIndex = 4
End Select

count = dict(k)
baseRow = nomsAjoutes(nom)
wsRecap.Cells(baseRow, colIndex).Value = "x"

For j = 2 To count
wsRecap.Cells(rowRecap, 1).Value = nom & " (invité)"
wsRecap.Cells(rowRecap, colIndex).Value = "x"
rowRecap = rowRecap + 1
Next j
Next k
End Sub

Rechercher des sujets similaires à "isoler lignes evenements tableau"