Extraire des données d'une cellule en vérifiant le résultat de l'extraction

Youri

XLDnaute Occasionnel
Bonjour à tous !

J'ai de nouveau recours à vous car j'ai un problème que je n'arrive pas à résoudre.​
Alors voilà, je souhaite pouvoir extraire simultanément jusqu'à 15 mots à partir d'une colonne avec 9 critères simultanés de vérification (ces critères vérifient que ce qui doit être extrait correspond bien à ce qui va être extrait et il suffit qu'un seul soit vrai pour que l'extraction se fasse - les autres critères étant alors structurellement faux).​
J'ai essayé d'arriver à ce résultat grâce à des formules mais je ne fais que m'en approcher car il y a toujours des "bugs" dans mon processus. Vous trouverez ci-joint le fichier que j'ai ainsi réalisé.​
J'ai imaginé une structure qui pourrait permettre de faire l'extraction correctement mais j'arrive alors à plus de 1350 colonnes ! En effet, dans ce cas il faudrait vérifier pour chaque mot le respect d'au moins un des 9 critères et puis procéder à plusieurs itérations, au moins 10 (pour vérifier que le mot à extraire est nulle part dans la chaine de caractères d'origine)​
Je suis ouvert à toutes les propositions, que ce soit sous forme de formules ou de vba (même si je suis encore débutant dans ce domaine). Je suis sous WinXP Pro SP2 avec MS Office Pro 2003.​
Je vous remercie à l'avance ! :)

Youri
 

Fichiers joints

Dernière édition:

Tibo

XLDnaute Barbatruc
Re : Extraire des données d'une cellule en vérifiant le résultat de l'extraction

Bonjour Youri,

J'ai un peu de mal à comprendre ce que tu veux extraire et ce que sont les 9 critères.

Une piste :

=ESTNUM(TROUVE("SARL";A1))+ESTNUM(TROUVE("SA ";A1&" "))+ESTNUM(TROUVE("EURL";A1))>0

La formule permet de savoir si la cellule contient un des trois mots. On peut sans problème ajouter d'autres mots.


=ESTNUM(TROUVE("SARL";A1))*1+ESTNUM(TROUVE("SA ";A1&" "))*2+ESTNUM(TROUVE("EURL";A1))*4

Cette formule permet de savoir quel mot a été détecté dans ta chaîne.

Le petit souci dans ton exemple, c'est le EURL SARL. Quel mot faut-il détecter ?


A te lire

@+
 

Youri

XLDnaute Occasionnel
Re : Extraire des données d'une cellule en vérifiant le résultat de l'extraction

Bonjour Tibo,

Merci d'avoir répondu si rapidement à mon post.​
Toutefois, cela ne résout pas complètement mon problème. En effet, celui-ci ne consiste pas tellement dans la détection d'une chaine de caractères bien précise mais dans la vérification de "l'intégrité" de la chaine détectée. Par exemple, si une cellule contient "SALAMI" et qu'on lance une recherche sur SA, la formule (cherche ou trouve, les deux étant similaires à une exception près) nous renverra 1 car effectivement "SALAMI" contient SA.​
Ta réponse m'a malgré tout donné une idée qui permet de résoudre une partie du problème , celle de ne pas chercher SA mais par exemple (SA) ou "(SA"&" " ou encore " "&"SA"&" ". Cela résout donc une partie du problème car ça permet de s'assurer de l'intégrité de la chaine trouvée si celle si est entourée d'autres chaines de caractères des deux cotés.​
Je m'explique, si par exemple SA est en fin de chaine, toutes les formules précédentes renverront automatiquement 0 car dans ce cas après SA, il n'y a ni espace, ni parenthèse, ni point, ni tout autre caractère qu'on croit nécessaire d'autoriser. Cependant, on peut tout de même envisager une solution fonctionnelle dans ce cas : créer une autre cellule qui ne vérifiera que les caractères précédents SA si SA est en fin de chaine (par ex. : =si((cherche("SA";A1;1)+nbcar("SA"))=nbcar(A1);cherche(" "&"SA";A1;1)*1+cherche("("&"SA";A1;1)*2;0). Evidemment dans le cas où SA est en début de chaine, la problématique est la même et la solution est alors du même type.​
Donc merci beaucoup d'avoir proposé une approche nouvelle qui permet de résoudre le problème de l'intégrité des données.​
Malheureusement, cela n'apporte pas réponse à toutes mes interrogations car dans le cas où il y a deux mots ou plus dont chacun peut potentiellement être extrait (dans mon fichier, le cas EURL SARL ou SARL EURL), je souhaite en fait extraire les deux mots. On peut alors recréer des colonnes pour chercher le mot supplémentaire. Mais que faire s'il y a dans la cellule "sa" et encore ailleurs "sa" ? On peut envisager de créer deux, trois, quatre ensembles de colonnes pour chercher "sa" puis à nouveau "sa" et ainsi de suite mais encore une fois cela aboutit à une trop grande quantité de colonnes.​
Ce que je souhaite donc parvenir à faire, c'est d'extraire simultanément toutes les occurrences de 15 mots à partir de la cellule d'origine selon des règles bien précises vérifiant à chaque fois l'intégrité des données extraites.​
Encore une fois, je remercie à l'avance tous ceux qui voudront m'aider et merci Tibo :).​

Youri
 

ninbihan

XLDnaute Impliqué
Re : Extraire des données d'une cellule en vérifiant le résultat de l'extraction

Bonjour le forum, Tibo et Youri,

Voilà un pb interressant pour un dimanche pluvieux, une solution par VBA semble possible. Est ce que cela t'intéresse ?
Quelques questions : quels sont les 15 mots ?
D'aprés ce que je comprend tu essaies a partir du nom d'une entité trouver sa raison sociale, est ce cela ?

Bon aprés midi,

Ninbihan
 

ninbihan

XLDnaute Impliqué
Re : Extraire des données d'une cellule en vérifiant le résultat de l'extraction

Re:

Voici un essai avec fct personnalisée, pour ajouter les valeurs à chercher il faut les ajouter dans la macro.

Bon dimanche,

Ninbihan

PS: merci à Pierre Jean qui dans un autre post m'avait découvrir le split
 

Fichiers joints

Youri

XLDnaute Occasionnel
Re : Extraire des données d'une cellule en vérifiant le résultat de l'extraction

Bonjour Ninbihan,

Merci beaucoup d'avoir proposé cette solution qui est beaucoup plus applicable que celle que j'avais imaginé avec les formules.​
Ta solution permet de faire exactement ce que je voulais, sauf dans un cas - je suis débutant en VBA et je ne parviens donc pas à faire le changement dont j'ai besoin.​
Je voudrais en effet autoriser l'extraction du mot à extraire dans le cas où celui-ci est entouré par des parenthèses {donc trois possibilités : (MOT), ~MOT) et (MOT~, où MOT représente le mot à extraire et le tilde représente soit un espace soit rien du tout [par rien du tout j'entends que soit le mot est en fin de chaine donc, après ce mot, il n'y a plus rien soit le mot est en début de chaine et donc avant ce MOT, il n'y a rien du tout non plus ; par ex: "SA) Chose" ou encore "Chose (SA"]}. Par ailleurs, est-il possible de faire en sorte que si deux mots doivent être extraits, alors ces mots le sont dans des cellules différentes (ex : A1="EURL SARL", A2="EURL" et A3="SARL", où A2 et A3 sont des cellules d'extraction). Je souhaiterais dans cette optique autoriser 5 cellules d'extraction différentes, 4 qui extraient un mot différent chacune et une 5ème qui extraie tous les autres mots restants (ex : A1="SARL SA EURL SCA SCP SCI", A2="SARL", A3="SA", A4="EURL, A5="SCA" et A6="SCP SCI")​
Dans le fichier que j'avais mis à disposition, je souhaitais extraire la raison sociale. Cependant, je ne souhaite pas me limiter uniquement à cela et je cherche par conséquent à pouvoir extraire n'importe quel mot de la même manière. Etant donné que je suis parti sur une structure d'extraction avec des formules, j'ai évoqué le chiffre de 15 mots, me disant que se serait suffisant pour pouvoir extraire presque tout type d'information [j'arrivais déjà à 13 mots avec les raisons sociales ("SA", "S.A.", "SCA", "S.C.A.", ...)].​
Donc merci beaucoup à toi Ninbihan pour ta solution qui permet de résoudre nombre de problèmes et merci à l'avance à tous ceux qui pourront m'aider.

Youri
 

ninbihan

XLDnaute Impliqué
Re : Extraire des données d'une cellule en vérifiant le résultat de l'extraction

Re:

Fonction revue et corrigée, les parenthéses sont maintenant ignorées, de plus, la fonction comprend maintenant deux arguments supplémentaires:
Le premier la cellule que tu veux traiter
le second est la cellule qui contient les chaines de caractéres à trouver séparées par un espace (ici en H12),
la troisiéme est un indice qui va de 1 à 5 correspondant à ta dernière requête,

Vois si cela peut te convenir

Bonne soirée,

Ninbihan
 

Fichiers joints

Youri

XLDnaute Occasionnel
Re : Extraire des données d'une cellule en vérifiant le résultat de l'extraction

Ninbihan bonsoir !

Merci beaucoup d'avoir apporté ces modifications à la macro, c'est exactement ce qu'il me fallait. En un mot : génial :D.

Merci encore et bonne soirée,
Youri
 

Youri

XLDnaute Occasionnel
Re : Extraire des données d'une cellule en vérifiant le résultat de l'extraction

Bonjour à tous !

Encore une fois merci Ninbihan pour la macro qui fonctionne très bien. Mais voilà, je souhaiterais savoir s'il est possible de modifier la macro en question pour qu'elle puisse extraire les données complémentaires (c'est-à-dire les données qui n'ont pas été extraites précédemment) vers une autre cellule et qu'elle efface les espaces en trop, un peu comme la fonction supprespace (ex : A1="SARL BONJOUR SA EURL TOUT SCA SCP SCI LE MONDE ", A2="SARL", A3="SA", A4="EURL, A5="SCA", A6="SCP SCI" et A7="BONJOUR TOUT LE MONDE").​

Je remercie à l'avance tous ceux qui pourront m'aider,
Youri
 
Dernière édition:

Youri

XLDnaute Occasionnel
Re : Extraire des données d'une cellule en vérifiant le résultat de l'extraction

Re :

Je reviens encore une fois sur ce post car je viens de remarquer que la macro n'accepte pas l'extraction de données quand il y a quelque chose immédiatement après la parenthèse qui ferme et/ou quand il y a quelque chose immédiatement avant la parenthèse qui ouvre (je souhaiterais en fait autoriser l'extraction dans des cas comme par exemple : machin(sarl), ou, (sarl)bidule, ou encore, texte(SA)autretexte).​

Voilà, je remercie à l'avance tous ceux qui pourront m'aider pour faire ce petit changement,
Youri
 

ninbihan

XLDnaute Impliqué
Re : Extraire des données d'une cellule en vérifiant le résultat de l'extraction

Bonjour le forum, bonjour Youri

Je profite de ma pause déjeuner pour modifier ma fct.
Ta nouvelle requête prend l'indice 6.
Le problème de (SA est aussi pris en compte


Bon après midi,

Ninbihan
 

Fichiers joints

Youri

XLDnaute Occasionnel
Re : Extraire des données d'une cellule en vérifiant le résultat de l'extraction

Ninbihan bonjour,

Encore une fois énorme merci de m'aider sur ce problème. Ca marche parfait sauf si on écrit dans la cellule d'origine ce qui suit : "SARL BONJOUR(SA) EURL TOUT SCA SCP SCI LE MONDE", dans quel cas la cellule d'indice 6 indique : "BONJOURTOUT LE MONDE" au lieu de "BONJOUR TOUT LE MONDE". Voilà, sinon tout le reste et parfait, merci.​

Youri
 

ninbihan

XLDnaute Impliqué
Re : Extraire des données d'une cellule en vérifiant le résultat de l'extraction

Bonsoir le forum, Youri

Voilà le dernier jet qui devient du gros bricolage... mais bon cela a l'air de répondre à ton besoin. A tester


Bonne soirée,

Ninbihan
 

Fichiers joints

Youri

XLDnaute Occasionnel
Re : Extraire des données d'une cellule en vérifiant le résultat de l'extraction

Bonjour le Ninbihan, bonjour le forum,

Merci beaucoup pour ce petit changement, c'est parfait. Macro très utile :).​

Meilleures salutations à tous,
Youri
 

Youri

XLDnaute Occasionnel
Re : Extraire des données d'une cellule en vérifiant le résultat de l'extraction

Bonjour Ninbihan,

Merci d'avoir réalisé cette macro. Cependant, je viens de tomber sur un problème. En effet, lorsque l'on tape par exemple SAMSA SA, la macro extrait bien SA mais les données complémentaires sont mal extraites et seulement M est affiché au lieu de SAMSA.​
Le problème est que j'ai déjà pas mal utilisé cette macro et je viens de me rendre compte de ce problème seulement maintenant. Etant donné que j'ai déjà traité près de 3000 enregistrements, je suis totalement désemparé ... des erreurs ont pu se glisser n'importe où.​
Je dispose de tous les enregistrements originaux, cependant, après avoir appliqué la macro, j'ai apporté beaucoup de changments aux enregistrements de manière manuelle. Ce serait donc bête de perdre tout ce travail que j'ai fait à posteriori. Je pense donc que la meilleure solution dans ce cas est de créer un petit code qui détecte automatiquement les enregistrements où des erreurs ont été commises à partir des enregistrements originaux. Je retrouverais par la suite sans difficulté les enregistrements contenant les erreurs et je les modifierais manuellement.​
Voilà, je remercie tous ceux qui pourront m'aider,
Youri
 

ninbihan

XLDnaute Impliqué
Re : Extraire des données d'une cellule en vérifiant le résultat de l'extraction

Bonsoir le forum, Youri,

Correction apportée...
Cependant la macro de départ correspondait à ton besoin de départ, tu comprendras bien que n'ayant pas les données je ne peux t'assurer d'un fct sur tous les cas. Désolé de t'avoir fait perdre du tps, l'idéal pour moi serait de disposer de ton fichier...

Bonne soirée,

Ninbihan
 

Fichiers joints

Youri

XLDnaute Occasionnel
Re : Extraire des données d'une cellule en vérifiant le résultat de l'extraction

Edit : Annulé. Voir fil suivant.
 
Dernière édition:

ninbihan

XLDnaute Impliqué
Re : Extraire des données d'une cellule en vérifiant le résultat de l'extraction

Bonjour le forum, Youri


La macro corrigée ne te convient pas ?
Pour détecter les erreurs éventuelles j'ai ajouté une colonne dans fichier joint
le principe étant de compter le nb de caractéres, si valeur 0 pas de souci..

Dis moi si cela peut t'aider


Bon aprés midi,

Ninbihan
 

Fichiers joints

Dernière édition:

Youri

XLDnaute Occasionnel
Re : Extraire des données d'une cellule en vérifiant le résultat de l'extraction

Edit : Annulé. Voir fil suivant.
 
Dernière édition:

Youri

XLDnaute Occasionnel
Re : Extraire des données d'une cellule en vérifiant le résultat de l'extraction

Bonjour Ninbihan, bonjour le forum,

Merci beaucoup pour le nouveau fichier, j'ai pu grâce à lui corriger les erreurs. J'ai procédé de la manière suivante : j'ai crée un fichier BilanErreurs.xls. Puis j'ai utilisé le fichier extraction4.xls pour retraiter mes données d'origine et j'ai copié le résultat dans la colonne A du fichier BilanErreurs.xls. Ensuite, j'ai utilisé le fichier extraction6.xls pour retraiter à nouveau mes données d'origine et j'ai copié le nouveau résultat dans la colonne D du fichier BilanErreurs.xls. Enfin, j'ai utilisé la formule suivante pour mettre en évidence les différences : =si(A1=D1;"";"ATT") (j'ai rajouté une mise en forme conditionnelle permettant de surligner les cellules contenant "ATT" en rouge).​
Cela m'a donc permi de corriger les erreurs induites mais m'a également permi de mettre en évidence une erreur qui est apparue dans la nouvelle version du fichier : si on entre SAMSA SA 2000 dans la cellule d'origine, le résultat colonne d'indice 6 est SAMSA SA 2 (au lieu de M 2000 dans la version 4 du fichier).​
Voilà, en tout cas énorme merci car cette macro m'a économisé énormément de temps.​

Meilleures salutations,
Youri
 

Discussions similaires


Haut Bas