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

Macros et VBA Excel Discussion :

Modification chaîne de caractère


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 23
    Par défaut Modification chaîne de caractère
    Bonjour,

    J'ai une chaine de caractère : xxxx (espace) yyyyyyy (ex: françois MARTIN).

    Je voudrais créer une macro qui supprime toute la première partie (xxxx), ainsi que l'espace. Ce qui donnerait donc, si l'on reprend mon exemple : "MARTIN".

    Malheureusement, jene connais pas la fonction à utiliser :'(Quelqu'un pourrait-il m'aider s'il vous plaît?

    Merci d'avance

  2. #2
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Salut,

    Ce code devrait fonctionner tant que le nom ou le prénom n'est pas composé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    'Variable tableau
    dim strtmp() as string
     
    'On charge dans la variable les données séparé par un espace
    strtemp=split("françois MARTIN"," ")
     
    'On renvoi l'index 1 du tableau qui contient le NOM
    'L'index 0 contenant le prénom puisque que la variable est de base 0
    msgbox strtemp(1)

    Jérôme

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonsoir Linooo,

    Vous pouvez aussi essayer ce code en modifiant les variables (pour les lignes et colonnes) comme indiqué :

    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
    Sub Separe()
     Dim text, Tableau() As String
     Dim i, pc, pcc As Integer
     Dim pl, dl, n As Long
     
     '1ère ligne contenant vos données (vous pouvez modifier)
    pl = 2
    'dernière contenant vos données (vous pouvez modifier)
    dl = 100
    'colonne de données (vous pouvez modifier)
    pc = 1
    
       
    For n = pl To dl
    'colonne à partir de laquelle les données séparées vont être copiées (vous pouvez modifier)
    pcc = pc + 2
        text = Cells(n, pc)
        Tableau = Split(text, " ")
            
        For i = 0 To UBound(Tableau)
        Cells(n, pcc) = Tableau(i)
        pcc = pcc + 1
        Next i
    Next n
    
    
    End Sub

  4. #4
    Membre Expert
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Par défaut
    Attention à vos déclaration de variables. Par exemple, dans la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim i, pc, pcc As Integer
    Seule la variable pcc est te type Integer. Les autres (i et pc) sont de type Variant. Pour déclarer des variables sur la même ligne, il faut spécifier le type pour chacune d'entre elles. Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim i As Integer, pc As Integer, pcc As Integer

  5. #5
    Membre Expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 797
    Par défaut
    Juste une remarque concernant ton exemple : si tu veux scinder un prénom d'un nom, eh ben, je te souhaite bien du courage. C'est carrément impossible.

    Jean-Jacques Martin => Ok, l'espace sépare le prénom du nom
    Martine Paulette Depuis => Aïlle, c'est plus OK
    Jean Claude Van den Piperzelle => Aïlle Aîlle.



    Christophe

  6. #6
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 23
    Par défaut
    Merci tout le monde pour vos réponses, je me suis grandement inspiré de vos conseils pour réaliser la petite requête ci-dessous.
    Celle-ci semble fonctionner pour les cas simples. Malheureusement, j'ai essayé de la faire fonctionner sur mon tableau, et elle marche pour certains cas et d'autres pas.

    Je m'explique :
    J'ai des données similaires à celles ci-dessous à trier :
    TVLES 000294/155252/84 abb
    AARDT 000294/548963/84 abb
    DJRPT 000294/153347/84 abb...

    Lorsque je lance la macro, elle marche pour certaines lignes (très peu : lignes 2 et 38) et pas sur les autres. Pourtant, toutes les informations sont du même ordre, et présentées de façon similaire, avec le même nombre d'espaces...
    Sauriez-vous doù vient le problème s'ils vous plaît ?

    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
    Dim resultat As String
    Dim tableau() As String
    Dim i As Integer
    Dim n As Integer
     
    i = 1
     
    While i < 1235
     
    i = i + 1
    maChaine = Range("A" & i).Value
    tableau = Split(maChaine, " ")
     
    For n = 0 To UBound(tableau)
    resultat = tableau(n)
    Range("A" & i).Value = resultat
    Next n
    Wend
     
    '
    End Sub

  7. #7
    Membre Expert
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Par défaut
    Tu as le choix de plusieurs fonction de manipulation de chaîne.

    Trouver la position de l'espace avec la fonction Instring (ou InStr, sais plus... F1 te renseigneras) et récupérer la partie de droite avec la fonction Mid.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim pos As Integer
    Di Nom As String
    pos = InStr(1, maChaine, " ", vbTextCompare)
    Nom = Mid(maChaine, pos, len(maChaine)-pos
    Ou encore séparer la chaîne de deux éléments d'un tableau en utilisant la fonction Split et l'espace comme séparateur et récupérer le dernier élément du tableau ainsi créé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim tab() As String
    tab = Split(maChaine)
    Nom = tab(1)

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/07/2014, 14h30
  2. [Batch] Modification d'une chaîne de caractères dans un txt zippé
    Par Ristoune dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 16/03/2014, 19h07
  3. Réponses: 2
    Dernier message: 22/12/2011, 18h19
  4. Réponses: 7
    Dernier message: 27/04/2007, 10h01
  5. Réponses: 4
    Dernier message: 04/03/2007, 13h26

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