XL 2016 Inverser Nom et prénom si nécessaire..

harveyspecter

XLDnaute Occasionnel
Bonjour à tous,


Je souhaite inverse le nom et prénom d'une cellule. cela à marché grace a une formule.

Cependant, il m'arrive parfois de ne pas avoir besoin de modifier la cellule car on a bien le Prénom et Nom mais je ne peut pas la modifier a la main sur 100000 lignes

Ma question et comment ajouter une formule dans une nouvelle colonne pour lui dire de garder la cellule si elle existe bien et utiliser la formule si non ?
sachant que j'ai une base existante avec les bons prénom et noms avec laquelle je peut utiliser la recherchev.

Merci d'avance a ceux qui m'aideront
 

Pièces jointes

  • test nom et prenom.xlsx
    9.5 KB · Affichages: 17

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Harveyspecter,

Vous pouvez essayer ça :
Code:
=SI(ESTERREUR(EQUIV(H11;Base;0)>0);SUPPRESPACE(DROITE(H11;NBCAR(H11)-TROUVE(" ";H11))&" "&GAUCHE(H11;TROUVE(" ";H11)));H11)
Base étant votre base de données.

Si H11 existe bien tel quel dans la base, on le garde sinon s'il n'existe pas on l'inverse.

Mais attention : JEAN Rémi et REMI Jean peuvent être deux personnes différentes. Mais je pense que c'est rare.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Je ne comprend pas, c'est excatement ce qu'il fait.

Si Nom H11 =benzema karim, il renvoie benzema karim
Si Nom H12=Pierre Dupont, il renvoie Dupont Pierre .

il répond toujours Nom Prénom

Où fais je une erreur de raisonnement ?

Et si vous voulez comme réponse Prénom Nom, il suffit de faire l'inverse :
Code:
=SI(ESTERREUR(EQUIV(H10;Tables!$C$3:$C$4;0)=1);H10;SUPPRESPACE(DROITE(H10;NBCAR(H10)-TROUVE(" ";H10))&" "&GAUCHE(H10;TROUVE(" ";H10))))

En PJ il y a les deux solutions.

NB : Votre RECHERCHEV(H10;Tables!$B$2:$C$4;2;FAUX) donne toujours #N/A, c'est pour ça que cela ne marche pas. Utiliser EQUIV le résultat est correct.
 

Pièces jointes

  • test nom et prenom(3).xlsx
    10.7 KB · Affichages: 9
Dernière édition:

harveyspecter

XLDnaute Occasionnel
salut,

j'ai surement mal du me faire comprendre.
Si Benzema Karim est dans la tables alors je ne modifie rien et si il ne l'est pas j'inverse son nom et prenom. De plus la formule ne marche pas si j'ai des noms composés séparé par un trait-ma
 
Dernière édition:

harveyspecter

XLDnaute Occasionnel
bonjour,

Pour les autres personnes ma formule marche parfaitement et je te remercie.

Cependant, si dans la table j'ai un nom composé avec un trait-ma et que la base(feuil1) il n'y en a pas cela ne marche pas c'est a dire les noms et prenoms sont inversé.
cf fichier
 

Pièces jointes

  • test nom et prenom(4) (1).xlsx
    11.8 KB · Affichages: 6

sylvanu

XLDnaute Barbatruc
Supporter XLD
Ok, compris.
De par votre premier post je pensais que les noms prénoms étaient bons dans les deux bases.
S'il peut y a voir des fautes d'orthographes, je ne vois pas de solution en formules simples.
D'autant qu'avec Valéry Giscard d'Estaing je ne vois pas par formule ou même par VBA comment faire l'inversion à coup sur.
J'espère que quelqu'un d'autre sera mieux inspiré.
 

dysorthographie

XLDnaute Accro
Bonsoir,

Fichier joint: Prénoms recensés en Belgique en 2013!

Et c'est pas une blague!



VB:
Public Type N_Pn
    Nom As String
    PNom As String
End Type
Public Cn As Object, FichierXls As String

Public Sub OpenConnetion()
'ouvre la connexion au fichier Excel
'FichierXls non et chemin complet du fichier
'AvecTitre précise si la première ligne de l'onglet est les entête de colonnes ou pas
'rzutourne la connexion
On Error Resume Next
Dim HDR
If Dir(FichierXls) = "" Then MsgBox FichierXls & vbCrLf & "Pas trouvé": Exit Sub      ' versifie si le fichier existe
Set Cn = CreateObject("ADODB.Connection") 'Instancie un objet adosb c'est mieux que d'utiliser le références
With Cn
        .Provider = "Microsoft.ACE.OLEDB.12.0"
        .ConnectionString = "Data Source=" & FichierXls & ";Extended Properties=""Excel 12.0 Xml;HDR=Yes;IMEX=1;"""
        .Open
        If Err Then
            MsgBox Err.Description
            Set Cn = Nothing
        End If
        Err.Clear
        On Error GoTo 0
End With
End Sub
Public Function OpenRecordSet(Sql) As Object 'Retourne un recordset
If TypeName(Cn) = "Nothing" Then OpenConnetion
'Retourne un RecordeSet
On Error Resume Next
Set OpenRecordSet = CreateObject("ADODB.Recordset")
OpenRecordSet.Open Sql, Cn, 1, 3 'ouvre un recordset sur la requête SQL pour la connexion en lecteur écriture et ajou dynamique
If Err Then
    MsgBox Err.Description
Set OpenRecordSet = Nothing
End If
Err.Clear
On Error GoTo 0
End Function
Function IsPrenom(Pnm As String) As Boolean
FichierXls = ThisWorkbook.Path & "\Prénom.xlsx"
Dim Rs As Object
Set Rs = OpenRecordSet("select * from [Prénom$] Where [Prénom]='" & Replace(Pnm, "'", "''") & "'")
IsPrenom = Not (Rs.EOF)
Rs.Close: Set Rs = Nothing
End Function

Sub b()
Debug.Print NomPnom("Jean-Robert Marcel", False)

End Sub

Function NomPnom(txt, PNom As Boolean)
Dim t, i As Integer, Start As Boolean, Fin As Boolean, Nm As Boolean, Ispn As Boolean
t = Split(Replace(txt, "-", " ") & " ", " ")
For i = 0 To UBound(t) - 1
Ispn = IsPrenom(CStr(t(i)))
If Not Ispn Then Nm = True
    If Ispn = PNom Then
        Start = True
        If Start = True And Fin = False Then
           If PNom Then
            If CStr(NomPnom) <> "" Then NomPnom = NomPnom & "-"
           End If
           NomPnom = NomPnom & " " & CStr(t(i))
        
        End If
    Else
        If Start = True Then Fin = True
    End If
  
Next
 If Not Nm Then
        If PNom Then
        t = Split(txt & " ", " ")
        NomPnom = ""
        For i = 0 To UBound(t) - 1
            If CBool(InStr(1, t(i), "-")) Then NomPnom = t(i)
        Next
          
        Else
             NomPnom = ""
        For i = 0 To UBound(t) - 1
            If Not CBool(InStr(1, t(i), "-")) Then NomPnom = t(i)
        Next
          
       If NomPnom = "" Then NomPnom = txt
        End If
    End If

End Function
 

Pièces jointes

  • TestNom.zip
    482.6 KB · Affichages: 21

GALOUGALOU

XLDnaute Accro
bonjour harveyspecter bonjour le forum
je n'ai pas pu ouvrir ton classeur alors réponse théorique

pour remplacer les espaces inutiles en sélectionnant la feuille active attention fait un essai sur une copie du classeur pour voir si cette procédure te convient, tous les espaces considérés inutile seront supprimés

Sub Rempl()
Dim feuil As Worksheet
Range("A1:A86").Select 'selection de la plage de cellule ou les remplacements seront effectués
For Each feuil In ThisWorkbook.Worksheets
feuil.Cells.Replace What:=" ", Replacement:=""
Next feuil
End Sub

pour accélérer une procédure

en debut de procédure juste après le sub
Application.ScreenUpdating = False
Application.DisplayStatusBar = False
Application.Calculation = xlManual
Application.EnableEvents = False
ActiveSheet.DisplayPageBreaks = False

en fin de procédure juste avant le end sub
Application.ScreenUpdating = True
Application.DisplayStatusBar = True
Application.Calculation = xlAutomatic
Application.EnableEvents = True
ActiveSheet.DisplayPageBreaks = True

cordialement
galougalou
 

dysorthographie

XLDnaute Accro
Bonjour,

Pour ce qui concerne le [-] c'est ok !

En revanche le temps de traitement est effectivement très long !

Si d'autre pouvais évalué leur solution « bancale ou pas » sur un grand nombre d’enregistrement pour le temps d’exécution .
 

Pièces jointes

  • TestNom.zip
    170.4 KB · Affichages: 12

Discussions similaires

  • Question
Microsoft 365 Nom et prénom
Réponses
3
Affichages
250

Statistiques des forums

Discussions
311 733
Messages
2 082 015
Membres
101 870
dernier inscrit
Dethomas