IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBScript Discussion :

Concatener : Chaine de Caractere Prenom Nom


Sujet :

VBScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2009
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 21
    Par défaut Concatener : Chaine de Caractere Prenom Nom
    Bonjour à tous,

    Voila j'ai besoin de vos lumières. Apres avoir fait des forums de long en large et des test dans tout les sens je suis sans reponses. J'ai donc decider d'appeller à l'aide.

    Je commence la programation en vbs et je crée un script pour l'importation du User dans Active Directiry à partir d'un formulaire.

    Mon probleme se situe au niveau de la concatenation du Nom et du Prenom de l'utilisateur.

    Je voudrais comme exemple de retour : Prenom + Nom = PNom

    Jusque la pas de souci (facile ^^)


    Or vient la problematique des Prenoms et Nom composés.

    Exemple :

    Je voudrait que "Jean Pierre Dupond" deviennent JPDupond.

    Quel est le code qui me permettrai de faire en sorte que la concatenation me mettre les 2 lettre de son prenom suivi du nom en resultat ?

    S'il s'agit d'un tiret (ou apostrophe) plutot qu'un espace comment le gerer (ex Jean-Pierre) pour qu'il me ramene le meme resultat ?

    Sachant que mon script tourne en boucle sur tout une liste de prenom, il se peut qu'il y en ai avec des espace d'autre avec des tiret d'autre avec apostrophe etc...

    En gros voici mon resonnement :

    Si le prenom n'a pas de caractere special (que j'aurai defini comme les espaces, les tirets ou apostrophe) alors ca devient premiere lettre du prenom + nom.

    S'il y a un caractere special alors on le supprime et on concatene le tout en supprimant le reste du prenom qui m'interesse pas

    Je souhaiterai un truc du genre on analyse le prenom, on supprime tout les caractere choisi defini en variable et on obtient le resultat.

    J'ai tenter plusieur methode (split, instr) mais sans succes.



    Je voudrais plus un truc du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
                For Each caractere In MonString
                    If caractere = Chr(34) OR Chr (45) Then
                        resultat = Replace(MonString, caractere, " ")
                    End If
                Next
    Et que ma variable prenom finale prenne le resultat de la suppresion de tout les caracteres de la fonction, mais je sais pas comment faire, ni comment la mettre en place (deja la fonction est elle correcte ?).

    Merci d'avance pour votre aide, j'espere avoir été suffisament precis dans ma demande

  2. #2
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    en remplaçant tout tes caractères séparateurs par un espace ...?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    Dim st
     
    St ="Jean-Pierre Durant"
    msgbox st & " => [" & ExtraitNom(st) &"]"
     
    St ="Thierry Henri"
    msgbox st & " => [" & ExtraitNom(st) &"]"
     
    St ="Jean Pierre Dupont"
    msgbox st & " => [" & ExtraitNom(st) &"]"
     
    St ="D'Henri Charle"
    msgbox st & " => [" & ExtraitNom(st) &"]"
    Function ExtraitNom( st)
    Const stSep  = "-'"
    Dim i
    Dim  stTmp
    Dim tb
    stTmp=st
    for i = 1 to len(stSep)
     stTmp=replace(stTmp,mid(stSep,1,1)," ")
     
    next
     tb =split(replace(stTmp,"  "," ")," ") 'Evite les doublons
     stNew  =""
     For i = 0 to ubound(tb)-1
      StNew = stNew & left(tb(i),1)
    next
     ExtraitNom = stNew & tb(ubound(tb) )
     
    end function

  3. #3
    Membre averti
    Inscrit en
    Octobre 2009
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 21
    Par défaut
    Trop Fort !!!!!!

    Un grand merci pour ton aide bbil, ton script est génial, il fait exactement ce que j'ai cité ci-dessus !

    Cependant (et c'est de ma faute j'ai pas preciser) je dispose de 2 champ à traiter, un pour le Nom et un autre pour le Prenom. Je dois donc concatener ces 2 champs avec 2 fonctions differentes pour en tirer un nom de login final.

    Prenons par exemple Jean-Pierre dans le premier champ recuperer de mon csv qui correspond au prenom puis Du Rand dans le 2eme champ de mon csv qui correspond au Nom

    Le Prenom est mis dans un variable v_Prenom puis le Nom dans une variable v_Nom.
    Je creer une variable v_Login pour le login final.

    Prenom = On enleve les symboles et espace et on recolle enssemble juste les premieres lettres du prenom composé

    Exemple = Jean-Pierre devient JP (Ton script me donne JPierre du coup)


    Nom = On enleve les symboles et espace et on recolle enssemble la totalité

    Exemple : Du Rand devient DuRand (Ton script me donne DRand)


    Login = Le login recolle le tout

    Exemple : Le resultat du login est JPDuRand


    Comment puis je modifier ton script pour avoir un tel resultat ? (car j'ai tenté mais suis noyé dans les fonctions lol). Je pense qu'il faut traiter le prenom avec un fonction puis ensuite le nom avec une autre pour enfin recolle tout le resultat mais je bloque.

    Question Bonus : Crois tu egalement qu'il est possible (avec un UCASE par exemple) de faire en sorte que pour le nom et le prenom on mette chaque premiere lette en majuscule et forcer le reste en minuscule ?


    En tout cas merci pour ton aide (et ceux qui souhaiterons me repondre) et aussi de ta rapidité c'est agreable, tout cela m'a permis de bien avancé dans la compréhension du vbs

  4. #4
    Membre averti
    Inscrit en
    Octobre 2009
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 21
    Par défaut
    J'ai en partie resolu ma questionen modifiant le code de bbil :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    Dim concat
     
    v_Prenom = inputbox ("Saississez le Prenom")
    v_Nom = inputbox ("Saississez le Nom")
     
     
     
    concat = v_prenom
    v_prenom_final = ExtraitNom(concat)
     
     
    concat = v_nom
    v_nom_final = ExtraitNom(concat)
     
    v_login = v_prenom_final & v_nom_final
     
    'msgbox v_prenom_final
    'msgbox v_nom_final
    msgbox v_login
     
     
    Function ExtraitNom(concat)
    Const stSep  = "-'"
    Dim i
    Dim  stTmp
    Dim tb
    stTmp=concat
    for i = 1 to len(stSep)
     stTmp=replace(stTmp,mid(stSep,1,1)," ")
     
    next
     tb =split(replace(stTmp,"  "," ")," ") 'Evite les doublons
     stNew  =""
     For i = 0 to ubound(tb)-1
    If concat = v_prenom Then
      StNew = stNew & left(tb(i),1)
    End If
    If concat = v_nom Then
      StNew = stNew & tb(i)
    End If
     
    next
     'ExtraitNom = stNew & tb(ubound(tb) )
    If concat = v_prenom Then
      ExtraitNom = stNew & left(tb(ubound(tb) ),1)
    End If
    If concat = v_nom Then
      ExtraitNom = stNew & (tb(ubound(tb)) )
    End If
    end function

    Est ce bien propre ? En tout cas ca fonctionne

    Me reste plus que la question des minuscules et Majuscules et c'est gagné

  5. #5
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    c'est plus tout à fait le même problème ...

    je verrai bien une fonction "SupprimeCarSpeciaux" que tu pourrai utiliser pour tes 2 champs et remplacer tes caractères spéciaux par des espaces ....


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Function SupprimeCarSpeciaux( st)
    Const stSep  = "-'"
    Dim i
    Dim  stTmp
     
    stTmp=st
    for i = 1 to len(stSep)
     stTmp=replace(stTmp,mid(stSep,1,1)," ")
     next
    SupprimeCarSpeciaux =replace(stTmp,"  "," ")
    end function

    Une fonction pour extraire les Initiales du prénom
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Function ExtraitInitiale (st)
    Dim stNew
    Dim tb
    Dim i
    tb =split(st," ") 
     stNew  =""
     For i = 0 to ubound(tb)-1
      StNew = stNew & left(tb(i),1)
    next
    ExtraitInitiale = ucase(StNew)
    end Function
    ... pour le reste ... un peu de réflexion devrait t'amener au résultat...

  6. #6
    Membre averti
    Inscrit en
    Octobre 2009
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 21
    Par défaut
    Salut bbil,

    Merci pour ta reponse

    Effectivement cela est une des solution, cependant j'ai gardé ton premier code et j'ai reussi à m'en sortir avec, il fait desormais ce que j'ai envie

    Cependant concernant les Majuscule je bloque juste sur les lettre du Nom (prenom OK)


    Je souhaiterai que pour le Nom il mette les premieres lettres apres des espaces ou des caracteres speciaux en majusucle et forcer le reste en minuscule.

    Exemple : "du rand" deviendrait "Du Rand" puis une fois concatener "DuRant"

    Comment puis-je proceder ?

    Voici mon code (qui fonctionne pour la concatenation) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    Dim concat
     
    v_Prenom = inputbox ("Saississez le Prenom")
    v_Nom = inputbox ("Saississez le Nom")
     
     
    If v_prenom <> "" Then
    concat = v_prenom
    v_prenom_final = UCASE(ExtraitNom(Concat))
    End If
     
    concat = v_nom
    v_nom_final = ExtraitNom(concat)
     
    v_login = v_prenom_final & v_nom_final
     
    msgbox v_prenom_final, 0, "Prenom concaténé"
    msgbox v_nom_final, 0, "Nom concaténé"
    msgbox v_login, 0, "Login Final"
     
     
    Function ExtraitNom(concat)
    Const stSep  = "-'"
    Dim i
    Dim  stTmp
    Dim tb
    stTmp=concat
    for i = 1 to len(stSep)
     stTmp=replace(stTmp,mid(stSep,1,1)," ")
     
    next
     tb =split(replace(stTmp,"  "," ")," ") 'Evite les doublons
     stNew  =""
     For i = 0 to ubound(tb)-1
    If concat = v_prenom Then
      StNew = stNew & left(tb(i),1)
    End If
    If concat = v_nom Then
     StNew = stNew & (tb(i))
     
     
     
    End If
     
    next
     'ExtraitNom = stNew & tb(ubound(tb) )
    If concat = v_prenom Then
      ExtraitNom = stNew & left(tb(ubound(tb) ),1)
    End If
    If concat = v_nom Then
     ExtraitNom = stNew & (tb(ubound(tb)) )
     
    End If
    end function
    Merci par avance

  7. #7
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    c'est une opération simple de manipulation de caractères ...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim st
    st = "DuRant"
    st =Ucase(left(st,1)) & Mid(lCase(st),2)
    msgbox st

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/06/2007, 13h14
  2. Concatenation chaine de caracteres
    Par kurgan71 dans le forum ASP
    Réponses: 9
    Dernier message: 17/04/2007, 17h29
  3. Réponses: 14
    Dernier message: 01/03/2006, 08h32
  4. Extraire un nom d'une chaine de caractere
    Par iamspacy dans le forum Linux
    Réponses: 4
    Dernier message: 03/05/2004, 21h34
  5. Concaténation de chaine de caractères
    Par joy dans le forum Linux
    Réponses: 5
    Dernier message: 07/07/2003, 13h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo