XL 2019 Extraire chaîne caractère d'une cellule sans doublon avec formule

hhl

XLDnaute Nouveau
Bonjour à toutes et à tous

Avant tout merci à tous les contributeurs qui aident les gens comme moi qui débutent.

Je possède une base qui regroupe dans une cellule des noms patronymiques, maritales et prénoms.

Après avoir parcouru le forum, je ne trouve pas de formule qui pourrait supprimer les doublons des noms patronymiques en faisant une extraction par une formule.
Je précise que je ne maîtrise par le VBA.

Base Résultat souhaité via une formule
nom1 nom1, Marie nom1, Marie
nom2 nom3, Laurent nom2 nom3, Laurent

Merci par avance de votre aide
 

Pièces jointes

  • Liste sans Doublon.xls
    25.5 KB · Affichages: 21

eriiic

XLDnaute Barbatruc
Bonjour à tous,

Par formule ? Tu es sûr ? Ca va être à rallonge...
VB:
=SI(GAUCHE(GAUCHE(A2;CHERCHE(",";A2)-1);CHERCHE(" ";GAUCHE(A2;CHERCHE(",";A2)-1))-1)=STXT(GAUCHE(A2;CHERCHE(",";A2)-1);CHERCHE(" ";GAUCHE(A2;CHERCHE(",";A2)-1))+1;30);GAUCHE(GAUCHE(A2;CHERCHE(",";A2)-1);CHERCHE(" ";GAUCHE(A2;CHERCHE(",";A2)-1))-1);GAUCHE(A2;CHERCHE(",";A2)-1))&STXT(A2;CHERCHE(", ";A2);30)
eric
 

hhl

XLDnaute Nouveau
Effectivement c'est une coquille. La ligne 4 est incorrecte, c'est nom3, pierre et non nom3 nom3, pierre.
Pour la virgule, elle est présente dans ma base et générée par l'exportation de l'application.
Je te remercie pour cette information en espérant trouver une solution rapidement
 

hhl

XLDnaute Nouveau
Bonjour à tous,

Par formule ? Tu es sûr ? Ca va être à rallonge...
VB:
=SI(GAUCHE(GAUCHE(A2;CHERCHE(",";A2)-1);CHERCHE(" ";GAUCHE(A2;CHERCHE(",";A2)-1))-1)=STXT(GAUCHE(A2;CHERCHE(",";A2)-1);CHERCHE(" ";GAUCHE(A2;CHERCHE(",";A2)-1))+1;30);GAUCHE(GAUCHE(A2;CHERCHE(",";A2)-1);CHERCHE(" ";GAUCHE(A2;CHERCHE(",";A2)-1))-1);GAUCHE(A2;CHERCHE(",";A2)-1))&STXT(A2;CHERCHE(", ";A2);30)
eric
Bonjour à tous,

Par formule ? Tu es sûr ? Ca va être à rallonge...
VB:
=SI(GAUCHE(GAUCHE(A2;CHERCHE(",";A2)-1);CHERCHE(" ";GAUCHE(A2;CHERCHE(",";A2)-1))-1)=STXT(GAUCHE(A2;CHERCHE(",";A2)-1);CHERCHE(" ";GAUCHE(A2;CHERCHE(",";A2)-1))+1;30);GAUCHE(GAUCHE(A2;CHERCHE(",";A2)-1);CHERCHE(" ";GAUCHE(A2;CHERCHE(",";A2)-1))-1);GAUCHE(A2;CHERCHE(",";A2)-1))&STXT(A2;CHERCHE(", ";A2);30)
eric

Super, ça fonctionne. Chapeau bas ! Merci beaucoup
 

patricktoulon

XLDnaute Barbatruc
bonjour
sinon une fonction perso
VB:
Function NodoubleString(cel)
    Dim Tbk, TxT$, I&
    tbl = Split(Replace(cel, ",", ""), " ")
    For I = LBound(tbl) To UBound(tbl): TxT = TxT & IIf(TxT Like "*" & tbl(I) & "*", "", " " & tbl(I)): Next
    NodoubleString = TxT
End Function
formule
=NodoubleString(A2)

a étendre sur la colonne
demo2.gif
 

Hasco

XLDnaute Barbatruc
Repose en paix
Bonsoir,

Vous avez excel 2019, enregistrez vos fichiers en .xlsx (à moins d'un besoin particulier) , le format .xls est dépassé de 12 ans.
Vous pourrez utiliser PowerQuery qui est inclus dans votre version et traiter votre Base avec (voir fichier jointà
Suivant le cas PowerQuery pourrait extraire directement à partir de la base de données et traiter les données résultantes directement sans passer par votre tableau.

Attention votre étiquette de colonne comporte une espace traînante, supprimée dans le fichier joint.
Lorsque vos données changent, il suffit d'actualiser la requête.

Cordialement
 

Pièces jointes

  • Liste sans Doublon.xlsx
    18.7 KB · Affichages: 12

hhl

XLDnaute Nouveau
Bonsoir,

Vous avez excel 2019, enregistrez vos fichiers en .xlsx (à moins d'un besoin particulier) , le format .xls est dépassé de 12 ans.
Vous pourrez utiliser PowerQuery qui est inclus dans votre version et traiter votre Base avec (voir fichier jointà
Suivant le cas PowerQuery pourrait extraire directement à partir de la base de données et traiter les données résultantes directement sans passer par votre tableau.

Attention votre étiquette de colonne comporte une espace traînante, supprimée dans le fichier joint.
Lorsque vos données changent, il suffit d'actualiser la requête.

Cordialement
bonjour
sinon une fonction perso
VB:
Function NodoubleString(cel)
    Dim Tbk, TxT$, I&
    tbl = Split(Replace(cel, ",", ""), " ")
    For I = LBound(tbl) To UBound(tbl): TxT = TxT & IIf(TxT Like "*" & tbl(I) & "*", "", " " & tbl(I)): Next
    NodoubleString = TxT
End Function
formule
=NodoubleString(A2)

a étendre sur la colonne
Regarde la pièce jointe 1041956
bonjour
sinon une fonction perso
VB:
Function NodoubleString(cel)
    Dim Tbk, TxT$, I&
    tbl = Split(Replace(cel, ",", ""), " ")
    For I = LBound(tbl) To UBound(tbl): TxT = TxT & IIf(TxT Like "*" & tbl(I) & "*", "", " " & tbl(I)): Next
    NodoubleString = TxT
End Function
formule
=NodoubleString(A2)

a étendre sur la colonne
Regarde la pièce jointe 1041956
Bonjour
bonjour
sinon une fonction perso
VB:
Function NodoubleString(cel)
    Dim Tbk, TxT$, I&
    tbl = Split(Replace(cel, ",", ""), " ")
    For I = LBound(tbl) To UBound(tbl): TxT = TxT & IIf(TxT Like "*" & tbl(I) & "*", "", " " & tbl(I)): Next
    NodoubleString = TxT
End Function
formule
=NodoubleString(A2)

a étendre sur la colonne
Regarde la pièce jointe 1041956
Merci pour cette fonction mais je ne maîtrise pas du tout le VBA. Je ne suis pas expert en code. Je connais seulement les formules de base comme RECHERCHEV mais sans non plis savoir créer plusieurs fonctions imbriquées. Je me débrouille mais sans plus.
 

hhl

XLDnaute Nouveau
Re,

Et la solution PowerQuery du post #7, qui elle ne fait pas appel à VBA? L'avez-vous examinée?

Cordialement
Bonjour
Je découvre cette fonction que je connais pas
Re,

Et la solution PowerQuery du post #7, qui elle ne fait pas appel à VBA? L'avez-vous examinée?

Cordialement

Bonjour
Je découvre cette fonction et j'essaye de comprendre les formules ex ; if [BASE.1]<>[BASE.2] then [BASE.1] & " " & [BASE.2]&", "& [BASE.3] else [BASE.2]&", "& [BASE.3]
Je constate que je suis novice
Merci pour le partage de vos connaissances
 

Hasco

XLDnaute Barbatruc
Repose en paix
Re,

Dans les étapes précédentes de la requête la colonne 'BASE' à été éclatée en 3 colonnes: BASE.1 à BASE.3 en séparant la chaîne de caractère de chaque ligne sur les espaces, une colonne prénom et une colonne pour le nom.

if [BASE.1]<>[BASE.2] then [BASE.1] & " " & [BASE.2]&", "& [BASE.3] else [BASE.2]&", "& [BASE.3]

si le prénom1 est différent du prénom2 alors on prend prénom1 et prénom2 puis une virgule et le nom
sinon on prend prénom2 puis une virgule et le nom.

La fonction est sensible à la casse, c'est à dire que Pierre sera différent de pierre. On peut s'en affranchir en modifiant la fonction, mais est-ce bien nécessaire?

Cordialement
 

hhl

XLDnaute Nouveau
Re,

Dans les étapes précédentes de la requête la colonne 'BASE' à été éclatée en 3 colonnes: BASE.1 à BASE.3 en séparant la chaîne de caractère de chaque ligne sur les espaces, une colonne prénom et une colonne pour le nom.

if [BASE.1]<>[BASE.2] then [BASE.1] & " " & [BASE.2]&", "& [BASE.3] else [BASE.2]&", "& [BASE.3]

si le prénom1 est différent du prénom2 alors on prend prénom1 et prénom2 puis une virgule et le nom
sinon on prend prénom2 puis une virgule et le nom.

La fonction est sensible à la casse, c'est à dire que Pierre sera différent de pierre. On peut s'en affranchir en modifiant la fonction, mais est-ce bien nécessaire?

Cordialement
Votre formule est parfaite pour mon travail professionnel. En effet, j'utilise une base exportée depuis une application qui a le défaut de compiler les noms patronymiques, noms maritales ou usages et prénoms (séparé par une virgule) dans une seule colonne. Mon but était de supprimer la répétition des noms patronymiques qui apparaît deux fois en l'absence d'un noms maritales ou usages.
Je constate que cette fonction est pratique mais la maîtrise de la syntaxe des formules ne sera pas simple à assimiler pour moi. il faut que je fasse mes gammes pour être un expert comme vous tous !
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 105
Messages
2 085 350
Membres
102 870
dernier inscrit
Armisa