Trouver des données croisées dans 2 tableaux

Bonsoir à tous,

J'ai une demande très particulière qui me semble très complexe mais comme je sais qu'ici rien ne vous arrête je tente ma chance.

Je laisse le fichier test ici :

17excel-prix.xlsx (14.79 Ko)

Je dispose d'un fichier contenant 3 onglets (ORIGINAL, COLLE et TABLEAU)

Dans l'onglet "ORIGINAL" j'ai des données brut (pas de tableau mis en forme) et dans l'onglet "COLLE" j'ai un tableau contenant les mêmes données que dans l'onglet original sauf que le prénom et le nom sont parfois inversés.

Mon objectif est de créer un 3e tableau qui se trouve dans l'onglet "'TABLEAU" et de reprendre toutes les données qui sont dans original mais de reprendre les prénoms & noms qui se trouvent dans l'onglet "COLLE" .

Je m'explique :

Dans mon onglet "ORIGINAL" (voir ci-dessous) je souhaite reprendre toutes les données ! sauf le prénom et nom qui est parfois inversé. C'est toujours les mêmes mais soit ils sont dans le bon ordre soit ils sont inversés. Pour trouver le vrai ordre des prénoms noms je dois chercher dans l'onglet "COLLE". Pour m'aider je peux me fier à "Ville" car c'est exactement la même colonne sauf que dans l'onglet 'COLLE" elle se nomme team.

image

Dans mon onglet "COLLE" je dois reprendre l'ordre prénom & nom ci-dessous et tout fusionner dans mon tableau final (voir plus bas).

Mais ma question est comment je peux faire pour faire une correspondance avec le premier onglet afin de garder les colonnes ville et note et d'attribuer le bon prénom & nom qui se trouve sous ce tableau ? Sachant que tout doit être fusionné dans cet ordre la impérativement.

image

Voici le tableau final, les colonnes ville et note ne doivent pas être modifiées c'est bien dans "Prénom Nom" que je dois trouver une formule qui cherche le prénom nom figurant dans l'onglet "COLLE" en correspondance avec les données se trouvant dans l'onglet "ORIGINAL".

image

Je ne sais pas si tout est clair mais si jamais vous avez des questions n'hésitez pas. Pour finir (mais c'est mois important) si vous arrivez à rendre le MUGOSA en minuscule sauf la première lettre Mugosa. Je suis aussi preneur. La c'est un exemple mais il y a + de 9000 lignes donc ce serait pareil pour toutes les autres lignes (1ere lettre Majuscule et le reste minuscule).

Je joins un fichier si vous souhaitez vous entraîner.

Merci d'avance

Bonjour,

Formules en colonne A:
=NOMPROPRE(SUPPRESPACE(SI(ORIGINAL!A3=Tableau1[@Prénom];ORIGINAL!A3&" "&ORIGINAL!B3;ORIGINAL!B3&" "&ORIGINAL!A3)))

Cdlt

Bonjour,

Une autre solution :

Les tableaux structurés sont t_Original, t_Colle, t_Final

Sub RemplirLeTableau()

Dim I As Integer
Dim AireCollePrenom As Range, AireColleNom As Range, AireColleVille As Range
Dim TabFinal As ListObject
Dim LigneFinal As ListRow

    Set AireCollePrenom = Range("t_Colle[Prénom]")
    Set AireColleNom = Range("t_Colle[Nom]")
    Set AireColleVille = Range("t_Colle[Team]")
    Set TabFinal = Sheets("TABLEAU").ListObjects("t_Final")

    For I = 1 To AireColleVille.Count

        Set LigneFinal = TabFinal.ListRows.Add
        With LigneFinal
             If Trim(AireCollePrenom(I)) = "" Then
                .Range(1, 1) = AireColleNom(I)
             Else
                .Range(1, 1) = AireCollePrenom(I) & " " & AireColleNom(I)
             End If
             .Range(1, 2) = AireColleVille(I)
             .Range(1, 3) = SommePrenomNom(AireCollePrenom(I), AireColleNom(I), AireColleVille(I))
        End With
        Set LigneFinal = Nothing

    Next I

    With Range("t_Final").Font
        .ColorIndex = xlAutomatic
        .TintAndShade = 0
        .Bold = False
    End With

    With TabFinal
         .Sort.SortFields.Clear
         .Sort.SortFields.Add2 Key:=Range("t_Final[Prénom Nom]"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
         With .Sort
              .Header = xlYes
              .MatchCase = False
              .Orientation = xlTopToBottom
              .SortMethod = xlPinYin
              .Apply
         End With
    End With

    Set AireCollePrenom = Nothing: Set AireColleNom = Nothing: Set AireColleVille = Nothing
    Set TabFinal = Nothing

End Sub

Function SommePrenomNom(ByVal Prenom As String, ByVal Nom As String, ByVal Ville As String) As Integer

Dim I As Integer
Dim AirePn1 As Range, AirePn2 As Range, AireVille As Range, AireSomme As Range

    Set AirePn1 = Range("t_Original[Nom]")
    Set AirePn2 = Range("t_Original[Prénom]")
    Set AireVille = Range("t_Original[Ville]")
    Set AireSomme = Range("t_Original[Note]")

    SommePrenomNom = 0

    For I = 1 To AireVille.Count
        If AireVille(I) = Ville Then
         Debug.Print Ville
            If AirePn1(I) = Prenom And AirePn2(I) = Nom Then
               SommePrenomNom = CInt(AireSomme(I))
               Exit Function
            End If
            If AirePn1(I) = Nom And AirePn2(I) = Prenom Then
               SommePrenomNom = CInt(AireSomme(I))
               Exit Function
            End If
        End If
    Next I

    Set AirePn1 = Nothing: Set AirePn2 = Nothing: Set AireVille = Nothing: Set AireSomme = Nothing

End Function

Bonjour à tous !

Une proposition formule unique et dynamique :

Remarques :

1/ Suppose la parfaite correspondance entre les lignes des deux tableaux (une personne X dans le Tableau1 sera trouvée à la même ligne dans la plage de la feuille "ORIGINAL"
2/ Compte tenu du caractère dynamique de la formule, il ne sera pas possible de transformer la plage retournée en tableau structuré.
3/ La formule intègre l'absence de tableau structuré en feuille "ORIGINAL"

Bonsoir,

Merci pour vos propositions mais malheureusement cela ne fonctionne pas car les lignes ne sont pas exactement à la même place. La j'avais trié dans l'exemple mais dans le fichier joint on voit que les lignes peuvent être à une place différente. La seule correspondance c'est que le prénom et le nom ont toujours la même ville / team. Seulement Le prénom et le nom peuvent être inversés et il faudrait réussir à les remettre dans l'ordre.

Merci d'avance

9excel-prix.xlsx (14.80 Ko)

Bonjour à tous !

Merci pour vos propositions mais malheureusement cela ne fonctionne pas car les lignes ne sont pas exactement à la même place. La j'avais trié dans l'exemple mais dans le fichier joint on voit que les lignes peuvent être à une place différente.

De l'importance de joindre un classeur....... représentatif !

Par ailleurs, et contrairement à votre assertion, ce deuxième classeur présente la même caractéristique (une personne X dans le Tableau1 sera trouvée à la même ligne dans la plage de la feuille "ORIGINAL"). Cela ne facilite pas la tâche de contrôle.....

Version 2 basée sur la construction d'un identifiant permettant le tri des tableaux.

Remarques :
1/ Compte tenu du caractère dynamique de la formule, il ne sera pas possible de transformer la plage retournée en tableau structuré.
2/ La formule intègre l'absence de tableau structuré en feuille "ORIGINAL"

Rechercher des sujets similaires à "trouver donnees croisees tableaux"