Test logique et concatener

Fermé
automne09 Messages postés 6 Date d'inscription mardi 16 juillet 2013 Statut Membre Dernière intervention 17 juillet 2013 - 16 juil. 2013 à 23:41
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 - 17 juil. 2013 à 08:03
Bonjour,
J'ai un tableau de données botaniques a traiter. J'ai plusieurs colonnes, dont la première est le nom d'espèce. J'aurais besoin, d'abrévier automatiquement ce nom.
Dans la nomenclature scientifique un nom est composé du genre suivis de l'espèce et du nom d'auteur, exemple : Amaranthus hybridus L. pour l'Amaranthe hybride décrit par Linnée.

Comme abréviation je souhaiterais les 4 premières lettres du nom de genre, un espace, et les 4 premières lettres du nom d'espèce. Pour cette Amaranthe par exemple ça donne "Amar hybri"

J'ai donc écrit cette formule qui fonctionne :
=CONCATENER(STXT(A2;1;4);STXT(A2;CHERCHE(" ";A2;1);5))


Je bloque par contre sur les cas des sous espèces, variétés etc ...

En effet certaines plantes sont décrites au rang de sous espèces, leur nom s'écrit alors : Genre espèce subsp. espèce, par exemple Amaranthus hybridus L. subsp. hybridus. Je souhaiterais que l'abréviation soit alors les quatre premières lettres du genre, de l'espèce et de la sous espèce. Dans notre cas ça donnerai "Amar hybr hybr". Et là si j'écris ça
= CONCATENER(STXT(A2;1;4);STXT(A2;CHERCHE(" ";A2;1);5);STXT(A2;CHERCHE("subsp.";A2;1)+6;5))
, ça fonctionne quand il y'à effectivement une sous espèce, mais quand on a juste l'espèce ça ne fonctionne plus.
Par exemple cette dernière formule appliquée à "Amaranthus hybridus L." me donne #VALEUR!

Le problème ce complique encore pour les variétés, puisque parfois on a une sous espèce qui présente plusieurs variétés. Par exemple Amaranthus hybridus L. subsp. hybridus var. patulus (Bertol.) Thell. De la même façon
=CONCATENER(STXT(B2;1;4);STXT(B2;CHERCHE(" ";B2;1);5);STXT(B2;CHERCHE("subsp.";B2;1)+6;5);STXT(B2;CHERCHE("var.";B2;1)+4;5))
fonctionne très bien quand on a une variété, mais pas du tout quand on a juste une espèce ou une sous espèce.

Parfois aussi on a pas de sous espèces mais une variété d'espèce, exemple Asperula cynanchica L. var. cynanchica ...

J'ai pensé à demander à excel
"cherche "subsp." et "var." si c'est vrai applique telle formule,
si c'est faux cherche "var.", si c'est vrai applique telle formule,
si c'est faux cherche "subsp.", si c'est vrai applique telle formule,
si c'est faux applique telle formule

mais je ne sais pas le formuler et la fonction SI ne renvoie que du texte et n'offre pas la possibilité de renvoyer une fonction si j'ai bien compris.

Je vous remercie d'avance,
Automne09
A voir également:

5 réponses

eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 247
Modifié par eriiic le 17/07/2013 à 00:32
Bonjour,

par formule ça risque d'être très lourd...

Je te propose une fonction personnalisée en vba (accepter les macros).
J'ai fait pour les 2 premiers cas. Pour les autres annoncés plus compliqués, tu ne dis pas ce que tu veux en retour. J'ai improvisé...
Syntaxe :
=abreger(A2)
J'ignore d'office tous les mots à 2 caractères. Préciser s'il ne faut les ignorer que si le 2nd caractère est un point.

Regarde ce que ça donne, on complètera les cas particuliers.
Pour chaque cas mettre le nom d'origine et l'abrégé voulu (préciser les mots à ignorer, les caractères à supprimer/remplacer, etc) dans un fichier xls à déposer sur cjoint.com. Coller ici le lien fourni.

https://www.cjoint.com/c/CGraGoftMeq
Alt+F11 pour voir le code, à mettre dans un module Standard : Module1

eric

Jamais tu ne répondras à un mp non sollicité...
Bon, ça c'est fait.
0
automne09 Messages postés 6 Date d'inscription mardi 16 juillet 2013 Statut Membre Dernière intervention 17 juillet 2013
17 juil. 2013 à 00:40
Bonsoir, merci beaucoup !

Effectivement j'ai oublié de préciser le résultat voulut pour plusieurs cas. Dans le cas d'une variété de sous espèce, comme Amaranthus hybridus L. subsp. hybridus var. patulus, l'abbréviation sera"Ama hybr hybr patu"
Dans le cas d'une variété d'espèce ça sera, par exemple "Ange sylv sylv" pour Angelica sylvestris L. var. sylvestris. Il me semble que l'on aura jamais de doublon du type Angelica sylvestris L. var. sylvestris et Angelica sylvestris L. subsp. sylvestris. Donc ça ne pose pas de problème.

Je regarde ta macro tout de suite,
Automne09
0
via55 Messages postés 14502 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 9 décembre 2024 2 737
17 juil. 2013 à 01:00
Bonsoir

Soit le nom complet en B6

En C6 la formule suivante devrait donner ce que tu recherches :

SI(ET(NBCAR(B6)>NBCAR(SUBSTITUE(B6;"subsp.";""));NBCAR(B6)>NBCAR(SUBSTITUE(B6;"var.";"")));(GAUCHE(B6;4)&STXT(B6;CHERCHE("subsp.";B6)+6;5))&STXT(B6;CHERCHE("var.";B6)+4;5);SI(NBCAR(B6)>NBCAR(SUBSTITUE(B6;"subsp.";""));GAUCHE(B6;4)&STXT(B6;CHERCHE("subsp";B6)+6;5);SI(NBCAR(B6)>NBCAR(SUBSTITUE(B6;"var.";""));GAUCHE(B6;4)&STXT(B6;CHERCHE("var.";B6)+4;5);GAUCHE(B6;4))))

Cdlmnt
0
automne09 Messages postés 6 Date d'inscription mardi 16 juillet 2013 Statut Membre Dernière intervention 17 juillet 2013
17 juil. 2013 à 01:10
Bonsoir,
on a posté en même temps.

Ca marche génial ! seul problème pour les noms d'espèce sans sous espèce ou variété je n'ai que les 4 premières lettre du premier mot (le genre).
0
via55 Messages postés 14502 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 9 décembre 2024 2 737
17 juil. 2013 à 01:14
Oui j'ai oublié l'espèce !
voilà correction faite
SI(ET(NBCAR(B7)>NBCAR(SUBSTITUE(B7;"subsp.";""));NBCAR(B7)>NBCAR(SUBSTITUE(B7;"var.";"")));(GAUCHE(B7;4) & STXT(B7;CHERCHE(" ";B7);4) & STXT(B7;CHERCHE("subsp.";B7)+6;5))&STXT(B7;CHERCHE("var.";B7)+4;5);SI(NBCAR(B7)>NBCAR(SUBSTITUE(B7;"subsp.";""));GAUCHE(B7;4)& STXT(B7;CHERCHE(" ";B7);4)&STXT(B7;CHERCHE("subsp";B7)+6;5);SI(NBCAR(B7)>NBCAR(SUBSTITUE(B7;"var.";""));GAUCHE(B7;4)& STXT(B7;CHERCHE(" ";B7);4)&STXT(B7;CHERCHE("var.";B7)+4;5);GAUCHE(B7;4)& STXT(B7;CHERCHE(" ";B7);4))))
0
automne09 Messages postés 6 Date d'inscription mardi 16 juillet 2013 Statut Membre Dernière intervention 17 juillet 2013
17 juil. 2013 à 01:32
Je n'ai plus qu'à remplacer les & STXT(B7;CHERCHE(" ";B7);4) par & STXT(B7;CHERCHE(" ";B7);5) pour avoir 4 lettres dans mon abréviation à cause de l'espace et c'est parfait, j'ai vérifié je n'obtient pas de doublons (sauf 2, 3 espèces pour lesquels les 4 premières lettres des noms d'espèces sont identiques ... j'appliquerai une procédure particulière pour celles ci).

Merci beaucoup !
Automne09
0
automne09 Messages postés 6 Date d'inscription mardi 16 juillet 2013 Statut Membre Dernière intervention 17 juillet 2013
17 juil. 2013 à 01:03
Ci joint le fichier complété : : https://www.cjoint.com/c/CGra5AJIz47

Par contre en lisant ta macro j'ai une autre idée qui me viens en tête, j'ai la liste de toutes les abréviations de nom d'auteurs sur wikipédia (http://fr.wikipedia.org/wiki/Liste_des_abr%C3%A9viations_d'auteur_en_taxinomie_v%C3%A9g%C3%A9tale). Du coup si je récupère cette correspondance, on doit pouvoir dire à excel de supprimer toute valeur comprise dans cette liste, ça réglera déjà une grosse partie du problème. Il ne restera plus qu'à supprimer tous les "subsp." et "var." et de ne garder que les 4 premières lettres de chaque mot.
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 247
Modifié par eriiic le 17/07/2013 à 01:31
Re,

Il faut fournir les règles aussi...
Dès qu'il y a une ( on abandonne tout ce qui est derrière ?
Toujours 4 mots maxi ?

Et ton lien wiki est incorrect.
eric
0
automne09 Messages postés 6 Date d'inscription mardi 16 juillet 2013 Statut Membre Dernière intervention 17 juillet 2013
17 juil. 2013 à 01:34
Re, pardon j'ai refermé la parenthèse http://fr.wikipedia.org/wiki/Liste_des_abr%C3%A9viations_d'auteur_en_taxinomie_v%C3%A9g%C3%A9tale

Je vais appliquer la formule donnée plus haut qui a l'air de fonctionner, je vérifierai plus en détails demain.

Merci et bonne fin de soirée,
Automne09
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 247
Modifié par eriiic le 17/07/2013 à 08:04
Bonjour,

Pas eu de réponse à mes 2 questions...
Je supprime donc tout la totalité ce qui suit une (
J'ignore les mots se terminant par un point, si ce n'est pas correct tu as juste à supprimer le test pour enlever cette fonctionnalité.
En sécurité tu as la possibilité d'avoir une liste de mots à ignorer dans la feuille 'Exclus'
https://www.cjoint.com/c/CGricud241Z

Le lien est toujours mauvais...
eric
Jamais tu ne répondras à un mp non sollicité...
Bon, ça c'est fait.
0