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 :

Extraire une chaine de caractère à l'aide de vba


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 37
    Par défaut Extraire une chaine de caractère à l'aide de vba
    Bonjour a tous

    J'ai une colonne de cellule rempli comme ci-dessous

    Service 1 / Atelier 1 / Outil 2
    Service 3 / Personnel 2 / Toto 3

    J'aimerais extraire tous les caractères par VBA en commencant de la droite et m'arreter au premier slash de sorte que chaque cellule ait
    Outil 2
    Toto 3
    Comme vous l'avez compris le nombre de caractère peut varier

    J'ai le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for numligne=2 to 896 
    feuille.cells(numligne,numcol)=Right(feuille.Cells(numligne,numcol),8)
    Merci de votre aide !

  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    tu peux utiliser la fonction Split, qui va découper ta chaine en autant de portions que de présence d'un séparateur défini

    ici, tu peux utiliser le séparateur " / " (avec les espaces)

    tu obtiens un tableau contenant tes éléments séparés, il suffit ensuite de récupérer le dernier élément du tableau
    Attention, Split crée autoritairement un tableau de base 0

    exemple de compréhension

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub Decouper()
    Dim MaChaine As String, MesMorceaux
    MaChaine = "Service 1 / Atelier 1 / Outil 2"
    MesMorceaux = Split(MaChaine, " / ")
    MsgBox MesMorceaux(UBound(MesMorceaux))  ' renvoi "Outil 2"
    End Sub

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 37
    Par défaut
    J'ai essayé split a la place de right , il prend le premier morceau en partant de la gauche

    Je voudrais la partie droite et qui s'arrête au premier / en partant de la droite et qui laisse la chaine dans la cellule.
    J'ai 900 ligne a renommer qui sont de cette forme

    Service 1 / Atelier 1 / Outil 2
    Service 3 / Personnel 2 / Toto 3

  4. #4
    Membre émérite
    Homme Profil pro
    Responsable des études(en disponibilité)
    Inscrit en
    Juin 2007
    Messages
    367
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable des études(en disponibilité)
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 367
    Par défaut [kolodz]Groupe de message non compréhensible pour cause de suppression
    J'ai essayé comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Function extraire_partiel(texto As String) As String
        separe = Split(texto, "/")
        extraire_partiel = Right(separe(2), Len(separe(2)) - InStr(separe(2), " "))
    End Function
     
     
    Sub test()
    numcol = 1
    For numligne = 2 To 23
    Cells(numligne, numcol) = extraire_partiel(Cells(numligne, numcol))
    Next
    End Sub

  5. #5
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Mon exemple extrait bien la dernière portion de la chaine ... c'est à dire la première portion en partant de la droite

    as-tu essayé mon exemple ?

  6. #6
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Si tu ne veux récupérer que la dernière donnée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    St = feuille.cells(numligne,numcol).Text
    feuille.cells(numligne,numcol).Value = Right(St, Len(St) - InStrRev(St, "/") - 1)
    Citation Envoyé par LaTOPE Voir le message
    J'ai essayé split a la place de right , il prend le premier morceau en partant de la gauche
    Il ne faut pas seulement utiliser Split.
    Il faut aussi mettre le résultat dans une variable vecteur et utiliser UBound pour sélectionner la dernière valeur de ce vecteur.
    Bien lire et comprendre le code qui t'a été donné par joe.levrai.

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 37
    Par défaut
    joe.levrai

    J'ai essayé ton exemple, ca ne marche pas
    j'ai 896 ligne a renommer ( il faut que je récupère la partie a droite au dernier /)
    il faudrait faire une boucle for
    mais je ne vois pas comment faire après pour passer a la ligne suivante et la renommer par sa partie a droite après le dernier /

  8. #8
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par LaTOPE Voir le message
    J'ai essayé ton exemple, ca ne marche pas
    Peux-tu présenter le code avec lequel tu as essayé pour qu'on puisse déterminé où tu as fait une erreur ?

    il faudrait faire une boucle for
    Etant donné qu'il y a une boucle For To dans le code de ta demande, il semblait implicite que tu savais comment faire ça.

    mais je ne vois pas comment faire après pour passer a la ligne suivante et la renommer par sa partie a droite après le dernier /
    Comme tu l'as fait dans le code de ta demande : en utilisant comme numéro de ligne la variable incrémentée par la boucle For To.

  9. #9
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 37
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub renommer()
    Dim feuille as worksheet
    Dim numligne as integer
    Dim numcol as integer
     
    Set feuille=Worksheets("Feuil2")
     
     
    St = feuille.cells(numligne,numcol).Text
    for numligne=2 to 896 
    feuille.cells(numligne,3)=Right(feuille.Cells(numligne,3),8)
    feuille.cells(numligne,3).Value = Right(St, Len(St) - InStrRev(St, "/") - 1)
    next ligne
    End sub

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

Discussions similaires

  1. extraire une chaine de caractère
    Par john_wili dans le forum Débuter
    Réponses: 5
    Dernier message: 15/04/2009, 10h23
  2. extraire une chaine de caractères
    Par Stéph utilisateur d'acces dans le forum Excel
    Réponses: 6
    Dernier message: 06/03/2009, 13h15
  3. Extraire une chaine de caractères
    Par Sam_Dalembert dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 18/08/2008, 11h58
  4. extraire une chaine de caractères
    Par nopnop dans le forum C
    Réponses: 11
    Dernier message: 10/04/2007, 17h21
  5. Extraire une chaine de caractéres
    Par fatati dans le forum Oracle
    Réponses: 4
    Dernier message: 30/01/2007, 14h39

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