extraction de données dans un tcd ou autre

maje27

XLDnaute Nouveau
Bonjour,

Je suis nouvelle dans le forum et j'espère être assez claire. Je me débrouille pas trop mal en tcd mais je n'arrive pas à trouver une solution à mon problème. En fait, mes données à synthétiser se trouve dans les résultats, j'aimerais pouvoir regrouper mes résultats par nom.

Exemple

tintin
sam dès 11h00
dim dès 8h00

milou
lun dès etc
ma dès etc

Du fait que mes données sont déjà des résultats et non des en-têtes je ne sais pas comment les regrouper.
Je vous joins un exemple de tableau, je l'ai simplifié et modifié les noms...

Merci beaucoup pour votre aide
 

Pièces jointes

  • essai-excel.xlsx
    13.9 KB · Affichages: 51
  • essai-excel.xlsx
    13.9 KB · Affichages: 52
  • essai-excel.xlsx
    13.9 KB · Affichages: 52

homepyrof53

XLDnaute Occasionnel
Re : extraction de données dans un tcd ou autre

Bonjour,

Voici par macro

Code:
Sub essai()
'=======================================================
'                   lecture des données
'=======================================================
l1 = 2
c1 = 7
nb_ben = 8

Dim tab1
Set tab1 = CreateObject("scripting.dictionary")
While Cells(l1, 6) <> ""
    For b = c1 To c1 + nb_ben - 1
        nom = Cells(l1, b)
        If nom <> "" Then
            If tab1.exists(nom) Then
                tab1(nom) = tab1(nom) & "|" & Cells(l1, 6)
            Else
                tab1(nom) = Cells(l1, 6)
            End If
        End If
    Next
    l1 = l1 + 1
Wend
'=======================================================
'                   écriture résultats
'=======================================================
l = 10
c = 2

For Each nom In tab1
    l = l + 1
    Cells(l, c) = nom
    tmp = Split(tab1(nom), "|")
    For b = 0 To UBound(tmp)
        l = l + 1
        Cells(l, c + 1) = tmp(b)
    Next
    
Next

End Sub
 

maje27

XLDnaute Nouveau
Re : extraction de données dans un tcd ou autre

Bonjour,

Oui ! C'est exactement ce dont j'ai besoin, merci mais... comme je n'y comprends rien en macro, qu'est-ce que je dois modifier dans la macro pour qu'elle fonctionne sur mon tableau qui est beaucoup plus grand et qui comporte beaucoup plus de nom car elle fonctionne dans le tableau essai mais pas dans l'autre...
 

maje27

XLDnaute Nouveau
Re : extraction de données dans un tcd ou autre

Re-bonjour,

en fait j'ai trouvé la solution il me suffit de copier/coller mon tableau sur le tableau essai.... mais là il y a un autre problème, la macro s'exécute et empiète sur le tableau, est-il possible de mettre la solution sur une autre feuille ? encore merci
 

homepyrof53

XLDnaute Occasionnel
Re : extraction de données dans un tcd ou autre

Bonjour,

J'ai mis des commentaires dans la macro

Pour adapter à un autre document il faut :

Préciser le nom de la feuille des datas
le numéro de la première ligne
le numéro de la première colonne Bén
Le nombre de colonne Bén
Le numéro de la colonne horaire ici 6

La macro partira de la première ligne précisée et s’arrêtera sur la première ligne qui aura la colonne 6 vide.

Bon courage
 

Pièces jointes

  • Pyrof_002.xls
    55.5 KB · Affichages: 61

maje27

XLDnaute Nouveau
Re : extraction de données dans un tcd ou autre

Bonsoir,

Je crois que cela fonctionne même si je n'ai pas tout compris... C'est magnifique, merci ! :eek:

Si j'osais abuser... est-il possible de rajouter une p'tite ligne pour avoir directement les noms par ordre alpha dans le résultat ?

Si c'est trop compliqué pas de souci, c'est déjà parfait comme ça.

Bonne soirée
 

homepyrof53

XLDnaute Occasionnel
Re : extraction de données dans un tcd ou autre

Bonjour,

Voici la macro avec tri alpha

Code:
Global tab1
Option Base 1
Option Explicit
Sub essai()
'=======================================================
'                   lecture des données
'=======================================================
Dim feuille_datas
Dim feuille_resultats
Dim l, c, l1, c1, l2, c2
Dim nb_ben, nom, b, tmp
feuille_datas = "Data-complète (2)"
l1 = 2 ' première ligne de données
c1 = 7 ' numéro de colonne du premier Bén
nb_ben = 8 ' nombre de colonne Bén

Set tab1 = CreateObject("scripting.dictionary")
' tab1 : tabeau de cumul des données
' On peut le repésenté comme un meuble avec des tirroires
' 0 chatque tittoir on mais une etiquette nom du Bén
' et dedans on y place le contenu de la cellule colonne 6
' avec le caratctère | comme séparateur (*)

With Sheets(feuille_datas) ' avec la feuille des datas
    While .Cells(l1, 6) <> "" ' tant que la cellule colonne 6 (Pour synthèse) n'est pas vide
        For b = c1 To c1 + nb_ben - 1 ' pour b=colonne 7 à 14 colonnes Bén
            nom = .Cells(l1, b) ' récupère le dnom du Bén
            If nom <> "" Then ' si non différent de vide
                If tab1.exists(nom) Then
                    tab1(nom) = tab1(nom) & "|" & .Cells(l1, 6) '(*)
                Else
                    tab1(nom) = .Cells(l1, 6)
                End If
            End If
        Next
        l1 = l1 + 1 ' ligne suivante
    Wend
End With
sort_dictionary tab1
'=======================================================
'                   écriture résultats
'=======================================================
feuille_resultats = "Resultats"
'----------------------------------------- efface les résultats précédents
Sheets(feuille_resultats).Select
Rows("2:2").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Delete Shift:=xlUp
'-----------------------------------------
With Sheets(feuille_resultats)
' travail avec la feuilles résultats
    l = 1 ' ligne de début d'écriture de trésultats
    c = 1
    For Each nom In tab1 ' pour cahque nom dans le tableau
        l = l + 1
        .Cells(l, c) = nom ' ecriture du nom
        tmp = Split(tab1(nom), "|")
        For b = 0 To UBound(tmp) ' pour chaque horaire du Bén
            l = l + 1
            .Cells(l, c + 1) = tmp(b)
        Next
    Next
End With
End Sub

'==================================================================
Sub sort_dictionary(tab1)
Dim cpt, tmp1, tmp2, tmp3, b1, b2, cle
ReDim tab_tri(1)
cpt = 0
For Each cle In tab1
    cpt = cpt + 1
    ReDim Preserve tab_tri(cpt)
    tab_tri(cpt) = Trim(UCase(cle)) & cle
Next
'--------------------  tri
For b1 = 1 To cpt - 1
    tmp1 = tab_tri(b1)
    For b2 = b1 + 1 To cpt
        tmp2 = tab_tri(b2)
        If tmp2 < tmp1 Then
            tmp3 = tab_tri(b2)
            tab_tri(b2) = tab_tri(b1)
            tab_tri(b1) = tmp3
            tmp1 = tmp3
        End If
    Next
Next
'--------------------  regénération dictionary
For b1 = 1 To cpt
    tmp1 = tab_tri(b1)
    cle = Right(tmp1, Len(tmp1) / 2)
    tmp2 = tab1(cle)
    tab1.Remove cle
    tab1(cle) = tmp2
Next
ReDim tab_tri(1)
End Sub
 

maje27

XLDnaute Nouveau
Re : extraction de données dans un tcd ou autre

Et bien j'ai fait un copier-coller de la macro et je me retrouve avec deux modules module2_essai et module3_essai mais les deux ont l'air de fonctionner, je ne sais pas pourquoi ce sont des modules et plus des macros.... mais ce n'est pas grave tout fonctionne et un très grand merci pour votre aide... C'est une vraie merveille ces macros!
A bientôt
 

Discussions similaires

Statistiques des forums

Discussions
312 196
Messages
2 086 101
Membres
103 117
dernier inscrit
augustin.morille