Recherche correspondance dans une chaine de texte

blondain

XLDnaute Nouveau
Bonjour à tous

Je demande votre aide car je suis bloqué dans l'elaboration d'un outil qui me faciliterais bien la vie

La partie sur laquelle je bloque est la suivante :

Dans une colonne B j'ai un numero de departement
Dans une colonne C j'ai un temps par defaut
Dans une colonne D j'ai du texte constitué de la maniere suivante correspondant à des exceptions

Exemple de chaine :
DH0-DH9,DL0-DL9;0|PO0-PO9,SP0-SP9,TA0-TA9,TQ0-TQ9;2

Les valeurs autours des tirets correspondent à une plage de départements

EX : DH0-DH3 correspond à DH0 DH1 DH2 DH3


ces differentes plages sont séparées par des ,
Le temps attribués pour ces plages est le chiffre apres le ;

exemple :
DH0-DH9,DL0-DL9;0 temps egal à 0

Les differents groupes de plages, donc avec un temps different, sont separés par des |

Si le departement n'est pas dans une des plages de cette chaine, le temps par defaut ( Colonne C) est attribué

Ce que je cherche à faire
En colonne A, recuperer le temps attribué au departement renseigné en colonne B

Exemple :

Code:
TPS	Departement	Tps par defaut	Exceptions
0	DH1	                10	           DH0-DH9,DL0-DL9;0|PO0-PO9,SP0-SP9,TA0-TA9,TQ0-TQ9;2
10	AB1	                10	           DH0-DH9,DL0-DL9;0|PO0-PO9,SP0-SP9,TA0-TA9,TQ0-TQ9;2

Exemple ligne 2 : le departement DH1 à un temps egal à 0
Exemple ligne 3 : le departement AB1 n'est pas dans mes exceptions donc le temps par defaut est attribué

Je joins un fichier d'exemple qui j'espere sera plus comprehensible et vous remercie pour votre aide.
 

Pièces jointes

  • Recherche_correspondance_ds_texte.xlsx
    10.1 KB · Affichages: 69
Dernière édition:

suistrop

XLDnaute Impliqué
Re : Recherche correspondance dans une chaine de texte

Salut,

Je ne vois pas de maniere vraiment simple pour le faire.
Ton fichier comporte combien de lignes ?
Tu dois faire ca regulierement ou juste 1 fois?

Suistrop

EDIT : Cétait sans compter sur la sagacité de JNP. La fonction Split que je ne connaissais pas est en effet tres utile ici.
 
Dernière édition:

JNP

XLDnaute Barbatruc
Re : Recherche correspondance dans une chaine de texte

Bonjour le fil :),
Avec une fonction personalisée, mais attention : avec 2 lignes d'exemple, difficile de généraliser, donc postulat : Département est toujours 2 lettres + 1 chiffre.
Si ce n'est pas le cas, et bin, bon courage pour modifier le code :rolleyes:...
Bonne journée :cool:
 

Pièces jointes

  • Recherche_correspondance_ds_texte(1).xlsm
    18.4 KB · Affichages: 75

Tibo

XLDnaute Barbatruc
Re : Recherche correspondance dans une chaine de texte

Bonjour,

Un essai, mais sans garantie. Il aurait fallu joindre un fichier avec une dizaine de lignes exemple avec le résultat attendu pour pouvoir tester.

On suppose que les codes sont tous constitués de deux lettres et d'un chiffre. A confirmer.

Essaye avec cette formule en A2 :

Code:
=SI(ESTNUM(TROUVE(GAUCHE(B2;2);D2));SI(ET(DROITE(B2)*1>=STXT(D2;TROUVE(GAUCHE(B2;2);D2)+2;1)*1;DROITE(D2)*1<=STXT(D2;TROUVE(GAUCHE(B2;2);D2)+6;1)*1);STXT(STXT(D2;TROUVE(GAUCHE(B2;2);D2);99);TROUVE(";";STXT(D2;TROUVE(GAUCHE(B2;2);D2);99))+1;1)*1;C2);C2)

à recopier vers le bas

Si pas ça, comme indiqué plus haut, reviens avec un fichier exemple plus complet.

@+

Edit : Salut Jean-Noël :) Même avis sur la taille de l'exemple !

@+
 

blondain

XLDnaute Nouveau
Bonjour

En effet, vous avez raison, j'aurais du etre plus precis et fournir un fichier avec plus d'exemple, car effectivemt; les departement ne sont pas toujours sous le meme format et l'esemble du truc presente plus de contraintes

Je vous joint donc un nouveau fichier qui reflete mieux ce que je souhaite réaliser et ce que j'ai commencé à faire.

Dans l'onglet exceptions, liste des temps et exceptions. ( ce tableau peut evoluer)
Dans l'onglet donnees, la liste de donnees pour laquelle je souhaiterais recuperer le tps (ces donnes changent continuellement)



Les exceptions du Tableau exceptions fonctionnent de la maniere suivante :


Si pour un site (colonne D) et un pays (colonne E) il y a une ville dans colonne B
> alors temps = TPS par defaut (colonne G) de cette ligne

Si pour un site (colonne D) et un pays (colonne E) il n'y a pas de ville dans colonne B et pas d'exceptions colonne G
> alors temps = TPS par defaut (colonne G) de cette ligne

Si pour un site (colonne D) et un pays (colonne E) il n'y a pas de ville dans colonne B et une ou plusieurs exceptions colonne G
> Alors temps =
si mon departement dans liste d'exceptions (colonne G)
> alors temps = chiffre apres le premier ; suivant le departement

Si mon departement dans intervalle de deparements (colonne G)
> alors temps = chiffre apres le premier ; suivant l'interval de departement trouvé

Si mon departement ni dans la liste d'exception et ni dans un interval
> alors temps = TPS par defaut (colonne G) de cette ligne

J'espere que tout ceci reste comprehensible :rolleyes:

Merci
 

Pièces jointes

  • EXEMPLE_Recherche_correspondance_ds_texte.xlsx
    14 KB · Affichages: 83
  • EXEMPLE_Recherche_correspondance_ds_texte.xlsx
    14 KB · Affichages: 89
  • EXEMPLE_Recherche_correspondance_ds_texte.xlsx
    14 KB · Affichages: 73

Tibo

XLDnaute Barbatruc
Re : Recherche correspondance dans une chaine de texte

re,

C'est sans doute clair pour toi. Beaucoup moins pour nous (enfin, surtout pour moi).

Ton nouveau fichier ne comporte toujours que deux lignes d'exemple. Tu ne nous mets pas non plus le résultat que tu attends.

Ca complique nettement le travail pour trouver une solution (formule ou vba).

Je suis prêt à jouer, mais avec davantage d'éléments.

Un fichier avec peut-être une dizaine de lignes pour lesquelles tu nous donnes le résultat attendu (avec un petit commentaire sur le pourquoi du comment) serait le bienvenu.

A te (re)lire

@+
 

JNP

XLDnaute Barbatruc
Re : Recherche correspondance dans une chaine de texte

Re Tibo :),
C'est sans doute clair pour toi. Beaucoup moins pour nous (enfin, surtout pour moi).
Peut-être un petit peu plus si tu regardes l'onglet Tableau_exceptions, mais en ce qui me concerne, c'est surtout du f... de g... :mad:...
Seule sa cellule G11 de cet onglet est sous la forme annoncée, le reste n'a rien à voir :eek:...
Dans le reste, 2 autres formes : XXXXX et XX XXX en chiffres, et tant qu'à faire, des cellules terminant par | et d'autre non, et certains en plage avec un -, certains à l'unité :(...
C'est pas une dizaine de ligne qu'il nous faut, mais au moins 500 lignes exhaustives sur tous les cas possibles :eek:...
Cerise sur le gâteau, il faut aller chercher les exceptions sur un autre onglet :mad:...
Bref, pas sûr de continuer de chercher :rolleyes:...
Bon WE :cool:
 

blondain

XLDnaute Nouveau
Re: Re : Recherche correspondance dans une chaine de texte

Désolé si vous avez eu l'impression d'un f... de g...

Si je n'ai pas presenté l'ensemble dès le depart, c'est parce que j'ai deja une formule dans l'onglet "donnees" colonne G qui cherche dans l'onglet "Tableau_exception" .
La formule fonctionne avec tout les cas sauf quand il sagit d'une plage de departement (presence de - dans le texte colonne G ).

Je pensais au debut qu'il suffirait de trouver une formule ou du vba permettant de savoir si
mon departement est compris ou egal aux valeur autours des - . Si oui, affiche le prochaine chiffre apres le ; si non affiche la valeur colonne TPS par defaut

Les plages sont toujours constitués de la meme maniere
avant le tiret valeur mini, apres le tiret valeur maxi,
Le temps attribué pour ces plages est egalement toujours formé de la meme maniere, c'est toujours la valeur apres le ; suivant cette plages.
J'avais pas pensé que le format different des plages pourrait etre un pb.:eek:
Peut etre que comme dans ma liste de donnée de cmde, le département est toujours renseigné peut etre est il possible de connaitre le format ici ?

Je pensais ensuite betement etre capable d'integrer la solution trouvée dans ma formule mais apprement ca sera largement au dessus de mes competences

J'ai détaillé mon fichier exemple si ça peut aider qq'un.



Dans la table donnee, les premieres lignes en couleur sont les 6 possibilitees à couvrir, les colonnes suivantes sont des tentatives d'explications.
Les lignes dessous sont different exemple possible.
la valeur attendu est dans la colonne H

La copie du tableau a droite dans l'onglet donnee permet juste de voir en meme temps dans la meme fueille
 

Pièces jointes

  • EXEMPLE_Recherche_correspondance_ds_texte.xlsx
    215.7 KB · Affichages: 74
  • EXEMPLE_Recherche_correspondance_ds_texte.xlsx
    215.7 KB · Affichages: 74
  • EXEMPLE_Recherche_correspondance_ds_texte.xlsx
    215.7 KB · Affichages: 86
Dernière édition:

Tibo

XLDnaute Barbatruc
Re : Recherche correspondance dans une chaine de texte

Bonjour,

A défaut de te proposer une solution complète, je te propose une formule qui permet de vérifier si le département fait partie des exceptions :

Code:
=SI(SOMME(ESTNUM(TROUVE(SI(ESTNUM(F2*1);TEXTE(ENT(F2/1000);"00")&"000-"&TEXTE(ENT(F2/1000);"00")&"999";GAUCHE(F2;2)&"0-"&GAUCHE(F2;2)&"9");Tableau_exceptions!$G$2:$G$16))*1)=0;0;EQUIV(VRAI;ESTNUM(TROUVE(SI(ESTNUM(F2*1);TEXTE(ENT(F2/1000);"00")&"000-"&TEXTE(ENT(F2/1000);"00")&"999";GAUCHE(F2;2)&"0-"&GAUCHE(F2;2)&"9");Tableau_exceptions!$G$2:$G$16));0))

La formule est matricielle.

Cette formule retourne 0 si le département ne fait pas partie des exceptions, ou retourne le rang de la cellule contenant l'exception. A gérer après avec INDEX.

Reste ensuite avec la fonction STXT à isoler la partie qui t'intéresse et à trouver le chiffre qui suit le ;

Ca pourrait venir à la place de "!!!!!!!avec tiret > ?!!!!!!" dans ta formule.

Tu es sous Excel 2007, il est donc peut-être possible de réunir le tout sous une seule formule. C'est sans doute techniquement réalisable, mais pas conseillé, car ça alourdirait considérablement la formule, la rendant alors difficilement compréhensible (et difficilement modifiable le cas échéant).

Je te laisse tenter l'adaptation.

@+
 

JNP

XLDnaute Barbatruc
Re :),
Désolé si vous avez eu l'impression d'un f... de g...
Excuses-moi, mais si tu commandes une machine pour trier les pommes et les poires, et que quand tu es livré, tu sorts au marchand qu'il y a un problème, parce que tu avais oublié de dire qu'il fallait aussi trier les cerises, les bananes et les noix de cocos, et que du coup, les cerises passent à travers, les bananes ne roulent pas et les noix de cocos restent coincées, tu veras si tu te fait rembourser la machine :mad:...
Du coup, la poire, c'est moi, et le boulot, c'est pour ma pomme :rolleyes:...

Bon, j'ai traité les pipes en trop, ait rajouté une séparation entre lettres ou tout numérique, les résultats me paraissent corrects :p...
Mais si tu as encore oublié des cas de figure, tu décortiqueras mon code VBA pour le corriger ;)...

Evidemment, ça ne fait "que" récupérer en fonction du département la valeurs des exceptions, à charge pour toi de récupérer la liste des exceptions :p.

Bon dimanche :cool:
 

Pièces jointes

  • EXEMPLE_Recherche_correspondance_ds_texte(1).xlsm
    18.9 KB · Affichages: 67

Discussions similaires

Statistiques des forums

Discussions
312 231
Messages
2 086 440
Membres
103 209
dernier inscrit
MIKA33260