decomposition formule chimique

nicroq

XLDnaute Occasionnel
Bonjour a tous et merci d avance pour votre aide

Je souhaiterai par VBA (ou par formule excel mais je ne pense pas que se soit possible) obtenir le tableau en rouge du fichier joint. Il s'agit en fait de pouvoir decomposer les formules pour obtenir un bilan.
Les formules sont toujours ecrites de la même facon et nomenclatures (les 4 exemples de formules dans le fichier sont representatives de les cas possible : soit des virgules pour le H2O soit des parenthèses pour multiplier par le nombre de composés).

Merci d'avance

Cdlt
 

Pièces jointes

  • decomposition formule chimique.xls
    28 KB · Affichages: 62

Lolote83

XLDnaute Barbatruc
Salut,
S'il s'agit simplement d'obtenir le tableau rouge, voir ici.
En exemple en cellule D12 = SOMMEPROD(($B$3:$H$3=A12)*($B$4:$H$7)) puis tirer vers le bas
Par contre, s'il s'agit de faire la tableau noir en fonction de la formule chimique, c'est autre chose.
@+ Lolote83
 

nicroq

XLDnaute Occasionnel
Je pense que la stratégie a utiliser en VBA est que chaque composé commmence par une majuscule et qu'ensuite si il y a un chiffre il faut multiplier, si il y a une minuscule c est le nom qui continue et si il ya une autre majuscule il s agit du composé suivant.
exemple :
CuCl2 : majuscule C puis minuscule u puis majuscule C : donc le composé est : Cu nombre : 1
puis majuscule C puis minuscule l puis chiffre 2 : donc le composé est Cl nombre 2

cela est il realisable en VBA?
 

nicroq

XLDnaute Occasionnel
Cela marche plutot pas mal !! merci bcp lolote83,
cependant le probleme se pose lorsque j'ai des composé avec des parenthèses :
Zn(CH3COO)2
Pourriez vous m'aider a résoudre ce soucis?
dans la formule ci dessus :
il faudrait avoir
Zn : 1
C : 4 (car 2 * 2)
H :6
O : 4 (car 2 * 2)

merci.
 

nicroq

XLDnaute Occasionnel
Merci lolote83 !!!
est il possible de se servir de la meme stratégie avec les parenthèses en utilisant les Asc 40 et Asc41 en faisant un autre boucle dans le IF : l idée serait la suivantes mais je n 'y arrive pas ...
If Asc(caractere) = 40 Then
molecule2= nombre de caractère jusqu'à Asc 41
for j=caratère+2 to molecule2
Mid(molecule2, j, 1) .....

merci pour votre aide encore!!!
 

nicroq

XLDnaute Occasionnel
J'ai remarqué aussi une petite erreur lorsqu' un composé ne match pas il passe directement au Xcell suivcant alors qu'il faudrait passer au caractere suivant.. cela est il possible?

par exmple
H3ZnC8
il me mets H3 et passe au composé suivant au lieu de mettre
H3 et C8
 

Nairolf

XLDnaute Accro
Salut Lolote et nicroq,

Ci-joint, un fichier totalement de mon cru, qui permet d'obtenir ce que tu souhaites.
Il est largement perfectible, mais ce sera une bonne base.
J'ai fait pas mal de tests, mais j'ai pu passer à côté de certains cas de figure.

Deux remarques:
  • Pour vérifier les résultats au fur et à mesure, j'ai mis les résultats de la table intermédiaire sur la feuille XL, il serait mieux, à terme de passer par un tableau VBA
  • Tel qu'il est construit, le code permet uniquement d'avoir des éléments entre parenthèses du types (CH3COO)x où x n'a qu'un seul digit
 

Pièces jointes

  • decomposition formule chimique_Nairolf.xlsm
    26.3 KB · Affichages: 54

Discussions similaires