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

Excel Discussion :

Chercher dans une chaine de caractere de droit à gauche? [XL-2007]


Sujet :

Excel

  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    791
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 791
    Points : 688
    Points
    688
    Par défaut Chercher dans une chaine de caractere de droit à gauche?
    Je dois découper des chaines de caractères en chaines de maximum 40 caractères
    Je ne peux pas couper n'importe comment, je dois le faire entre 2 mots

    Je cherche donc a trouver la position du dernier espace avant le 40ieme caractère. Est-ce que j'ai un moyen simple de chercher vers la gauche?
    Si je cherchais le premiere espace apres le 40ieme caractere, ca serait facile, je ferrais un search a partir de la position 40. Mais en voulant le premier avant, je me demande si j'ai une solution facile

    Si non, je peux trouver tout emplacements d'espace et puis la dedans, regarder celui qui s'approche le plus de 40, mais je vérifie avant de chercher les formules que je ne suis pas entrain de faire compliqué au lieu de faire simple

    Merci d'avance

  2. #2
    Membre émérite Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Points : 2 662
    Points
    2 662
    Par défaut
    Salut,
    Je crois pas qu'il y ai une formule simple, tu vas devoir jouer avec les Left, Find, Mid...petit exemple si le texte est en A2:
    Pour caractères avant le premier " ", dans la celulle B2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =LEFT(A2;FIND(" ";$A$2))
    Pour les caractères suivant, donc avant le 2è " ", dans la celulle C2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =MID($A$2;LEN(B2)+1;FIND(" ";$A$2;LEN(B2)+1)-LEN(B2))
    Il y a peut-être moyen de faire plus simple mais pour un vendredi après midi je peux pas faire mieux...

    A+

  3. #3
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    791
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 791
    Points : 688
    Points
    688
    Par défaut
    le search intégre une position de début de recherche
    donc si je mets
    mon texte en A1,
    en A2
    en A3
    et que j'étire en A4, A5,...,A10 ca va marcher

    je peux rajouter un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =if(résultat>40;"";résultat)
    comme ca je n'ai pas les espaces apres les 40 premiers caracteres et apres, si je fais un j'aurai la position de mon dernier espace

    Mais ca va me faire, au choix, énormement de colonne utilisées ou une formule completement inbuvable (surtout que ma chaine dépasse parfois 80 caracteres, si c'est le cas, rebelotte pour couper en cellule de 40 maximum)

    J'ai une autre solution qui est d'écrire mon texte a l'envers, et puis a trouver le premier espace vers la gauche a partir de len()-40 mais a mon avis, écrire le texte a l'envers va aussi me demander une formule compliquée

    Et le but, c'est de faire de la mise en forme préliminaire a une exportation dans un autre programme. Donc je cherche un mode d'emploi que je puisse autant que possible appliquer facilement a la 100aine de fichier excel a mettre en forme

    Donc avant de faire compliqué a manipuler par la suite, je voulais quand meme vérifier que personne n'avait une idée miracle

  4. #4
    Membre émérite Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Points : 2 662
    Points
    2 662
    Par défaut
    Je viens de penser à un truc tout bête, le "Text to Columns" (je sais pas en français version GB oblige) qui te permet de scinder ton contenu, tu choisi "espace" et le tour est joué !

  5. #5
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    791
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 791
    Points : 688
    Points
    688
    Par défaut
    Bon, je viens recuperer un peu de temps pour bosser la dessus.

    Je ne comprend pas bien comment text to columns va m'arranger
    Je peux séparer en fonction des espaces, mais l'objectif est d'avoir des champs le plus proche possible des 40 caracteres

    Mes champs textes sont des descriptifs d'articles qui viennent de la fiche fournisseur (non limitée en longueur chez la majorité de nos fournisseur) et il faut les faire passer dans notre logiciel de stock qui ne permet que deux champ de 40 caracteres.
    Si je ne garde que les deux premiers mots, mon descriptif va etre quelque peu inutile dans la majorité des cas :p

    Par exemple, si le champ d'origine est :
    "STANDARD LIQUID LB (7ml) nD= 1.488, 79.0% (for N-3E; N-4E; N-3000E; HHR-2N)"

    Je ne peux pas en faire
    "STANDARD LIQUID"

    Je dois en faire
    "STANDARD LIQUID LB (7ml) nD= 1.488,"
    "79.0% (for N-3E; N-4E; N-3000E; HHR-2N)"

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 128
    Points : 150
    Points
    150

  7. #7
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    791
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 791
    Points : 688
    Points
    688
    Par défaut
    Ah, effectivement, ca a l'air pratique

    je vais voir si j'arrive a comprendre comment ca fonctionne pour adapter ca

    <pars se renseigner sur comment marche les formules matricielle>

  8. #8
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    791
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 791
    Points : 688
    Points
    688
    Par défaut
    et bien un grand merci, j'ai trouvé comment adapter ca a mes besoins

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {=40-MATCH(" ";MID(D4;40-ROW(INDIRECT("1:"&LEN(D4)));1);0)}
    donne l'emplacement, à partir de la gauche, du dernier espace avant le 40ieme caractères

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    660
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 660
    Points : 782
    Points
    782
    Par défaut
    Bonjour,

    Belle formule, mais néanmoins avec un petit problème.

    La question est bien d'extraire un maximum de chaînes de caractères entières (entre espaces) pour un maximum de 40 caractères.
    Si le 41ème caractère est un espace, la formule n'extrait pas 40 caractères mais s'arrête à l'espace précédent.

  10. #10
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    791
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 791
    Points : 688
    Points
    688
    Par défaut
    arg, pas bete

    le plus simple pour résoudre ca risque d'etre de tester avec un if et un mid si le 40ieme caractere est ou non un espace

  11. #11
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    791
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 791
    Points : 688
    Points
    688
    Par défaut
    grml grml grml je me fais jetter quand j'essaye de l'ajouter parce que je dépasse la quantité maximum d'imbrication de fonction

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    660
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 660
    Points : 782
    Points
    782
    Par défaut
    Re,

    En principe (je n'ai pas essayé), en extrayant 41 ou 42 caractères la formule devrait renvoyer la position du 41ème caractère si celui-ci est un espace.
    Il serait aussi bon de tester cette formule (je ne l'ai pas fait) si la chaîne de caractères ne contient pas d'espace (un seul mot).

    Si tu ne parviens pas régler le problème, je veux bien chercher une formule, fort probablement non matricielle, qui pourrait répondre à ta demande.

  13. #13
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    791
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 791
    Points : 688
    Points
    688
    Par défaut
    En théorie, il n'y aura pas d'article sans aucun espace ET qui fasse plus de 40 caractere (ou du moins, il n'en existe aucun dans la liste actuelle d'article et ca parait de bon sens, c'est pas facile de faire un desriptif aussi long, sans espace et qui ai du sens)
    Hors je commence par un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =if(len(d4)<41;d4; ...)
    Donc, a priori, je suis tranquille de ce coté la

    Pour la formule, je vais encore chercher un peu a adapter ca. Si demain ca ne passe toujours pas, j'appellerai a l'aide. Merci beaucoup pour les conseils

  14. #14
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    791
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 791
    Points : 688
    Points
    688
    Par défaut
    Voilà, trouvé

    En fait, il y avait une erreur dans ma formule d'origine

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {=40-MATCH(" ";MID(A1;40-ROW(INDIRECT("1:"&LEN(A1)));1);0)}
    Ca aurait du etre 41 (on cherche forcement sur une case en plus que la zone que l'emplace qu'on selectionne au final. Sinon, on se retrouve avec un espace en dernier caractere. Ce qui est sans interet dans ce cas ci)

    Et du coup, en repartant d'une formule fausse, c'était plus compliqué de trouver la bonne :p

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {=41-MATCH(" ";MID(A1;42-ROW(INDIRECT("1:"&LEN(A1)));1);0}
    avec celle ci, on a bien de 1 a 40 caracteres; avec la limite place au caractere qui précede le dernier espace dans l'interval de 1 a 41

    Encore merci pour l'aide et pour le regard critique
    Le travail a faire est a la limite de mes connaissances/compétences actuelles et du coup, si la faille de logique est discrete, je risque de la rater

  15. #15
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    660
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 660
    Points : 782
    Points
    782
    Par défaut
    bonjour,

    Heureux que ton problème soit résolu !
    J'ai beaucoup apprécié : si la faille de logique est discrete

  16. #16
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    791
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 791
    Points : 688
    Points
    688
    Par défaut
    Ben disons que si la formule avait ramené 4 caractere maximum, j'aurai tout de suite vu que ca n'allait pas ce machin :p

    Ou si quand j'avais recomposé ma chaine globale a partir des champs de 40 caracteres, j'avais eu des différences, j'aurai aussi vu ca toute suite

    Mais la, ca ramenait maximum 39 caracteres, au lieu d'en ramener 40. Comme dans l'énorme majorité des cas, il n'y a pas d'espace en 41 emplacement, c'est normal que la majorité des chaines fassent moins de 40.
    Et je n'avais pas vu que je n'avais aucune chaine de 40 (il y avait des chaines de 39, donc visuellement, c'était pas mal)

    La logique n'était pas la bonne, mais la faille était telle que les tests de cohérence du résultats étaient bons

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

Discussions similaires

  1. [XL-2007] chercher dans une chaine de caractere une sécquence **
    Par EmmanuelleC dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 28/06/2010, 10h59
  2. Réponses: 3
    Dernier message: 14/03/2010, 00h29
  3. chercher un mot dans une chaine de caractere
    Par waldoun dans le forum Général Java
    Réponses: 2
    Dernier message: 17/05/2008, 23h30
  4. Réponses: 9
    Dernier message: 06/11/2007, 12h36
  5. Chercher une parenthese dans une chaine de caracteres
    Par timoth dans le forum VBA Access
    Réponses: 3
    Dernier message: 30/07/2007, 08h50

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