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.
 

Fichiers joints

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
 

Fichiers joints

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 ?
 

JHA

XLDnaute Barbatruc
Bonjour à tous,

Tu peux essayer cette formule:
Code:
=SIERREUR(INDEX($C$4:$C$13;PETITE.VALEUR(SI(($E$4:$E$13=$C25);LIGNE($E$4:$E$13)-3);COLONNE(A:A)));"")
Copier vers la droite

JHA
 

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
 

Fichiers joints

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+
 

Fichiers joints

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
 

Fichiers joints

JHA

XLDnaute Barbatruc
Bonjour à tous,

A essayer par formule, j'ai ajouté des données dans l'onglet "non" pour trouver le nom associé au mail.

JHA
 

Fichiers joints

job75

XLDnaute Barbatruc
Le fichier du post #7 c'est vraiment n'importe quoi !

C'est sûr qu'en travaillant comme ça vous n'irez pas loin...
 

Discussions similaires


Haut Bas