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 partie du texte d'une cellule.


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 163
    Par défaut Extraire une partie du texte d'une cellule.
    Bonjour, j'ai un souci de traitement de données...En fait dans une colonne j'ai plusieurs cellules avec des données comme suit:


    '{4:

    :20:6728307693

    :21:ABC1615741

    :25:112630195

    :32A:0710EUR15000,68

    -}
    ce que j aurai voulu c'est isoler la ligne :32A:0710EUR15000,68 de la cellule et la coller dans une autre colonne. Au début j'avais pensé a convertir les données texte en colonne (conversion) ms ca ne marche pas.
    Il faut peut être passer par un code VBA mais j'en ai aucune idée

    Merci pour votre aide.

    Arnaud

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    682
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 682
    Par défaut
    Bonjour,

    Il y a quelques questions importantes qui peuvent changer la manière de faire vu que tu veux répéter ce mode opératoire sur différentes cellules. Tout d'abord, est-ce que la chaîne à extraire est toujours à la fin de la cellule ?
    Est-ce que les différentes lignes comportent toujours le même nombre de caractères ?

    Un peu plus de précisions serait nécessaire mais tu peux déjà commencer à lorgner tu côté des fonctions Mid, Left, Right et tout ce qui concerne le traitement des chaînes de caractères.

    En tout cas, ça se fait plutôt bien par VBA

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 163
    Par défaut
    En fait, le problème c'est que ce n'est pas toujours à la dernière position et que la chaine de caractère n'est pas toujours de la même longueur, mais çà commence par toujours 32A.

  4. #4
    Membre Expert Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Par défaut
    bonjour arnold95 DeaD78 le forum peut être comme cela copy sur la 2 feuille
    Option Explicit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub test()
    Dim c As Range
    For Each c In Range("A1", Range("A65536").End(xlUp))
    If Left([c], 3) = "32A" Then
    c.EntireRow.Copy Destination:=Sheets(2).Range("A65536").End(xlUp)(2)
    End If: Next
    End Sub

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    682
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 682
    Par défaut
    La marche à suivre est donc la suivante.

    Dans un premier temps,tu utilises la fonction InStr qui va te permettre de chercher la postion de 32A dans la chaîne globale. Appelons Pos cette postion.

    Ensuite, tu utilises la fonction Mid sur la même chaîne globale avec comme position souhaitée de début d'extraction Pos. Cependant, tu as besoin de la longueur de ta chaîne. Donc, soit la ligne 32A a toujours la même longueur soit...

    Soit ça complique tout. Je pense qu'il va falloir d'abord connaître la longueur de la chaîne globale avec Len, extraire tout à partir de 32A jusqu'à la fin avec Mid (longueur de la chaîne Len-Mid). Là-dessus, il faut refaire un InStr pour trouver le premier espace apreès 32A. Enfin, tu trouves la longueur de ta chaîne à extraire puis tu peux enfin réaliser ton extraction grâce à Mid.

    Voilà le raisonnement. Ca peut paraître pas vraiment clair, je dois l'admettre Je te propose de te laisser jeter un oeil et, si tu n'y arrives pas, je te ferai un petit truc.

    EDIT : Bonjour laetitia. En même temps Par contre, ta technique ne marche que si les 3 premiers caractères de la cellule sont 32A. Si la chaîne se retrouve au milieu de la cellule, c'est raté. De plus, tout est copié et non seulement la ligne commençant par 32A. Je crois que ce n'est pas ce qu'arnold95 souhaite mais c'est à vérifier

  6. #6
    Membre Expert Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Par défaut
    re si comme le pense DeaD78 alors comme cela peut être !!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub test()
    Dim c As Range
    For Each c In Range("A1", Range("A65536").End(xlUp))
    If [c] Like "*32A*" Then
    Range("b65536").End(xlUp).Offset(1, 0) = c
    End If: Next
    End Sub
    copy en colonne b

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    682
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 682
    Par défaut
    Je n'avais pas pensé au Like pour vérifier la présence de 32A ! Pour moi, c'était toujours là Bien joué

    Par contre, ce n'est toujours pas ce qu'attend arnold95 je crois.

    D'après ce que j'ai compris, si 32A existe dans la cellule, il ne veut pas récupérer toute la cellule. Il veut récupérer seulement la chaîne de caractères commençant par 32A et se terminant au prochain "espace vide". C'est pour ça que j'étais parti sur des Mid, Len, InStr pour bien récupérer la chaîne de caractères nécessaire. Je ne vois pas vraiment comment résoudre ça sans fonctions qui permettent de la traiter.

    J'ai donné "l'algo" permettant de résoudre le problème mais je n'ai pas trop le temps de "pondre" quelque chose pour le moment. Je coderai quelque chose dès que j'aurai un peu de temps si laetitia ne l'a pas fait avant

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

Discussions similaires

  1. [XL-2010] Extraction d'une partie de texte d'une cellule
    Par didousama dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 26/09/2014, 17h23
  2. [XL-2010] Recuperer une partie de texte dans une cellule
    Par Mimosa777 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 21/06/2013, 17h00
  3. Réponses: 4
    Dernier message: 20/06/2008, 15h19
  4. [VBA-E] Mettre en gras une partie du texte d'une cellule
    Par clochardevobsy dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 05/05/2006, 16h25
  5. [VBA][Excel]Supprimer une partie du texte d'une grosse liste
    Par annedeblois dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 19/09/2005, 17h15

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