Test logique et concatener
automne09
Messages postés
6
Statut
Membre
-
eriiic Messages postés 25847 Date d'inscription Statut Contributeur Dernière intervention -
eriiic Messages postés 25847 Date d'inscription Statut Contributeur Dernière intervention -
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 :
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
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
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
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:
- Test logique et concatener
- Test performance pc - Guide
- Steam deck oled test - Guide
- Test disque dur - Télécharger - Informations & Diagnostic
- Test composant pc - Guide
- Redmi note 14 4g test - Accueil - Téléphones
5 réponses
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.
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.
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
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
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
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
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))))
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))))
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
Merci beaucoup !
Automne09
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.
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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.
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.