Une demande peut etre impossible a resoudre

Bonjour tout le monde,

Je reviens encore pour solliciter vos méninges car vous m'aviez très bien aidé avant, et ça profite beaucoup aux étudiants universitaires avec qui je partage mes recherches.

Ma demande est très bien expliquée dans le fichier excel joint: il s'agit de faire une recherche d'enregistrement dans une base de données en se basant sur les résultats d'analyses chimique avec une marge d'erreur.

Merci pour votre aide et je suis a votre disposition s'il y a des questions.

Merci d'avance.

Senlis

Bonjour,

Une demande peut être impossible à resoudre

Pessimiste, va...

Serait-il possible que le code VB demande l'incertitude (5%, 10%, 15%...) sur les analyses du microscope électronique avant de lancer la recherche et l'identification des minéraux?

Le taux d'incertitude sera-t-il différent pour chacun des éléments ?

Ce taux d'incertitude pourrait-il varier d'une analyse à l'autre ?

Gelinotte

hahah, oui, peut etre un peu pessimiste, mais je tres confiance en vos competences

Merci pour la réponse,

Pour répondre aux questions :

  • tous les éléments ont la meme incertitude pour une mene série d'analyse
  • le taux d'incertitude peut varier d'une série d'analyse à l'autre

Merci beacoup

Bonjour,

Autres questions :

  • si un minéral a été validé peut-on arrêter la recherche ou un 2nd peut-il être trouvé ?
  • si un élément est absent y'a-t-il un seuil en dessous duquel on considère qu'il est possible qu'il n'ai pas été détecté et valider le minéral ?
  • si oui nombre max d'éléments concernés pour une analyse ?
eric

Bonjour eric et merci pour la réponse

Je réponds au question en rouge

Autres questions :

- si un minéral a été validé peut-on arrêter la recherche ou un 2nd peut-il être trouvé ?

Si un minéral est trouvé, on peut arrêter la recherche. Dans certains cas très rares, quelques minéraux peuvent avoir exactement la même composition chimique, mais portent des noms différents car ils ont une sructure cristalline différente.

- si un élément est absent y'a-t-il un seuil en dessous duquel on considère qu'il est possible qu'il n'ai pas été détecté et valider le minéral ?

Si un élément n'est pas détecté lors de l'analyse, c'est qu'il n'est pas présent

- si oui nombre max d'éléments concernés pour une analyse ?

Le microscope électronique renvoie tous les éléments qu'un minéral contient et ça concerne tous les élément du tableau périodique sauf troi, qui sont l'H, He, Li, Be et B (les 5 premiers en fait)

Merciiiiiiiiiiiii encore pour votre aide. S'il y a une solution à mon problème, ça changerait notre vie dans le domaine de l'analyse minéralogique car l'identification minérale à l'aide de la base de données nous prend vraiment un temps fou

eric

Hassan Bouzahzah, Université de Liège, Belgique

Le microscope électronique renvoie tous les éléments qu'un minéral contient et ça concerne tous les élément du tableau périodique sauf troi, qui sont l'H, He, Li, Be et B (les 5 premiers en fait)

Donc sauf 5 et non trois....

Pourtant H est présent et mesuré. Il ne faut donc pas en tenir compte. D'accord ?

on peut avoir soit ~43

"~43" est la chaine exacte qu'il y aura dans la cellule ? ou bien ça sera 43 ?

Peut-il y avoir d'autres écritures comme "<=1"

eriiic a écrit :

Le microscope électronique renvoie tous les éléments qu'un minéral contient et ça concerne tous les élément du tableau périodique sauf troi, qui sont l'H, He, Li, Be et B (les 5 premiers en fait)

Donc sauf 5 et non trois....

Pourtant H est présent et mesuré. Il ne faut donc pas en tenir compte. D'accord ?

Oui, sauf 5 et non trois, Désolé,

L'H n'est pas détecté, mais dans la base de données, on a la composition théorique des minéraux, donc l'H est mentionné

on peut avoir soit ~43

"~43" est la chaine exacte qu'il y aura dans la cellule ? ou bien ça sera 43 ?

Peut-il y avoir d'autres écritures comme "<=1"

la valeur 43 (et non ~43) est juste un exemple pour le minéral que j'ai donné comme exemple (Albite). Ce minéral contient théoriquement 48,66% d'oxygène, mais l'analyse du microscope est souvent imprécise de 5%, 10% voire 15%. Ce que je veux dire, c'est que si par exemple le microscope me renvoie une valeur de 43% pour l'oxygène en ayant analysé l'albite qui en contient 48, je devrais trouver albite si le code VB varie la valeur de 43% avec une incertitude qu'on peut fixer par exemple au départ (ici elle est de -10%, mais elle peut être de +10%) .

Regardez l'exemple de ce site qui permet de faire une recherche minéral par minéral et uniquement sur tois éléments chimiques

http://www.webmineral.com/MySQL/mineral_chem.php#.WCMEifkrKUk

J'ai bien compris mais ce qui compte est ce qu'on trouve dans la cellule :

"~43" ou 43 c'est totalement différent et à traiter de façon spécifique.

En attendant j'ai considéré qu'on ne lisait que des nombres dans les mesures et jamais ~xxx.

J'ai fait sous forme de fonction personnalisée (module 6).

Plus lent mais te donne toute la souplesse que tu veux si tu dois modifier la structure de la feuille 'Analyse microscopique'.

La feuille BD-minéraux par contre ne doit pas changer de structure sinon modifier la fonction : liste des éléments en ligne 2 à partir de F2, nom des minéraux en A.

Si tu as des feuilles avec énormément d'analyses il faudra peut-être s'orienter vers une macro qui traite tout d'un coup, beaucoup plus rigide mais plus rapide.

Syntaxe :

=mineral(elements, mesure, tolerance)

elements : plage des noms d'élément

mesure : plage des mesures (même taille que elements )

tolerance : tolérance sur les mesures (optionnel, =0 si absent)

Ex :

=mineral($C$4:$P$4;C5:P5)
ou
=mineral($C$4:$P$4;C6:P6;1%)

Je ne contrôle que les valeurs listées dans 'elements'

Tu n'as pas répondu pour H, il est donc contrôlé puisque présent.

Regarde si ça te va, et précise si H, He, Li, Be et B doivent être éliminés des contrôles même si présent dans 'elements'

eric

Merci beaucoup Eric,

Ton code fonctionne à merveille pour l'exemple que jai donné dans le fichier Excel, C'est vraiment génial.

J'ai essayé d'ajouter 3 autres exemples d'analyses avec de nouveaux éléments : Co, Cu, As (en violet dans le fichier excel joint). ça a fonctionné avec une seule analyse : cobaltite (case noir), mais pas pour les analyses 9 et 10.

J'ai aussi essayé d'utiliser l'incertitude (10%) selon la syntase que tu m'as donné : =mineral($C$4:$P$4, C7:P7, 10%)

Donc, pour l'exemple de l'analyse 3, j'ai changé la valeur de 48.66 par 45, et le code me renvoie "inconnu" ce qui veut dire qu'il faut mettre la valeur exacte de la teneur théorique, si non, le nom du minéral n'est pas trouvé.

voir fichier Excel joint

ton aide va me changer la vie et celle de dizaines d'étudiants si tu arrives à me trouver une solution ET MERCI D'AVANCE.

Hassan

J'ai aussi essayé d'utiliser l'incertitude (10%) selon la syntase que tu m'as donné : =mineral($C$4:$P$4, C7:P7, 10%)

effectivement, une erreur niveau CP à peu près...

Ligne 13 : 40.6 O pour 40.0591896723536 sans tolérance donc rutile n'est pas reconnu.

Idem pour le suivant

Donc :

  • soit on rend la tolérance obligatoire mais l'utilisateur sait que 0% c'est 0%
  • soit j'intègre un arrondi dans la fonction mais il faudrait me dire combien de décimales sont à prendre en compte. 2 ou plus ?
  • ou bien en l'absence de tolérance j'utilise un % >0. Dans ce cas de combien, 1% ? Moins ?

J'attend ta réponse pour finir les corrections

Bonjour Eric

STP, intégrer plustôt une tolérance que je peux controler car l'analyse ne me donne jamais la valeur théorique qui est dans la feuille "BD-minéaux". Donc pour 40.0591896723536, le microscope électronique peut facilement me donner 35 ou 45.

Merci encore

Hassan

J'avais édité mon post, peut-être ne l'as-tu pas vu :

Donc :

  • soit on rend la tolérance obligatoire mais l'utilisateur sait que 0% c'est 0%
  • soit j'intègre un arrondi dans la fonction mais il faudrait me dire combien de décimales sont à prendre en compte. 2 ou plus ?
  • ou bien en l'absence de tolérance j'utilise un % >0. Dans ce cas de combien, 1% ? Moins ?
Quel est ton choix 1, 2 ou 3 ? Avec quelle valeur ?

Bon, en l'absence de tolérance fournie 1% par défaut sera appliqué.

Tu peux le modifier dans la déclaration de la fonction :

Function mineral(elements As Range, mesures As Range, Optional tolerance As Double = 0.01) As String

Eric, tu es vraiment un chic gars... J'ai essayé et ça fonctionne à merveille avec les données de la feuille excel que j'ai mise a sur le site

J'ai intégré ton code dans mon fichier Excel qui contient la base de données complète des minéraux (4730 minéral) et je me suis rendu compte que le code me renvoie le premier minéral trouvé par ordre alphabétique et la recherche s'arrête : voir mon fichier excel joint. J'aurais besoin de tous les minéraux qui correspondent aus critères

Tu ne peux pas imaginer comment ça va me changer la vie ce petit code quand il sera complètement fonctionnel

MERCIIIIIIIIIIIIIIIIIIIIIIIIIIIII

Bonjour,

Ben je t'avais posé la question pourtant

J'ai ajouté un % de reconnaissance.

Après avoir testé différentes possibilités j'ai fini par retenir celle-ci : afficher le plus gros écart par élément en %

Pour afficher sur plusieurs lignes dans la cellule mettre 'Renvoyer à la ligne automatiquement' sur la colonne. Les minéraux apparaissent dans l'ordre de la probabilité la plus forte.

Je ne retiens que les 5 plus probables. Si tu en veux plus modifier Dim result(1 To 5, 1 To 2)

Un autre point qui apparemment ne te posait pas de problème :

Je ne contrôlais la mesure que si BD-minéraux > 0

J'ai donc ajouté un contrôle si mesure > 0 et BD-minéraux = 0

Si on trouve 10 C et qu'il ne doit pas y en avoir il faut éliminer.

Par contre je me suis dit qu'il doit y avoir un seuil en deçà duquel on pouvait considérer que c'était un alea de mesure qu'il fallait ignorer.

Tu as donc une constante valMini à fixer en début de programme. Ignorant totalement quelle valeur plausible mettre j'ai mis 0.01, à adapter avec ton expérience.

Pas mal de changement donc à tester avec tous les cas de figure

eric

PS : tu n'as toujours pas répondu à la question 1 ici : https://forum.excel-pratique.com/excel/une-demande-peut-etre-impossible-a-resoudre-t84912.html#p492312

Donc toujours aucun traitement particulier pour ces éléments

Bonjour Eric

Et l'impossible est devenu POSSIBLE grâce à toi... J'ai intégré le code dans ma base de données et le tout fonctionne bien pour ce que j'ai demandé..... Merci infiniment Eric. C'est une brillante idée d'ajouter le pourcentage d'exactitude pour chaque minéral... vraiment tres brillant. J'y avais pensé mais je ne voulais pas trop demandé

J'ai montré le résultat à ma collègue et elle restée la bouche ouverte... elle ne croyait pas que c'était possible et m'avait dit qu'elle voudrait bien te marier pour ton intelligence hahaha.

  • Pour répondre à ta question 1 : il ne faut pas tenir compte de l'H dans les analyses.
  • J'ajusterai le seuil en deçà duquel on peut considérer la teneur comme un alea de mesure et qu'il faut ignorer (c'est autour de 0.1).

Comme tu es un génie de la programmation, je vais pousser un peu plus loin le défi :

Dans son état actuel, le code trouve très bien le minéral à condition que TOUS les éléments soient rentrés. Si on supprime un élément, le code renvoie INCONNU. Serait-il possible que le code renvoie quand même le minérale sur la base des seuls éléments rentrés (dans notre exemple, si je supprime l'oxygène de l'Albite, le code me renvoie inconnu).

Si le code peut être modifié dans ce sens, ça serait une excellente chose, Ce ci peut être très utiles pour les minéraux contenant beaucoup d'éléments légers comme le carbone, oxygène, fluor car l'analyse de ces éléments par le microscope électronique a beaucoup d'incertitude. Exemple d'un minéral qui contient 12% de carbone, le microscope électronique peut donner jusqu'à 19-20%, presque le double... il serait donc bien que je puisse l'identifier sur la base des ces autres éléments chimiques uniquement.

Merci infiniment d'avance

Hassan

1) éléments <= B plus pris en compte

2) éléments entre C et F pris en compte que si saisie

modifiable ici :

                ElseIf colEle(i) > 14 Or (colEle(i) <= 14 And mes(1, i) > 0) Then
                    ' si (élément <= F ET saisie mesure) ou (élément > F)

14 étant la colonne de F.

Testé juste sommairement...

eric

Bonjour Eric

Merci pour ta réponse. C'est vraiment très apprécié

quand j'ouvre le fichier excel, j'ai un message d'erreur . Le fichier s'ouvre sur le module 6 et me dit qu'il y a une erreur de compilation à la ligne mineral = mineral & vbLf & result(i, 1) & " (" & Format(result(i, 2), "0.0%") & ")"

Il souligne le mot Format et affiche le message Erreur de compilation : Erreur Automation

Pour ton information, j'utilise Excel 2013 et visual Basic 7.1

Merci pour ton aide mon cher

Hassan

Bonjour,

là je ne sais trop quoi te dire, d'autant plus que cette ligne était déjà présente dans la précédente version sans problème.

Contrôler dans vbe 'Outils / Références' si tu n'en as pas une marquée (absente). La décocher.

Sinon à part relancer excel, voire même rebooter je n'ai pas d'autre idée actuellement.

eric

Bonjour Eric

C'est GENIIIIIIAAAAAAAL Eric; ça fonctionne trop bien... comme tu as dit, un redémarrage et tout fonctionne bien. Je suis vraiment trop content et MERCIIIIIIIIIIIiii infiniment pour ta très précieuse aide mon cher

WOW, c'est génial comment ça va nous aider à l'université

Merciiiiiiii

Hassan.

Ok Continue à chercher les éventuels dysfonctionnements au cas où..

Bonne continuation

eric

Rechercher des sujets similaires à "demande etre impossible resoudre"