Partage
  • Partager sur Facebook
  • Partager sur Twitter

[VBA] Décomposer une formule chimique

Sujet résolu
    16 février 2011 à 13:33:39

    Bonjour à tous,

    Voila le soucis: pour me faciliter la vie dans le traitement de mesures, je voudrais décomposer la formule chimique d'un composé pour stocker le nombre de chaque atome dans des cellules spécifiques à chacun de ces-dits atomes. Je pensais à l'utilisation d'un tableau pour stocker la formule après l'avoir saisi dans une inputbox, mais je ne sais pas comment choper juste le nombre de chaque atome... (Genre : CxxHxxNx...)

    J'espère que j'ai été assez clair, merci du coup de main...
    • Partager sur Facebook
    • Partager sur Twitter
      16 février 2011 à 16:03:00

      Salut,

      Je me suis servi du code ASCII pour différencier les chiffres et les charactères. Si tu as un problème ou une question n'hésites pas ;)

      Sub decomposition_chimique_simple()
          Dim caractere As String         'stocke chaque caractere les uns après les autres
          Dim atome As String             'garde en mémoire les différents atomes
          Dim nombre As String            'garde en mémoire le nombre de chaque atome
          Dim molecule As String          'la molecule toute entière
          Dim i As Integer                'boucle sur le nombre de caractère
          Dim ligne As Integer            'ligne où on écrira chaque element
          
          'obtention de la molécule
          molecule = InputBox("Quel molécule voulez-vous ajouter ?", "Element chimique")
          
          'affichage...
          Columns(1).Clear
          Columns(2).Clear
          Cells(1, 1).Value = "Décomposition de :"
          Cells(2, 1).Value = molecule
          
          'à partir de quelle ligne on va lister les atomes
          ligne = 4
          
          'boucle pour chaque caractere de la molécule
          For i = 1 To Len(molecule)
              caractere = Mid(molecule, i, 1)
              
              'si le caractère à un code ascii entre 48 et 57, cela signifie que c'est un nombre
              If Asc(caractere) >= 48 And Asc(caractere) <= 57 Then
                  nombre = nombre & caractere
              Else
                  'distinction pour le début et pour des élements comme le sodium par exemple (Na)
                  If nombre = "" Then
                      atome = atome & caractere
                  Else
                      Cells(ligne, 1).Value = atome
                      Cells(ligne, 2).Value = nombre
                      ligne = ligne + 1
                      
                      atome = caractere
                      nombre = ""
                  End If
              End If
          Next
          Cells(ligne, 1).Value = atome
          Cells(ligne, 2).Value = nombre
      End Sub
      
      • Partager sur Facebook
      • Partager sur Twitter
        16 février 2011 à 17:21:07

        Waouh, je ne demandais pas la réponse tout cuite comme ça, mais je vais pas m'en priver :p

        Merci énormément, je teste et je te dis si jamais y'a un soucis!
        • Partager sur Facebook
        • Partager sur Twitter
          18 février 2011 à 8:51:32

          Le prog. fonctionne bien, je n'aurais jamais pensé à utiliser l'ASCII!
          Par contre, il n'affiche pas "1" si il n'y a qu'un atome(genre CxxHxxN----> N "Rien"), ou alors écrit les deux atomes à coté si ils sont au début (genre CH4---> CH 4). M'enfin, je suis entrain de chercher une solution, au pire j'écris "1" à coté des atomes seuls.
          Merci du coup de main!
          • Partager sur Facebook
          • Partager sur Twitter

          [VBA] Décomposer une formule chimique

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown