XL 2013 Créer un tableau avec Recherche double - Excel - VBA

Adrien80

XLDnaute Nouveau
Bonjour à tous,

je me permets de venir vers vous car je rencontre actuellement un problème avec un code vba.

Je vous remercie d'avance de consacrer du temps à mon problème

voici ma problématique :

J'ai actuellement un tableau avec des valeurs "Texte" de ce type :

Nom Matière Note
Paul Math Bien
Paul Français Moyen
Paul Sport Très bien
Arthur Math Mauvais
Arthur Sport très bien

Ce que je souhaiterai c'est ce type de tableau :
Sachant qu'il n'y pas de note pour toutes les matières

Nom Math Français Sport ....
Paul Bien Moyen très bien
Arthur Mauvais ____ très bien


pour le moment j'ai réussi à obtenir tous les noms sans doublon avec ce code :

Sub FiltreDoublons()
Dim Plage As Range
Dim BDD As Worksheet
Dim nbl As Long

Set BDD = Worksheets("BDD")

nbl = BDD.Cells(2, 1).End(xlDown).Row
Range(BDD.Cells(2, 1), BDD.Cells(nbl, 1)).ClearContents

nbl = Cells(2, 5).End(xlDown).Row
Set Plage = Range(Cells(2, 5), Cells(nbl, 5))
'La plage filtrée sans doublons va s'afficher
'dans la cellule A1.
Plage.AdvancedFilter Action:=xlFilterCopy, _
CopyToRange:=BDD.Range("A1"), Unique:=True
End Sub


Voici un petit fichier excel pour mieux comprendre

Auriez-vous une petite idée ?

Merci d'avance
Bonne journée à vous
Adrien
 

Pièces jointes

  • Exemple.xlsx
    10.1 KB · Affichages: 54
  • Exemple.xlsx
    10.1 KB · Affichages: 53

Nairolf

XLDnaute Accro
Re : Créer un tableau avec Recherche double - Excel - VBA

Salut Adrien, salut le forum,

Tu demandes du vba, mais je vais te proposer la formule suivante qui répond à ta demande, elle est en matricielle (validation avec CTRL+MAJ+ENTREE), à mettre en J2 et à copier sur l'ensemble du tableau résultats :
=SIERREUR(INDEX($C$2:$C$15;EQUIV($I2&J$1;$A$2:$A$15&$B$2:$B$15;0);1);"")
 

JHA

XLDnaute Barbatruc
Re : Créer un tableau avec Recherche double - Excel - VBA

Bonjour à tous,

Toujours sans macro, un fichier exemple facile à construire.
1) copier coller la liste Nom en "F7" puis Données/supprimer les doublons
2) copier coller la liste Matière en "G7" puis Données/supprimer les doublons
3)copier la liste nom en "I7"
4)sélectionner les cellules "J7:O7" puis inscrire la formule: =TRANSPOSE(G8:G13) A valider en matricielle
5) En "j8" mettre la formule: =SIERREUR(INDEX($C$2:$C$15;EQUIV($I8&J$7;$A$2:$A$15&$B$2:$B$15;0));"") A valider en matricielle
6) Tirer vers la droite et vers le bas
7) Mettre format personnalisée en "Standard;;" pour éviter les zéros


JHA
 

Pièces jointes

  • Exemple (1) recherche double.xlsx
    11.9 KB · Affichages: 37

klin89

XLDnaute Accro
Re : Créer un tableau avec Recherche double - Excel - VBA

Bonsoir à tous,:)

Avec 2 dictionnaires, restitution en Feuil2.
VB:
Option Explicit

Sub test()
Dim a, b(), i As Long, n As Long, t As Long, dico As Object
    Set dico = CreateObject("Scripting.Dictionary")
    a = Sheets("Feuil1").Range("a1").CurrentRegion.Value
    ReDim b(1 To UBound(a, 1), 1 To UBound(a, 1))
    n = 1: t = 1: b(1, 1) = "Nom"
    With CreateObject("Scripting.Dictionary")
        For i = 2 To UBound(a, 1)
            If Not dico.exists(a(i, 1)) Then
                n = n + 1: dico(a(i, 1)) = n
                b(n, 1) = a(i, 1)
            End If
            If Not .exists(a(i, 2)) Then
                t = t + 1: .Item(a(i, 2)) = t
                b(1, t) = a(i, 2)
            End If
            b(dico(a(i, 1)), .Item(a(i, 2))) = a(i, 3)
        Next
    End With
    Application.ScreenUpdating = False
    'restitution et mise en forme
    With Sheets("Feuil2")
        .Cells.Clear
        With .Cells(1).Resize(n, t)
            .Value = b
            .Font.Name = "calibri"
            .Font.Size = 10
            .VerticalAlignment = xlCenter
            .HorizontalAlignment = xlCenter
            .BorderAround Weight:=xlThin
            .Borders(xlInsideVertical).Weight = xlThin
            With .Rows(1)
                .BorderAround Weight:=xlThin
                With .Offset(, 1).Resize(, .Columns.Count - 1)
                    .Interior.ColorIndex = 36
                    .Font.Bold = True
                End With
            End With
            With .Columns(1)
                With .Offset(1).Resize(.Rows.Count - 1)
                    .Interior.ColorIndex = 38
                End With
            End With
            .Columns.ColumnWidth = 12
        End With
        .Activate
    End With
    Application.ScreenUpdating = True
End Sub
Klin89
 

JHA

XLDnaute Barbatruc
Re : Créer un tableau avec Recherche double - Excel - VBA

Bonjour à tous,

Une autre solution par TCD,

JHA
 

Pièces jointes

  • Exemple (2) recherche double par TCD.xlsx
    18.2 KB · Affichages: 48
  • Exemple (2) recherche double par TCD.xlsx
    18.2 KB · Affichages: 48

Adrien80

XLDnaute Nouveau
Re : Créer un tableau avec Recherche double - Excel - VBA

Bonjour tout le monde,

Merci pour toutes ces réponses, après avoir testé, ces solutions fonctionnent parfaitement ! ;)

Par contre, j'ai beaucoup de données ... La solution =SIERREUR(INDEX($C$2:$C$15;EQUIV($I8&J$7;$A$2:$A$1 5&$B$2:$B$15;0));"") ne convient pas car les calculs sont très longs (2711 valeurs uniques pour 37 colonnes)

La solution vba c'est pareil : "Mémoire insuffisante"

Ca m'embête car les solutions proposées conviennent parfaitement
Auriez-vous quelques conseils ?

Bonne journée
Cordialement
 

Adrien80

XLDnaute Nouveau
Re : Créer un tableau avec Recherche double - Excel - VBA

Bonjour Gosselien,

j'ai excel 2013 avec un pc W8 (4giga de ram et processeur de 2.6ghz max)

Sur mon classeur j'ai 65 533 lignes

soit 2711 valeurs uniques et 37 colonnes (selon l'exemple)

Cordialement
Adrien
 
Dernière édition:

gosselien

XLDnaute Barbatruc
Re : Créer un tableau avec Recherche double - Excel - VBA

re,

le code VBA de KLIN89 doit aller très vite, plus vite qu'une formule matricielle et moins gourmand en ressources aussi.
65000 lignes, c'est beaucoup mais le code doit néanmoins tourner, peux tu essayer avec 10.000 lignes (voire moins) et toutes tes colonnes et tu nous dis après ce que ça donne :)

P.
 

Discussions similaires

Réponses
6
Affichages
227

Statistiques des forums

Discussions
312 078
Messages
2 085 108
Membres
102 779
dernier inscrit
wrond