Compiler les informations de différentes lignes

Bonjour,

Nous avons un fichier (cf piece jointe) avec des lignes correspondant à des salariés.

Nous avons deux colonnes qui listent les diplomes et les formations qu'ont faits ces salariés.

Pour un même salarié, il y a autant de lignes qu'il y a d'informations différentes

Nous voulons arriver à synthétiser le tableau et avoir une ligne par salarié et dans la colonne diplôme ou formation l'ensemble des themes trouvés en compilant le nom du diplôme et sa date

Le but est de pouvoir faire par la suite un publipostage.

L'idéal serait donc que cette synthèses apparaisse avec un renvoi à la ligne.

(Au passage et pour info, ce fichier sort d'une requête Access)

38requete3.zip (5.35 Ko)

bonjour

pas sûr qu'une fusion dans Word soit la solution, un publipostage donnant une lettre par ligne (on ne regroupe pas)

si tes données sont sous Access, alors tu peux facilement faire des états de synthèse directement. Non ?

(un peu comme on fait une facture par client avec plusieurs lignes)

Effectivement, c'est peut être une solution.

Il faudrait faire un état qui reprendrait les champs désirés + le texte que nous souhaitons associer.

Je vais regarder.

Bon j'ai regardé avec access, je n'y arrive pas.

UN peu le même principe : difficulté à mettre dans deux blocs différents une concaténation des informations différentes.

Ma demande initiale revient donc d'actualité.

Je suis vraiment coincé et ne maitrise pas VBA. J'ai bien vu quelques thématiques qui s'en rapprochent mais je ne sais vraiment pas comment adapter.

Si quelqu'un peut m'apporter une aide.

re

si personne ne te dépanne ici sur Excel (mais on y trouve des cracks ! ) alors il te faudra aller sur un forum Access.

il est d'ailleurs étrange que tu bascules sous Excel. Dans ton entreprise qui a programmé Access ?

Bonjour

Oh pour access, personne n'a paramétré quoi que ce soit. On a affaire à un prestataire qui a développé son outil sous access.

Nous on essaye juste d'extraire des données avec les moyens qu'il nous met à disposition.

Pour nous le plus simple est d'avoir un crack qui me fasse une macro de transformation du fichier excel.

Bonjour,

j'ai (péniblement) tenté quelque chose, les dico j'aime mais j'ai du mal à les mettre en marche

A partir de là, on sait faire un publipostage je pense

P.

ps: il faut accepter les macros 8)

24requete3.xlsm (25.44 Ko)

Merci

Je regarde cela de manière plus approfondie dès que l'on m'en laisse le temps!!

EN premier coup d'oeil, cela m'a l'air pas mal

Bonjour,

Je viens de regarder la macro proposée. Bon ben chapeau!!

Le hic c'est que je ne maitrise vraiment pas donc j'ai peur de faire des betises en tentant de modifier quoi que ce soit.

SI j'ai bien compris la macro 1 est reliée au bouton et ne sert qu'à lancer la macro Regroupe.

Dans le résultat de macro,

il faut que je récupère toutes les données société, nom, prénom ...

Je ne sais plus si je l'avais clairement exposé mais je dois avoir également un regroupement pour diplome et date d'obtention diplome comme tu l'as fait pour stage et année

Attention, je ne sais pas si cela peut avoir des conséquences mais nous avons des homonymes de nom au sein d'une même société, il faudrait donc filtrer sur le prénom en plus du nom

Et un même salarié peut apparaitre dans deux enregistrements sur deux entreprises différentes. Et là on ne veut pas de regroupement global. Juste un regroupement diplome et stage sur la première société et un autre regroupement diplome et stage sur l'autre société.

J'espère que je suis suffisamment clair.

Vu la complexité je ne me risque pas à tenter quoi que ce soit.

Merci d'avance

re,

essaye ce second et difficile (pour moi) code et dis moi si ça débute bien

Sub regroupe()
Dim WS1, Ws2 ' As Worksheets
Set WS1 = Sheets("Requête3")
Set Ws2 = Sheets("groupé")
Ws2.Cells.ClearContents
Set d = CreateObject("Scripting.Dictionary")
Set d2 = CreateObject("Scripting.Dictionary")
For Each c In WS1.Range("b2", WS1.[b65000].End(xlUp))
  zz = c.Value & " " & c.Offset(0, 1)
  If Not d.Exists(zz) Then
    d(zz) = c.Offset(0, 8) & " (" & c.Offset(, 9) & ")"
  Else
    d(zz) = d(zz) & "//" & c.Offset(0, 8) & " (" & c.Offset(, 9) & ")"
  End If
Next c
If d.Count = 0 Then Exit Sub
A = d.Keys  ' ARRAY
B = d.items  ' ARRAY
Ws2.[A1] = "Nom": Ws2.[B1] = "Stages suivis"
Ws2.[A2].Resize(d.Count, 1) = Application.Transpose(d.Keys)
For i = 0 To UBound(A)
  For col = 0 To UBound(Split(B(i), "//"))
    Ws2.Cells(i + 2, 2).Value = Split(B(i), "//")(col) & Chr(10) & Ws2.Cells(i + 2, 2).Value
  Next col
Next i
Ws2.[A2:A1000].Rows.AutoFit
End Sub

Bonjour

Ben cela fonctionne mais je ne vois pas de différence.

On arrive au même résultat.

Ha bon...

J'arrive à mes limites, dsl, même si je m'obstine ...Je vais devoir passer la main

essaye ces 2 codes , il y a une différence 8)

Sub regroupe1()
Dim WS1, Ws2 ' As Worksheets
Set WS1 = Sheets("Requête3")
Set Ws2 = Sheets("groupé")
Ws2.Cells.ClearContents
Set d = CreateObject("Scripting.Dictionary")
Set d2 = CreateObject("Scripting.Dictionary")
For Each c In WS1.Range("b2", WS1.[b65000].End(xlUp))
  zz = c.Value & " " & c.Offset(0, 1)
  If Not d.Exists(zz) Then
    d(zz) = c.Offset(0, 8) & " (" & c.Offset(, 9) & ")"
  Else
    d(zz) = d(zz) & "//" & c.Offset(0, 8) & " (" & c.Offset(, 9) & ")"
  End If
Next c
If d.Count = 0 Then Exit Sub
a = d.Keys  ' ARRAY
b = d.items  ' ARRAY
Ws2.[A1] = "Nom": Ws2.[B1] = "Stages suivis"
Ws2.[A2].Resize(d.Count, 1) = Application.Transpose(d.Keys)
For i = 0 To UBound(a)
  For col = 0 To UBound(Split(b(i), "//"))
    Ws2.Cells(i + 2, 2).Value = Split(b(i), "//")(col) & Chr(10) & Ws2.Cells(i + 2, 2).Value
  Next col
Next i
Ws2.[A2:A1000].Rows.AutoFit
End Sub

et :

Sub regroupe2()
Application.ScreenUpdating = False
Dim WS1, Ws2  ' As Worksheets
  Set WS1 = Sheets("Requête3")
  Set Ws2 = Sheets("groupé")
  Ws2.Cells.ClearContents
  Set d = CreateObject("Scripting.Dictionary")
  Set d2 = CreateObject("Scripting.Dictionary")
  For Each c In WS1.Range("a2", WS1.[a65000].End(xlUp))
    zz = c.Value & "//" & c.Offset(0, 1) & " " & c.Offset(, 2)
    If Not d.Exists(zz) Then
      d(zz) = c.Offset(0, 9) & " (" & c.Offset(, 10) & ")"
    Else
      d(zz) = d(zz) & "//" & c.Offset(0, 9) & " (" & c.Offset(, 10) & ")"
    End If
  Next c
  If d.Count = 0 Then Exit Sub
  a = d.Keys  ' ARRAY
  b = d.items  ' ARRAY
  Ws2.[A1] = "Nom": Ws2.[B1] = "Noms": Ws2.[C1] = "Stages suivis"
  'Ws2.[a2].Resize(D.Count, 1) = Application.Transpose(D.keys)
  ' splitter société/nom
  For i = 0 To UBound(a)
    s = Split(a(i), "//")
    Ws2.Cells(i + 2, 1) = s(0): Ws2.Cells(i + 2, 2) = s(1)
  Next
  ' splitter les stages
  For i = 0 To UBound(a)
    For col = 0 To UBound(Split(b(i), "//"))
      Ws2.Cells(i + 2, 3).Value = Split(b(i), "//")(col) & Chr(10) & Ws2.Cells(i + 2, 3).Value
    Next col
  Next i
  Ws2.[A2:A1000].Rows.AutoFit
End Sub

Re

On est d'accord que je teste les deux codes indépendamment.

Le premier code ne change rien

Le second fait apparaitre la colonne société. C'est bien dans la mesure ou il me faut toutes les autres colonnes.

re,

bon là, n'étant pas maitre des "dictionnaire utilisés ici, voici ma dernière version...

j'ai eu du mal par manque d'expérience sur ce type d'outil mais j'arrête là (pour l'instant peut être, il y aura bien un plus fortiche qui complètera le code)

Regarde et dis moi

P.

Bon merci tout de même pour ton intervention.

Et dans l'attente de qq d'encore plus doué!!

Bonjour AntoineS, patrick1957

Et cela convient-il ?

PS/ j'ai mis une feuille nommée "Recap3" dans laquelle le bouton GO permet la compilation

à tester !

11requete-v1.xlsm (23.97 Ko)

Hello,

je pense que notre ami voulait les

sociétés/nom+prénom/diplome + date / stage+date dans une seule et même ligne par personne

P.

Bonjour patrick1957

Je n'avais pas compris cela comme ça...

Mais si c'est le cas ce n'est pas beaucoup plus compliqué (vu ma méthode)

Notre ami AntoineS nous dira ce qu'il en pense !


Si c'est ce qu'il veut... nous le lui ferons ! Pas de problème !

Bonjour

Ma contribution

Bonjour à tous,

on va attendre l'avis de l'intéressé mais j'ai relu son post7, il demande les dates avec les diplomes et idem pour les stages..si j'ai compris son problème

Ici ça semble proche

suite au prochain épisode

Rechercher des sujets similaires à "compiler informations differentes lignes"