XL 2013 Décomposition formule chimique

nicroq

XLDnaute Occasionnel
Bonjour a tous et merci par avance pour votre aide.

Voici ma problématique que je souhaiterai resoudre en VBA :
IL faudrait que je puisse decomposé ma formule chique d'un composé en ions.
Actuellement j'ai une fonction qui me permets de décomposé ma formule en composé chimique : voir fichier joint. exemple : (NH4)2HPO4 ==> N2H8H1P1O4

Or je souhaiterai maintenant pouvoir extraire et lister les ions polyatomiques de cette formule :
(NH4)2HPO4
NH4 = ion ammonium = 2
PO4 = ion phpophate = 1

Le but etant de lister l'ensemble des ions de chaque composé et obtenir le tableau en jaune du fichier joint.

Merci pôur votre aide!!!
 

Pièces jointes

  • reformu_ion.xlsm
    19.5 KB · Affichages: 24

nicroq

XLDnaute Occasionnel
Bonjour,

Oui l'ensemble des ions sont dans une liste sur une autre feuille (voir piece jointe)
merci pour votre aide. j'ai un peu avancé sur le sujet mais lorsque je mets la liste sur une autre feuille ca ne marche pas.. alors que si je mets la liste sur la meme feuille cela fonctionne???
 

Pièces jointes

  • Liste.xlsx
    8.2 KB · Affichages: 19

nicroq

XLDnaute Occasionnel
En fait le fichier" liste" constitue un deuxième onglet du premier fichier. Je n'ai envoyé que la liste désolé..
Il y a les ions et aussi certaine molécule qui ne sont pas des ions mais qu'il faut que je puisse repérer aussi.
merci.
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Pouvez vous joindre le classeur où vous avez avancé sur le sujet ?
En attendant un petit bout de code pouvant servir dans une boucle s'il n'y a pas d'imbrications :
VB:
Function Ion(ByVal Texte As String, IonRef As String) As Long
Dim Ts() As String, Qt As Long
Ts = Split(Texte, IonRef)
For P = 1 To UBound(Ts)
   If Ts(P - 1) Like "*(" And Ts(P) Like ")#*" Then Qt = Val(Mid$(Ts(P), 2)) Else Qt = 1
   Ion = Ion + Qt: Next P
End Function
Sub TestIon()
MsgBox Ion("(NH4)2HPO4", "NH4")
End Sub
 
Dernière édition:

Discussions similaires

Réponses
2
Affichages
188
Réponses
11
Affichages
378