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 :
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.
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.
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".
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
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"