Formule chimique

magmatique

XLDnaute Nouveau
Bonjour
Je construit une base de données avec dans une colonne le nom chimique des formules: ex: H2SO4 avec 2 et 4 en indice. Le formulaire de saisie fait en VBA ne peut prendre dans un TextBox ce genre d'écriture. Je veux donc créer un module( sait pas trop à quoi ça sert mais vu sur le web) piloté par un bouton situé sur la feuille 1 (par exemple) ou dans la barre d'outils qui permet de mettre les chiffres de la cellule en indice. Dans une formule chimique seuls les chiffres suivants des lettres sont en indice, ceux qui précedent sont sur la même ligne.
Je veux faire ceci pour éviter de faire à chaque fois clic droit sur la cellule, puis format, police, indice.
J'ai trouvé sur sur le web ce fichier (vieux) mais je n'arrive pas à m'en sortir, et ce sont des macros pour Word.
Je vous remercie.
 

Pièces jointes

  • equabil.zip
    21.4 KB · Affichages: 141

JNP

XLDnaute Barbatruc
Re : Formule chimique

Bonjour Magmatique :),
Voici une sub mettant en indice TOUS les chiffres de ta formule dans la cellule active (attention à ne pas en sélectionner plusieurs, je n'ai pas mis de test pour cela).
Code:
Dim I As Integer, J As Integer
J = Len(ActiveCell)
For I = 1 To J
If IsNumeric(Mid(ActiveCell, I, 1)) = True Then
ActiveCell.Characters(Start:=I, Length:=1).Font.Subscript = True
End If
Next I
Par contre, pour laisser en normal ceux qui sont devant, pas évident, il faudrait que ta nomenclature soit plus précise... Si tu ne mets un chiffre devant que pour le 1er caractère, il te suffit de modifier
Code:
For I = 2 to J
si tu mets un blanc avant le chiffre au milieu, il va falloir compliquer le test, mais tu aura de toute façon un problème sur C14 par rapport à 14C car dans les 2 cas, 4 sera précédé par 1 et donc tu ne saura pas si c'est un blanc avant ou une lettre, ou il faudra encore complexifier le test, de même pour 100 etc.
Teste déjà ce code, après...
Bon dimanche :cool:
 

soenda

XLDnaute Accro
Re : Formule chimique

Bonjour le fil, JNP, magmatique

Une petite variante, de la Sub de JNP, qui ne met pas en indice un nombre en début de chaine
Ainsi dans "4 Fe", le 4 ne sera pas mis en indice
Code:
    Dim i%, fin As Integer
    
    fin = Len(ActiveCell)
    
    Application.ScreenUpdating = False
    
    For i = Len(CStr(Val(ActiveCell))) + 1 To fin
        If IsNumeric(Mid(ActiveCell, i, 1)) = True Then ActiveCell.Characters(i, 1).Font.Subscript = True
    Next
    
    Application.ScreenUpdating = True

A plus
 

soenda

XLDnaute Accro
Re : Formule chimique

Re,

Voici un exemple le 4 et 2 sont bien en indice, mais le 6 ne doit pas y être.

Tu aurais dû le dire tout de suite...

En reprenant ton exemple :
avec un espace entre le 4 et le 6, le 4 sera en indice et pas le 6.

Si ça te conviens, je te code ça. (Vois la PJ)

A plus
 

Pièces jointes

  • Capture1.PNG
    Capture1.PNG
    1.1 KB · Affichages: 156
  • Capture1.PNG
    Capture1.PNG
    1.1 KB · Affichages: 159
  • Capture1.PNG
    Capture1.PNG
    1.1 KB · Affichages: 154
Dernière édition:

soenda

XLDnaute Accro
Re : Formule chimique

Re,

Le bout de code suivant règle le cas précité.

Code:
Dim i%, fin As Integer
    
    With ActiveCell
    
        If IsNumeric(.Value) Then Exit Sub
        fin = Len(.Value)
        
        For i = Len(CStr(Val(.Value))) + 1 To fin
            If IsNumeric(Mid(.Value, i, 1)) = True And Mid(.Value, i - 1, 1) <> " " Then _
                .Characters(i, 1).Font.Subscript = True
        Next
        
    End With
en PJ, un exemple qui gère aussi les exposants

A plus
 

Pièces jointes

  • Ecriture chimie.xlsm
    19 KB · Affichages: 207
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 277
Messages
2 086 716
Membres
103 378
dernier inscrit
phdrouart