Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel
Excel Forum d'entraide sur Excel. Vos questions sur les fonctions, formules, manipulations, et tout sujet qui ne trouve pas sa place dans un sous-forum.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/04/2011, 12h32   #1
Invité de passage
 
Inscription : février 2010
Messages : 13
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 13
Points : 1
Points : 1
Par défaut analyse chaine de caractères

Bonjour,
Voici mon problème
Je dois identifier des suites de caractères dans une cellule à partir d'une liste se trouvant dans une table pour associer dans la cellule voisine un identifiant de regroupement, donné par la table qui permettra ensuite de faire des opérations sur les lignes concernées. Je donne un exemple ce sera plus clair :

exemple de table

nom, --- famille
abeille, --- insecte
canard,--- oiseau
chien,--- mammifère
cochon, --- mammifère
huitre, --- mollusque
limacon, --- gasteropode
limaçon,--- gasteropode
pie, --- oiseau

exemple d'occurrence rencontrée dans la colonne à traiter (colonne "source"),

source, --- --- famille
le canard nage, ......
les chiens aboient ......
l'huitre bavarde ......
une queue de pie ......
des essaims d'abeilles ......
escalier en limaçon .....
pattes de mouches
huitre perliere
danse du canard
entre chien et loup
3 petits cochons
bayer aux corneilles ......

Je dois retrouver dans la premiere occurence le mot "canard qui est dans la table et y associer le nom de famille "oiseau" et ainsi de suite (j'ai chque mois environ 5000 occurences à traiter et ma table sera enrichie d'un mois sur l'autre.
Merci de votre aide, si possible en évitant des macro.
pesc10 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2011, 12h52   #2
Rédacteur/Modérateur
 
Avatar de jpcheck
 
Jean-Philippe ANDRÉ
Inscription : juillet 2007
Messages : 7 863
Détails du profil
Informations personnelles :
Nom : Jean-Philippe ANDRÉ
Âge : 28
Localisation : France

Informations forums :
Inscription : juillet 2007
Messages : 7 863
Points : 10 737
Points : 10 737
Envoyer un message via MSN à jpcheck
salut,

tu peux utiliser des fonctions Excel pour cela

tres bon tutoriel complet a ce sujet
http://silkyroad.developpez.com/Excel/FonctionsExcel/
avec notamment
Citation:
'Comment retrouver la position du caractère astérisque (*) dans un chaîne.
'Si vous utilisez la fonction CHERCHE il faut mettre un tilde devant l'astérique: ~*
=CHERCHE("~*";A1)
'Ou utilisez directement la fonction TROUVE:
=TROUVE("*";A1)
tu dois pouvoir facilement l'adapter a ton cas
__________________
Pas de question technique par MP, je ne réponds pas

Mon perso ? Une vraie brute

Tutos Access, Tâches planifiées et Batch,Tables de Paramètres sous Access, Excel et Batch, Tâches planifiées et Access
jpcheck est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2011, 14h45   #3
Invité de passage
 
Inscription : février 2010
Messages : 13
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 13
Points : 1
Points : 1
Par défaut Merci JP mais...

... cela n'est pas aussi évident qu'il y parait !
J'ai regardé pas mal de fonctions, il faut leur donner de façon précise la chaine recherchée et non pas une table où chaque occurence serait testée.
Si tu penses à une fonction précise ou une combinaisonde fonction, je suis preneur car je seche d'où mon appel
P
pesc10 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2011, 15h19   #4
Membre actif
 
Homme
Inscription : juillet 2002
Messages : 108
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : juillet 2002
Messages : 108
Points : 153
Points : 153
Bonjour,

Je suis d'accord pour dire que ce n'est pas si simple. J'ai imaginé la solution en pièce jointe, mais avec un grand nombre de ligne et de colonne ce ne sera pas forcément efficace.

Si quelqu'un a plus simple, je serais curieux de voir.
Fichiers attachés
Type de fichier : xls Familles.xls (49,5 Ko, 5 affichages)
aereno est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/04/2011, 16h36   #5
Invité de passage
 
Inscription : février 2010
Messages : 13
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 13
Points : 1
Points : 1
Par défaut Merci Areno c'est un début

Comme tu le pressentais les quantités à traiter sont importantes, j'ai pour chaque vacation environ 50 000 lignes (items) environ 500 noms regroupés en 25 familles...
Ta solution montre qu'il y a des pistes et que collectivement nous pouvons avancer, merci de votre aide ...
P
pesc10 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/04/2011, 20h57   #6
Membre habitué
 
Inscription : janvier 2011
Messages : 106
Détails du profil
Informations personnelles :
Âge : 51

Informations forums :
Inscription : janvier 2011
Messages : 106
Points : 137
Points : 137
Bonsoir,

Si le sujet est toujours d'actualité ...
Avec une formule matricielle, comme en pièce jointe, on peut peut-être arriver à quelque chose!?
Attention au problème du temps de recalcul quand on utilise des formules matricielles sur des fichiers volumineux!!
Resteront les situations où 2 noms d'animaux de familles différentes (le renard et la cigogne) seront présents dans une même cellule et ceux où des noms communs sont partiellement composés de nom d'animaux (pied-de-page <> pie)

Mais bon, on ne peut pas tout gérer dans le cas présent, j'en ai peur.
Fichiers attachés
Type de fichier : xls Familles(2).xls (37,5 Ko, 7 affichages)
__________________
.
U. Milité
U. Milité est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 18/04/2011, 17h47   #7
Invité de passage
 
Inscription : février 2010
Messages : 13
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 13
Points : 1
Points : 1
Par défaut merci beaucoup

Ta formule marche impeccable, le recalculest effectivement un peu long mais je n'ai pas à le faire tous les jours

Par contre n'étant pas familier des formules matricielles je n'ai pas pu sair le déroulé du calcul, si tu peux me l'expliquer pas à pas ce serait sypa

petite remarque, j'ai noté que cela ne marchait que si la table commencait en ligne 1 sans ligne de titres.....

Merci encore
pesc10 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/04/2011, 21h33   #8
Membre habitué
 
Inscription : janvier 2011
Messages : 106
Détails du profil
Informations personnelles :
Âge : 51

Informations forums :
Inscription : janvier 2011
Messages : 106
Points : 137
Points : 137
Bonsoir,

Expliquer les formules matricielles … euh je peux tenter un début, mais il vaudrait mieux trouver un bon tuto!
Dans le fichier que j'ai déposé, essaye, en C2 et recopie vers le bas. Tu verras des #VALEUR! partout, sauf en ligne 7 (là où limaçon est sur la même ligne en H7 et A7). Cependant, si tu sélectionnes la formule dans la barre de formule et que tu appuyes sur la touche F9, tu vas voir apparaître une matrice dans laquelle tu trouveras un chiffre, comme ici, pour la formule en C2:
Code :
={#VALEUR!;#VALEUR!;4;#VALEUR!;#VALEUR!;#VALEUR!;#VALEUR!;#VALEUR!;#VALEUR!;#VALEUR!}
Même chose dans les lignes suivantes, chaque fois que le texte en A contient un des mots de la plage H1:H10.
Tu connais sans doute la fonction INDEX qui permet -sous une de ses formes- de renvoyer, au départ d'un tableau le contenu d'une cellule à l'intersection d'une ligne et d'une colonne. L'idée, ici, serait donc de chercher, dans la plage I1:I10 l'élément dont la ligne serait donnée en argument.
En colonne D, cette fois, teste la fonction suivante:
Code :
=SI(ESTNUM(CHERCHE($H$1:$H$10;$A2));LIGNE($H$1:$H$10);1)
le résultat qui s'affichera sera 1. ... Comme tantôt, sélectionne la formule et enfonce F9. Pour D2, le résultat qui s'affiche devrait être Le 3 perdu au milieu des 1 correspond au n° de la ligne dans H1:H10 où figure le premier mot commun entre A2 et la plage.
MAX permet d'extraire le chiffre le plus grand (3, ici).
Le résultat (très résumé) demande donc à Excel de donner, dans la plage I1:I10, ce qui est en ligne 3.

Voilà ce que je peux faire de moins mauvais, comme explication
__________________
.
U. Milité
U. Milité est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2011, 09h48   #9
Invité de passage
 
Inscription : février 2010
Messages : 13
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 13
Points : 1
Points : 1
Par défaut une limite à la ligne 32737...

Bonjour,

Si ton explication est très claire.
J'ai la formule, ma table dans l'onglet suivant, et ça marche . Je la tire donc vers le bas sans problème jusqu'a la ligne 32736 (ayant une ligne de titres, j'ai donc la formule 32735 fois) mais ensuite impossible de la recopier plus loin mais j'ai ce mois ci 54000 lignes à traiter !
Je ne sais pas si la limite est imposée par Excel dans la version que j'ai ou dûe à la capacité mémoire. Je vais être obligé de scinder mon fichier puis de consolider les résultats, à moins que tu ais une meilleure idée
pesc10 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2011, 10h09   #10
Membre habitué
 
Inscription : janvier 2011
Messages : 106
Détails du profil
Informations personnelles :
Âge : 51

Informations forums :
Inscription : janvier 2011
Messages : 106
Points : 137
Points : 137
Bonjour,

Je viens de tester (toujours dans le fichier que j'avais déposé) sur un peu plus de 50000 lignes et sous XL2000 ... pas de souci: un double-clic sur la poignée de recopie a reproduit la formule sur les 50155 cellules suivantes ... J'ai souvent entendu parler de problèmes de lenteur avec les formules matricielles, mais pas d'impossibilité de recopier au-delà de x lignes!?
La "table de correspondance" dans ta seconde feuille est volumineuse aussi?
__________________
.
U. Milité
U. Milité est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2011, 09h40   #11
Invité de passage
 
Inscription : février 2010
Messages : 13
Détails du profil
Informations forums :
Inscription : février 2010
Messages : 13
Points : 1
Points : 1
La table a 330 entrées, le fichier contient aussi 2 petites tables de 10 et 20 entrées pour d'autres formules (recherchev) ; les tables sont reunies dans un onglet.
pesc10 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/04/2011, 10h39   #12
Membre habitué
 
Inscription : janvier 2011
Messages : 106
Détails du profil
Informations personnelles :
Âge : 51

Informations forums :
Inscription : janvier 2011
Messages : 106
Points : 137
Points : 137
Bonjour,

On peut tester par macro, mais pour ne pas "travailler en aveugle", pourrais-tu déposer une version allégée de ton fichier (+/- 10 "phrases", une vingtaine d'items dans ta table, les autres tables aussi ... et les formules.
Je testerai sur ma machine la limite des 32736 lignes!? et essaierai avec une macro, avant de te renvoyer le tout.
__________________
.
U. Milité
U. Milité est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h08.


 
 
 
 
Partenaires

Hébergement Web