XL 2016 Besoin d'aide et je ne sais pas décrire ma demande

SeXMaN

XLDnaute Junior
Bonjour,

Je ne sais pas comment exprimer ce que je souhaite alors j'ai fais un excel explicatif.

Merci à tous ceux qui peuvent m'aider.
 

Pièces jointes

  • Exemple.xlsx
    8.5 KB · Affichages: 44

JHA

XLDnaute Barbatruc
Bonjour à tous,

Par formule matricielle
Code:
=SIERREUR(SI(MOD(COLONNE();2)=0;INDEX($C$4:$C$13;PETITE.VALEUR(SI(($E$4:$E$13=$C25);LIGNE($E$4:$E$13)-3);NB(SI(MOD(COLONNE($D:E);2);0))));INDEX($D$4:$D$13;PETITE.VALEUR(SI(($E$4:$E$13=$C25);LIGNE($E$4:$E$13)-3);NB(SI(MOD(COLONNE($D:E);2);0)))));"")

JHA
 

Pièces jointes

  • Exemple (2).xlsx
    10.7 KB · Affichages: 15

SeXMaN

XLDnaute Junior
C'est exactement cela mais je n'arrive pas à adapter ta formule, malgré que je fasse bien le ctrl+maj+entrée.
Est ce que tu peux me faire évoluer ta formule, j'ai simplifié mon tableau :
Je n'ai plus l'utilité de la "D" les prénoms, j'ai fait un concaténage.
Par contre est ce que l'on peut travailler sur plusieurs page excel avec des formule matricielle ?
 

chris

XLDnaute Barbatruc
Bonjour à tous

Sur 2016 possible par PowerQuery intégré

2 versions ci-joint : l'une ou nom et prénom sont concaténés l'autre selon ton modèle

Il suffit d'actualiser Tout (onglet données) si la source change
 

Pièces jointes

  • PivoterPQ.xlsx
    25.5 KB · Affichages: 11

job75

XLDnaute Barbatruc
Bonsoir SeXMaN, JHA, chris,

Une solution VBA :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim source As Range, dest As Range, tablo, d As Object, ncol&, resu(), i&, x$, n&, lig&, col&
Set source = [C3].CurrentRegion.Resize(, 3) 'à adapter
Set dest = [H4] '1ère cellule de destination, à adapter
tablo = source 'matrice, plus rapide
Application.ScreenUpdating = False
Application.EnableEvents = False
dest.Resize(Rows.Count - dest.Row + 1, Columns.Count - dest.Column + 1).ClearContents 'RAZ
'---dimensions du tableau des résultats---
Set d = CreateObject("Scripting.Dictionary")
For i = 2 To UBound(tablo)
    d(tablo(i, 3)) = d(tablo(i, 3)) + 1 'comptage
Next
If d.Count = 0 Then GoTo 1
ncol = 2 + 2 * Application.Max(d.items)
ReDim resu(1 To d.Count, 1 To ncol)
'---remplissage du tableau des résultats---
d.RemoveAll
For i = 2 To UBound(tablo)
    x = tablo(i, 3)
    If Not d.exists(x) Then
        n = n + 1
        resu(n, 1) = x
        d(x) = n 'mémorise le numéro de ligne
    End If
    lig = d(x)
    resu(lig, ncol) = resu(lig, ncol) + 2 'mémorise le numéro de colonne
    col = resu(lig, ncol)
    resu(lig, col) = tablo(i, 1)
    resu(lig, col + 1) = tablo(i, 2)
Next
'---restitution---
If ncol + dest.Column > Columns.Count Then ncol = Columns.Count - dest.Column 'sécurité
dest.Resize(n, ncol - 1) = resu
1 Application.EnableEvents = True
End Sub
Fichier joint.

Pour tester j'ai copié le tableau source sur 20 000 lignes, la macro s'exécute chez moi en 0,38 seconde.

A+
 

Pièces jointes

  • Exemple VBA (1).xlsm
    23.2 KB · Affichages: 9

SeXMaN

XLDnaute Junior
Merci à tous pour vos réponses.
@job75 merci mais je ne sais pas comment adapter ton VBA à mon excel.
Et je me rends compte avec ta formule @JHA, j n'arrive pas à l'adapter parce que je n'ai pas été précis avec mon exemple.
@chris mais je ne sais pas gérer les matrice.

En faites je pensais pouvoir adapter vos formules grâce à mes compétences. Mais je me rends compte qu'elles sont insuffisante.

Donc je vous redonne un fichier, mais cette fois c l'original en enlevant les données.
En espérant que vous accepterez de répondre au boulet que je suis.

Dans la feuille "Corres", à partir de la colonne F, doit apparaître les concatenage qui sont dans la feuille "non".

Merci
 

Pièces jointes

  • C PAS FACILE.xlsx
    50.9 KB · Affichages: 13

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 941
Membres
101 847
dernier inscrit
Djigbenou