[Résolu] Tester une combinatoire logique

Benamou39

XLDnaute Nouveau
Bonjour à toutes et à tous !

C'est la première fois que je viens demander de l'aide sur le site !
Je vous avoue avoir jusqu'ici réussi à me débrouiller tout seul, en allant chercher les réponses des questions, qui avaient déjà été posées par d'autres et je vous en remercie ! ;)

Dans le cadre de mon premier W je suis sec sur un sujet assez coriace et ne trouve ni la réponse ni piste potentielle (formule, VBA...) :
Je souhaiterais tester (dans une cellule) le contenu d'une (autre) cellule par rapport à une combinatoire de caractères :

ex :
AAABBBCCCDDDEEE111222333444 : "Cellule à tester"
AAABBB : "Combinatoire de caractères"

Dans ce cas de figure (lorsque les caractères de la combinatoire se suivent) c'est assez simple avec la formule contient :
=SI(ESTNUM(CHERCHE("cellule à tester";combinatoire));"OUI";"NON")

Cependant dans mon cas plusieurs contraintes sont à intégrer :
1) Les caractères de la cellule à tester ne sont pas toujours positionné au même endroit.
ex : AAA111222CCC
2) Les caractères de la combinatoire intègre des opérateurs logiques :
ET .
OU +
SAUF ( )
FACTEUR <
ex : AAA.111<CCC+888
3) la combinatoire de caractères à une "longueur" variable en termes d'opérateurs logiques et de caractères.

J'ai essayé de combiner les formules basics (ET, OU ...) avec la formule "contient" et arrive au résultat quand la combinatoire à tester reste relativement "courte".
Cependant j'ai plus de 300 cellules à tester avec plus de 200 combinatoires de caractères qui évoluent assez souvent en fonction du temps :(

Sauriez vous me donner un coup de main SVP ?

En vous remerciant par avance, vous trouverez en pièce jointe un aperçu simplifié du W à réaliser.
 

Fichiers joints

Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Tester une combinatoire logique

Bonsoir à tous


A vue de de nez, cela sent le RegExp à plein nez.

RegExp qui sera peut-être moins ardu à appréhender après la lecture de ce fil repère:
http://www.excel-downloads.com/forum/152183-vba-expressions-regulieres-patterns-pour-regexp.html

J'ajoute ce petit tutoriel (il en existe à foison sur le net)
Tutoriel pour maîtriser les expressions régulières / regex

Avec cela, tu devrais pouvoir y voir plus clair dans la résolution de ta question.
 

Benamou39

XLDnaute Nouveau
Re : Tester une combinatoire logique

Bonjour Staple1600,

Merci pour ta rapide réponse !
Je suis allé me documenter sur tes liens et maintenant je me rends compte réellement qu'Excel est vaste et me sens tout petit !

Le problème et que ma combinatoire varie à chaque cellule et ne je comprends pas comment je peux faire pour interpréter les opérateurs logique (fameux . = ET , + = OU, < = facteur, () = sauf) dans VBA.

Et pour couronner le tout mon niveau en VBA est exécrable.

Je suis perdu.
 

Staple1600

XLDnaute Barbatruc
Re : Tester une combinatoire logique

Bonsoir à tous

Benamou39
J'en appelle non pas à la tendresse mais à nos petits camarades de jeu du forum pour venir éclairer ta lanterne.
 

Docmarti

XLDnaute Occasionnel
Re : Tester une combinatoire logique

Bonjour Benamou.

Tu donnes 2 exemples simples comme AD.52.VH(DG6) et AADD87564618HSR527DG6DTDVHDO.
Pourrais-tu donner un peu plus d'exemples de données possibles et préciser le résultat attendu dans chaque cas ?

Docmarti
 

Staple1600

XLDnaute Barbatruc
Re : Tester une combinatoire logique

Bonsoir Docmarti


Merci d'entrer dans la danse ;)
On se sentait un peu seuls dans le fil.
 

Benamou39

XLDnaute Nouveau
Re : Tester une combinatoire logique

Bonjour à tous,

Merci vraiment de l'aide et de l'intérêt que vous portez à ce sujet qui encore aujourd'hui m'a posé bien des problèmes !

j'ai rajouté un exemple plus concret + des explications dans le résultats escompté dans le fichier attaché.

si besoin de plus de détails n'hésitez pas à me demander.

Merci encore,
 

Fichiers joints

Docmarti

XLDnaute Occasionnel
Re : Tester une combinatoire logique

OK. Donc on sait que la réponse doit être Oui/Non. C'est bien.
Maintenant pourrais-tu nous dire s'il y a un des 8 exemples dont la réponse est Oui et pourquoi la réponse est Oui ?

Docmarti.
 

Modeste geedee

XLDnaute Barbatruc
Re : Tester une combinatoire logique

Bonsour® benamou39 , staple1600, Roger 2327 ???

une ébauche en utilisant une fonction personnalisée avec la fonction LIKE...
=ESTDANS( "quoi", "Dans")
Capture.jpg

utilisation de caractères génériques propres à la fonction LIKE

la difficulté vient du découpage combinatoire entre fonction OU et fonction ET
pour automatisation un module dicotomique sera probablement nécessaire

voir zone verte (ligne 3 à 5) nombre de ligne pouvant varier
l'absence de découpage correspondant symbolisé par \

autre doute concernant la formulation de SAUF [!xxx]


par ailleurs il n'est pas précisé si l'ordre des termes de la combinatoire est obligatoire (j'ai supposé que oui)
 

Fichiers joints

Benamou39

XLDnaute Nouveau
Re : Tester une combinatoire logique

Bonjour à tous,

Je vois que vous avez tous des approches pertinentes !
J'ai repris la base de Modeste Geedee pour concaténer les échanges et les idées / avancées !

Docmarti,
Pour répondre à ta question, j'ai apporté des explications avec des exemples détaillés dans le fichier joint (voir onglet docmarti :))
demain je poste des exemples concret du W pour vous exposer la complexité de certaines combinatoires.

Modeste Geedee,
C'est exactement le genre de solution qu'il me faut ! l'insertion d'une simple formule du type "estdans" permettant de faire tourner un algorithme VBA je trouve ça génial ! Well done !
J'ai ajouté des remarques à ton travail (voir onglet "Modeste Geedee" :))

Petites remarques :
1) je ne souhaite pas développer/découper manuellement les combinatoires -> sources d'erreurs
2) la fonction sauf [!xxx] ne marche pas... autre solution ?
3) peu importe l'ordre des termes de la combinatoire ! ouf une contrainte en moins (enfin je pense !)

Question :
Qu'est-ce un "module dichotomique" ?

En tout cas je vois que ça commence à prendre forme et cela me rend davantage optimiste ! :cool:
 

Fichiers joints

Docmarti

XLDnaute Occasionnel
Re : Tester une combinatoire logique

demain je poste des exemples concret du W pour vous exposer la complexité de certaines combinatoires.
Jusqu'à maintenant, en tout cas, ça reste assez simple. Attendons la suite complète avec toutes les complexités possibles.


Docmarti
 

Docmarti

XLDnaute Occasionnel
Re : Tester une combinatoire logique

Quelles sont exactement les règles d'écriture ?

Car c'est ambigu. Par exemple, si
AA.87.66+AA.87.53ZZ.55<66+TI
accepte AA.87.66+AA.87.53ZZ.55.TI

W407<FKE+FKH+FKJ+FKM+FKR+FCQ.VQ54+FCQ.VQ30.YC03+FKQ.VQ04.YC00*
accepte quoi?

Docmarti
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Tester une combinatoire logique

Bonsoir Benamou39, Staple1600, Docmarti, Modeste geedee,

Juste une piste incomplète (pas traité le cas " < Facteur"), pratiquement pas vérifiée que j'avais commencé à examiner (mais c'est loin d'être un analyseur de syntaxe et/ou de grammaire).

L'idée (si tant est que ça en mérite le terme) est de transformer l'expression 'combinatoire' en une formule qui sera calculée au moyen de Application.Evaluate.

Les termes élémentaires sont remplacés par 1 ou 0 suivant leur présence ou non dans le texte de référence.

L' opérateur . de l'expression 'combinatoire' est remplacé par la multiplication, l'opérateur + par l'addition et l'opérateur SAUF (xxx) par * (1 -(xxx)). L'opérateur > n'a pas été traité.

Je ne pense pas qu'on puisse arriver à quelque chose de solide qui fonctionnerait dans tous les cas avec cette méthode, sans un bon analyseur et/ou les expressions régulières.

Les résultats de la fonction =Oui_Non( Texte où chercher ; expression 'combinatoire' ) sont dans les cellules roses.
 

Fichiers joints

Dernière édition:

Benamou39

XLDnaute Nouveau
Re : Tester une combinatoire logique

Bonsoir à tous,

Ma pomme !
Ce n'est pas une simple idée -> mais une idée de génie !

Je t'avoue ne pas avoir encore eu le temps de tester grandeur réelle car j'étais pris par d'autres sujets...
Je viens de transférer ton code VBA et compte bien tester demain :)

Par contre comment peut -on procéder avec le facteur < c'est compliqué :(

Est-il possible de "développer" en amont du code déjà réalisé la combinatoire ?
ex :
ABCD<EFG+HGI = ABCD.EFG+ABCD.HGI

Aurais-tu une autre idée magique ?

Encore merci de ton implication !
 

Benamou39

XLDnaute Nouveau
Re : Tester une combinatoire logique

Bonjour à tous :)

Ca fait bien longtemps et je vous avoue que ce sujet à bien avancé depuis !

Je remercie l'ensemble des personnes, je pense à Docmarti, staple1600 et Mapomme ayant permis d'avoir une solution traitant 80% de mes cas.

Je mets en résolu cette discussion et me permet de réouvrir un autre sujet pour les problématiques interne a ce code de second ordre,
-> Ajouter un zéro !!
-> Application.evaluate > 1 octet (255 caractères) !!

Encore merci à tous,

Benamou
 

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas