Diagramm de Venn à 6 ensemble

Bonjour à tous !

J'ai 6 jeux de données (allant de 5 à 10 000) entrées.

J'aimerai faire un diagramme de Venn à 6 ensembles pour voir quelle données est présente dans les 6 jeux, ou dans 5 ou dans 4 etc etc.

Je me demandais s'il était possible de faire un tel diagram dans Excel, et sinon si vous avez des conseilles concernant la démarche à suivre.

Merci d'avance,

Bien à vous,

6 catégories 10 000 entrées : un diagramme de Venn risque d'être illisible.

Peut être un diagramme UpSet à la place?

Yep je suis entrain de m'essayer a Upset mais je n'arrive pas a trouver un moyen "simple"

J'aimerai que le script me fasse directement le graph a partir de mon jeu de données en croisant les 6 jeux. mais je n'arrive pas a le faire fonctionner.

La seul solution que j'ai trouvé pour l'instant est de moi même faire les croisement et de faire le graph avec les résultats obtenus. mais autant vous dire que j'en ai pour l'aprem.

Une idée du script et surtout de comment organiser mes données ?

Merci d'avance

Bonjour,

si tu cherches à savoir quelles sont les données qui font partie des certains ensembles, peut -être un tableau avec des filtres est-il suffisant.

on pourrait imaginer une macro qui transformerait tes données sous cette forme et utiliser les filtres excel pour afficher les données que tu souhaites. (sélection sur le nombre de présences, ou sélection sur les lignes ayant un x dans telle ou telle colonne.)

donnéejeu 1jeu 2jeu 3jeu 4jeu 5jeu 6présence
ax1
bxx2
cxx2
dxxxxxx6

Bonjour,

J'aime bien l'idée, mais encore faudrait il que les données soient alignées,

Je m'explique

Si je suis l'idée du tableau que vous me proposez j'aurai :

DonnéeJeu1Jeu2Jeu3Jeu4Jeu5Jeu6

Présence

nombre de données55 6651000040005000700020003000

je pensait à la fonction Recherche V mais elle ne marcherait pas pour mon exemple

en plus les donnée sont sous forme de mots, mon fichier d'origine à 55 665 mots différents et chaque jeu comprend entre 2 et 10000 de ces mots

j'aimerai (i) savoir combien de mots similaire sont présence dans les 6 jeu ou les 5 ou les 4 et dans un deuxième temps (ii) savoir quel mots sont concernés.

Bien à vous,

re-bonjour,

une proposition basée sur l'idée présentée plus tôt, lancer la macro via alt-F8, puis utiliser les filtres sur le tableau de synthèse généré.

Sub aargh()
    Dim mots(600000, 6)
    mots(0, 0) = "données"
    Set dict = CreateObject("scripting.dictionary")
    For Each ws In ActiveWorkbook.Sheets
        With ws
            If .Name <> "summary" Then
                jeu = jeu + 1
                mots(0, jeu) = .Name
                dl = .Cells(Rows.Count, 1).End(xlUp).Row
                t = .Range("A1").Resize(dl, 1)
                For i = 1 To UBound(t)
                    cle = .Cells(i, 1).Value
                    If dict.exists(cle) Then
                        ptr = dict(cle)
                    Else
                        ctr = ctr + 1
                        dict(cle) = ctr
                        ptr = ctr
                    End If
                    mots(ptr, 0) = cle
                    mots(ptr, jeu) = "x"
                Next i
            End If
        End With
    Next
    With Sheets("summary")
        .Cells.Delete
        .Range("A1").Resize(ctr + 1, 7) = mots
        .Cells(2, 8).Resize(ctr, 1).Formula = "=countif(b2:G2,""x"")"
        .Cells(2, 8).Resize(ctr, 1).Value = .Cells(2, 8).Resize(ctr, 1).Value
        .Cells(1, 8) = "presence"
        .ListObjects.Add(xlSrcRange, .Range("A1").Resize(ctr + 1, 8), xlYes).Name = _
        "Table1"
        .ListObjects("Table1").TableStyle = "TableStyleLight9"
    End With
End Sub

Salut H2SO4,

Merci je peut carrément faire quelque chose avec ça !

Petite question, J'ai essayer de faire moi-même un fichier avec 7 feuilles et de lancer la macro mais impossible elle en marche que sur ton fichier. J'ai donc inséré mes datas à la palce des tiennes et c'est tout bon. Comme tu 'la surement deviner je ne suis pas un pro des macros mais j'ai envie d'apprendre.

Peut être peux tu m'expliquer pourquoi cela n'a pas marcher sur mon fichier ?

Merci d'avance,

Je l'ai ouvert ce forum car j'aurai surement d'autres questions sur ce même sujet dans les heures/jours à venir.

bonjour,

Peut être peux tu m'expliquer pourquoi cela n'a pas marcher sur mon fichier ?

"cela n'a pas marché" est assez vague. as-tu reçu un message d'erreur ?

la macro fait l'hypothèse qu'il y a une feuille qui s'appelle "summary" et qui contiendra le résultat. Chaque autre feuille correspond à un jeu de données (max 6 jeux de données) et les données doivent se trouver dans la colonne A.

Autant pour moi le données n'était pas dans la bonne colonne !

Merci encore :)

Eldu

Salut H2So4,

Je reviens vers toi avec une petite question. Tu m'avais aidé sur ce sujet peut être y trouvera tu encore de l'intérêt :)

J'aimerai pouvoir modifier ta macro pour changer les nombres de feuilles (soit le nombre d'ensemble de données). Par exemple au lieu d'avoir seulement 6 ensemble j'aimerai en 16 ( ou 10000 ou 2 selon les besoins). D'où ma question, quelle ligne modifier sur ta macro ?

J'ai réussi a bidouiller quelque chose mais j'arrive seulement pour un nombre de page inférieur à 6.

Merci d'avance !

Eldu

bonjour,

voici le code adapté, fonctionne jusqu'à100 feuilles. remplacer 100 dans l'instruction Dim mots, si plus de feuilles à prendre en compte.

Sub aargh()
    Dim mots(600000, 100)
    mots(0, 0) = "données"
    Set dict = CreateObject("scripting.dictionary")
    For Each ws In ActiveWorkbook.Sheets
        With ws
            If .Name <> "summary" Then
                jeu = jeu + 1
                mots(0, jeu) = .Name
                dl = .Cells(Rows.Count, 1).End(xlUp).Row
                t = .Range("A1").Resize(dl, 1)
                For i = 1 To UBound(t)
                    cle = .Cells(i, 1).Value
                    If dict.exists(cle) Then
                        ptr = dict(cle)
                    Else
                        ctr = ctr + 1
                        dict(cle) = ctr
                        ptr = ctr
                    End If
                    mots(ptr, 0) = cle
                    mots(ptr, jeu) = "x"
                Next i
            End If
        End With
    Next
    With Sheets("summary")
        .Cells.Delete
        .Range("A1").Resize(ctr + 1, jeu + 1) = mots
        .Cells(2, jeu + 2).Resize(ctr, 1).FormulaR1C1 = "=countif(rc2:rc" & jeu & ",""x"")"
        .Cells(2, jeu + 2).Resize(ctr, 1).Value = .Cells(2, jeu + 2).Resize(ctr, 1).Value
        .Cells(1, jeu + 2) = "presence"
        .ListObjects.Add(xlSrcRange, .Range("A1").Resize(ctr + 1, jeu + 2), xlYes).Name = _
        "Table1"
        .ListObjects("Table1").TableStyle = "TableStyleLight9"
    End With
End Sub

Salut,

Merci de ta réponse !

J'avais essayer de modifier ce chiffre aussi mais il m'indiquait une erreur ..

J'ai réenregistrer ton script avec la valeur changé ca fonctionne c'est parfait !

Merci, bonne journée et a bientôt ;)

bonjour,

J'avais essayer de modifier ce chiffre aussi mais il m'indiquait une erreur ..

Le code a été adapté pour que tu n'aies que cette ligne à modifier.

bonjour,

un tout petit adaption, de manière qu'il ne faut plus changer ce numéro

Sub aargh2()
      Dim Mots
     ReDim Mots(600000, 0)     '<------------------
     Mots(0, 0) = "données"
     Set dict = CreateObject("scripting.dictionary")
     For Each ws In ActiveWorkbook.Sheets
          With ws
               If .Name <> "summary" Then
                    ReDim Preserve Mots(UBound(Mots), UBound(Mots, 2) + 1)     '<------------------
                    jeu = jeu + 1
                    Mots(0, jeu) = .Name
                    dl = .Cells(Rows.Count, 1).End(xlUp).Row
                    t = .Range("A1").Resize(dl, 1)
                    For i = 1 To UBound(t)
                         cle = .Cells(i, 1).Value
                         If dict.exists(cle) Then
                              ptr = dict(cle)
                         Else
                              ctr = ctr + 1
                              dict(cle) = ctr
                              ptr = ctr
                         End If
                         Mots(ptr, 0) = cle
                         Mots(ptr, jeu) = "x"
                    Next i
               End If
          End With
     Next
     With Sheets("summary")
          .Cells.Delete
          .Range("A1").Resize(ctr + 1, jeu + 1) = Mots
          .Cells(2, jeu + 2).Resize(ctr, 1).FormulaR1C1 = "=countif(rc2:rc" & jeu & ",""x"")"
          .Cells(2, jeu + 2).Resize(ctr, 1).Value = .Cells(2, jeu + 2).Resize(ctr, 1).Value
          .Cells(1, jeu + 2) = "presence"
          .ListObjects.Add(xlSrcRange, .Range("A1").Resize(ctr + 1, jeu + 2), xlYes).Name = "Table1"
          .ListObjects("Table1").TableStyle = "TableStyleLight9"
     End With
 End Sub

Ok s'est enregistré

merci à tout les deux !

Bonjour…

À tester cette adaptation de la proposition de h2so4 (salut ) pour gérer l’ajout, la suppression d’onglets.

bonjour,

@ordonc, l'original vaut mieux que la copie, vous avez utiliser le meme idée que moi, mais moi, ajoute chaque fois une colonne à l'array et vous le faitez en une fois, okay, différence mineur, mais vous ne regardez pas le nom des feuilles (VENN) et une fois que vous ecrivez cet array le nom de la nouvelle feuille cause des problemes ...

Rechercher des sujets similaires à "diagramm venn ensemble"