Tris de texte entre slashs par type de données
Bonjour !
Décidemment, j'ai beaucoup de questions avec excel ces temps-ci !
Alooooors, je viens de recevoir une base de données à traiter et "Ô rage, Ô désespoir", je me retrouve avec une colonne qui contient plusieurs données séparées par des slashs. Et cette colonne rend pour l'instant cette BDD inexploitable.
C'est à dire que je me retrouve avec une colonne de ce style :
xx/xxx/xx
xx
xxx/xx
xx/xxx/xxx
Ces données sont de deux types (fruits / légumes pour imager)
J'ai une liste des fruits et une liste des légumes.
J'aimerais que pour chaque cellule du type : fruit/legume/legume/fruit ou legume/fruit (bref, pour toutes les compositions posibles de fruits et légumes) j'obtienne un tableau comme ça.
composition panier_______FRUIT 1___FRUIT 2____LEG 1___LEG 2___FRUIT 3___LEG 3
abricot/courgette/pomme___abricot____pomme___courgette
carotte/fraise____________fraise______________carotte
Voici le fichier en question :
https://www.excel-pratique.com/~files/doc2/panierfruits.xls
Si qqn peut me venir en aide, ça me serait d'une aide précieuse
Merci d'avance !
bonjour au forum ,
Une solution ici avec des colonnes intermédiaires .
A adapter à ton fichier.
https://www.excel-pratique.com/~files/doc2/Copie_de_panierfruits_maxibestof.xls
Si problème , n'hésite pas à revenir .
Amicalement
Hello,
Tout d'abord, merci d'avoir pris le temps de m'aider, c'est très aimable de ta part !
Je suis en train de décortiquer tout ce que tu as fait afin d'ensuite l'appliquer à mon fichier.
Cependant, je ne retrouve pas la fonction STEXTE dans mon Excel 2003 EN
il y a bien MID qui est l'équivalent anglais de la fonction fr STXT, mais il ne me semble pas que ça soit la même fonction
Re ,
Désolé , je me suis servi de la version 2007,où il existe la formule "stexte".Elle n'est pas dans les versions antérieures.
Mais tu peux arriver au même résultat en procédant ainsi :
Tu copies ta colonne "I" et la colle en colonne "C".
Tu sélectionnes "C7:C12"
Puis tu vas sous l'onglet "données" "convertir"
tu coches "délimité" puis "suivant"
Sous autre, tu saisis "/" et coche bien sur "autre", puis "suivant".
puis "terminé"
L'inconvénient de cette solution :il faudra refaire cette opération si tu modifies ta liste de départ.Avec la formule stexte,la mise a jour était automatique.
Amicalement
Bonsoir
Devant l'absence de réponse, je me permet d'intervenir..
En effet, cette fonction, développée par Laurent Longre en vue d'intégration pour excel 2007 dans les Macros complémentaires Morefunc n'est pas dans excel avant 2007.Elle est téléchargeable en français et semble-t-il, également en version anglaise sur:
http://www.01net.com/telecharger/windows/Bureautique/tableur/fiches/32813.html
Cependant, si tu n'as pas cette possibilité, tu peux encore t'en tirer en convertissant les formules que j'ai adapté sur le fichier en page "Sans_Morefunc" du fichier joint.
https://www.excel-pratique.com/~files/doc2/Q9DwICopie_de_panierfruits_maxibestof.xls
Edit; bonjour haonv..juste 4mn de retard (pour moi, bien sur)
second Edit: Je suis en 2003 et cette macro complémentaire fonctionne parfaitement
Cordialement
Bonsoir a tous
Bonsoir Amadeus,
j'étais en train de chercher une autre solution avec stxt genre :
=STXT($I7;1;CHERCHE("/";$I7&"/";1)-1) en C7
Je suis en train de l'adapter a D7 et E7,mais je bute à un endroit. Je chercherai plus tard;Ce soir je n'arrive plus a me concentrer.
Edit: Amadeus , je viens de regarder ton fichier;j'abandonne vraiment pour ce soir...
Bonne soirée a tous.
bonjour le forum ,
Bien qu'Amadeus ait déjà résolu le problème (comme souvent), je joins tout de même ,pour le fun, une autre solution.
https://www.excel-pratique.com/~files/doc2/Copie_de_panierfruits_maxibestof_excel_2003.xls
Amicalement
Bonjour haonv
Je reste tout de même persuadé que ton premier fichier est le bon et que maxibestof a, vu sa simplicité d'installation et d'utilisation, tout intérêt à Télécharger Morefunc sur sa version 2003 pour l'utiliser.
Cordialement
Bonjour !
Merci pour toutes ces réponses !
En effet, cette fonction STEXTE m'aurait beaucoup aidé, seulement, je n'ai pas la possibilité d'installer celle-ci (cela nécessite des droits administrateurs que je n'ai pas).
D'autre part, puisque mes collègues ont Excel 2003 EN et que je me dois de leur laisser un fichier utilisable, je vais devoir me passer de cette fonction. Ca serait "compliqué" pour un stagiaire, de leur demander de télécharger des fonctions Excel. D'autant plus qu'ils n'ont pas tous eux non plus, les droits administrateurs requis.
Dans tout les cas, je vous remercie du temps que vous avez pris pour moi, et je m'en vais de ce pas étudier les solutions alternatives proposées !
Je sens que la café va m'être utile ce matin !
Bonne journée à vous !
Merci à tous, je vous tiens au courant.
=IF(ISERROR(MID($I7,1,SEARCH("/",$I7&"/",1)-1)),"",MID($I7,1,SEARCH("/",$I7&"/",1)-1))
Me revoilà déjà !
Dans ta formule, une seule chose me gêne c'est l'utilisation du &"/" dans la formule SEARCH au moment de spécifier la cellule de référence
D'autre part, si j'ai bien compris, tu obtiens de la fonction search la position de la lettre juste avant le slash, ce qui équivaut au nombre de caractères du "fruit" ou du "légume", et la fonction MID te renvoie ce mot !
C'es très ingénieux pour un novice d'Excel comme moi !
Re ,
petite explication:
Dans ta formule, une seule chose me gêne c'est l'utilisation du &"/" dans la formule SEARCH au moment de spécifier la cellule de référence
Comme tu l'a compris ,je me sers de "/" pour trouver la dernière lettre du mot qui précède ce signe.
Je rajoute donc "/" apres le dernier mot de la liste pour pouvoir cibler ce dernier mot.
par exemple :
-"pomme/poire" devient "pomme/poire/"
Bonne soirée
Je ne savais pas qu'on pouvait "coller" des caractères en utilisant &.
C'est bon à savoir à savoir ça ! Merci !
D'autre part, depuis hier, je me suis attaqué à ta deuxième formule.
=IF($F7<1,"",INDIRECT(ADDRESS(ROW(),SMALL((($C7:$E7)=($A$7:$A$11))*COLUMN($C7:$E7),16-$F7))))
Après avoir décortiqué chacune des fonctions que tu as utilisé, je n'ai tjrs pas réussi à l'assimiler.
En effet, deux choses me posent problème :
- la plage de données pour la fonction SMALL : comment se fait-il qu'à la place de la plage de données demandée, tu rentres une formule du type ($xX:$xX)=($x$X:$x$X)*COLUMN($xX:$xX). Je cherche à comprendre ton raisonnement / ta logique et ce que cela entraîne dans la formule !
- le rang de la valeur à renvoyer pour cette même fonction. Pourquoi 16 ici ? Pourquoi ce chiffre reste-t'il identique dans toute la colonne et pourquoi est il de 17,10 ou 11 dans les colonnes vers la droite ?
Merci de ton aide !
Bonjour a tous,
je vais tenter de t'apporter quelques explications:
(($C7:$E7)=($A$7:$A$11))*COLONNE($C7:$E7)
comme tu as une formule matricielle ,tu compares C7 à A7;A8;A9...A11, puis D7 à A7;A8;A11...etc, en affichant vrai ou faux à chaque comparaison .
Le résultat se présente ensuite comme cela :
qui se traduit ici:(vrai;faux;faux....)*colonne(C7:E7)
"C" étant la 3° colonne ,"D" la 4° et "E" la 5° .(vrai;faux;faux....)*(3;4;5)
Vraie prend la valeur numérique "1" et faux la valeur "0".Les 5 résultats des comparaisons de C7sont multipliées par 3 ,les 5 de D7 par 4 et les 5 de E7 par 5. Tu as donc : (3;0;0;...)
Tu as donc créé une plage de données faite de 15 valeurs nulles ou positives.
Ensuite pourquoi 16?
comme tu viens de le voir ,on obtient une liste de choix (3;0;0...)
En I7 , tu veux la plus petite valeur mais >0
Tu as du remarquer que le choix se fait ,en I7, entre 15 résultats( 5 possibilités en colonne C et 3 possibilités en ligne 7).
En F7 tu as le nombre de fois ou un "fruit" apparait dans la liste , ici "1".
tu as donc 14 fois "0".
15 résultats -"1"(valeur de F7)=14 °rang ce qui représente la dernière valeur nulle.Pour avoir la première non nulle ,il faut rajouter 1:
15-F7+1=16-F7
En I8 , il faut la valeur juste supérieure donc 16-F7 +1.
En L7 pourquoi "10"-G7 ?
Tu as 9 résultats(3 possibilités colonne D et 3 possibilités lignes 7)
Espérant t'avoir un peu aidé; pas facile d'expliquer...
N'hésite pas à revenir si nécessaire ...
Amicalement
Hello, déjà merci de m'avoir répondu, c'est très gentil de ta part !
En fait un de mes problèmes et que d'habitude je vois écris juste un"=" en début de fonction et pas au sein même d'une fonction !
Là ça me trouble un peu.
D'autre part, si j'ai bien compris ta logique, tu testes si dans la ligne $C7:$E7
apparait à un moment les fruits de la colonne $A$7:$A$11.
Donc premièrement, pourquoi cela te renverrait des "vrai" ou "faux" comme tu me l'as expliqué ? Sont-ils "visibles" ces "vrai" ou "faux"?
(en ayant admis que cela renvoyait des "vrai" ou "faux", j'ai suivi ton raisonnement.
Si j'ai bien compris donc, pour la colonne (C7:E7)=($A$7:$A$11)
j'aurai en résultat (vrai,faux,faux)
pour la colonne (C8:E8)=($A$7:$A$11)
j'aurai en résultat (vrai,faux,faux)
pour la colonne (C9:E9)=($A$7:$A$11)
j'aurai en résultat (vrai,vrai,vrai)
pour la colonne (C10:E10)=($A$7:$A$11)
j'aurais en résultat (faux,faux,vrai)
pour la colonne (C11:E11)=($A$7:$A$11)
j'aurais en résultat (faux,faux,faux)
Ce qui me donnerait la matrice suivante :
vrai,faux,faux
vrai,faux,faux
vrai,vrai,vrai
faux,faux,vrai
faux,faux,faux
haonv a écrit :"Vraie prend la valeur numérique "1" et faux la valeur "0".
Pourquoi prendrait-elle cette valeur numérique ? cela se fait automatiquement ? As-tu rentré une formule ?
En ayant admis que cela renvoyait Vraie prend la valeur numérique "1" et faux la valeur "0"
Cela devrait me donner la matrice suivante.
100
100
111
001
000
Et là, il faut multiplier par colonne($C7:$E7) ou (3,4,5)
comment effectues-tu cette multiplication ? N'y a t'il pas un pblm de rang entre les deux matrices ?
_____345
100__???
100__???
111__???
001__???
000__???
Re ,
je vais tenter d'etre plus clair
(C7:E7)=($A$7:$A$11)
pour I7 :
tu compares C7 à A7puis à A8 puis à A9 puis à A10 puis à A11, ce qui va te donner :
(vrai;faux;faux faux;faux)
tu compares ensuite D7 de la même façon à A8 puis A9 etc..ce qui va te donner :
(faux;faux;faux;faux;faux)
tu compares ensuite E7 de la même façon à A8 puis A9 etc..ce qui va te donner :
(faux;faux;faux;faux;faux)
lorsque tu mets un signe opérateur apres ,ou avant, ces "vrais" ou "faux" ,excel lors donnent les valeurs 1 ou 0 sans aucune autre manip.(voir petit fichier joint: https://www.excel-pratique.com/~files/doc2/pour_maxibestof.xls)
Les 5 resultats de comparaisons de C7 (vrai;faux;faux;faux;faux)sont multipliés par "colonne C7") : (1*3;0*3;0*3;0*3;0*3) ce qui donne : (3;0;0;0;0)
les 5 résultats de comparaison de D7 (faux;faux;faux;faux;faux)sont multipliés par "colonne D7" :ce qui donne (0;0;0;0;0)
les 5 résultats de comparaison de E7 (faux;faux;faux;faux;faux)sont multipliés par "colonne E7" :ce qui donne (0;0;0;0;0)
excel regroupe ces 3 resultats pour obtenir la base (3;0;0;0;0;0;0;0;0;0;0;0;0;0;0)
connais tu les fonctions colonnes et lignes ?
colonne(C7) =3 ."C" est la troisième colonne
ligne(C7)=7 ."7"est la 7° ligne
Amicalement
Hello,
En effet avec ces explications complémentaires je suis venu à bout de cette formule et ai pu l'adapter à mon fichier !
Don c'est parfait et je t'en remercie !
Grâce à ta formule j'ai appris de nouvelles possibilités sur Excel, et ça, c'est bien !