Erreur lors d'un calcul VBA

Bonjour j'essaie de faire un calcul par vba pour calculer une masse molaire d'un atome dont une personne aurait rentré la formule chimique mais une erreur apparaît lors du dernier calcul.

Quelqu'un pourrait-il jeter un œil ? jepense que l'erreur est tout bête mais impossible de la trouver .... Fichier en pièce jointe .

Merci d'avance

bonjour,

proposition de correction.

tu ne voudrais pas ton résultat en D15 plutôt qu'en O4 ?

Oui je le veux en D15 de la feuille calcul FC mais l'erreur est une erreur d'imcopatibilité dans la derniere formule ^^

Bonjour,

Une proposition ...

Cordialement.

Bonjour à tous,

@gyrus ... ton code fonctionne bien ... si ... l'on ajoute une ligne d'en-tête dans la feuille "Tableau périodique des éléments". Sinon, le code saute la ligne 1.

ric

Merci tout le monde pour l'aide apporter . c'est super gentil

@gyrus ... ton code fonctionne bien ... si ... l'on ajoute une ligne d'en-tête dans la feuille "Tableau périodique des éléments".

Sinon, le code saute la ligne 1.

@ric : merci pour ton test et la remarque.

Le code est effectivement mis en défaut mais pour une raison différente.

J'ai codé une détection partielle alors qu'il faut une détection de l'ensemble du texte.

il faut donc remplacer

Set C = .Range("B1:B72").Find(Controls("TextBox" & i + 1).Text, , xlValues, xlPart)

par

Set C = .Range("B1:B72").Find(Controls("TextBox" & i + 1).Text, , xlValues, xlWhole)

Cordialement.

Bonjour à tous,

@gyrus ... Cela corrige effectivement le saut à la ligne2. Mais, la cellule B2 contient une espace après le He. L'option "Whole" ignore donc ce He.

Peut-être un code semblable à celui-ci pourrait corriger cette coquille.

Sub nettoyage()
Dim i As Integer
   With Sheets("Tableau périodique des éléments")
      For i = 1 To 72
         If Asc(Right(.Cells(i, 2), 1)) = 32 Then
            .Cells(i, 2).Value = Left(.Cells(i, 2).Value, Len(.Cells(i, 2).Value) - 1)
         End If
      Next i
   End With
End Sub

ric

Je conseillerais plutôt d’éviter la saisie libre dans des TextBox et j’opterais pour des listes de choix correspondant à la liste des éléments afin de limiter le risque d’erreur.

Cordialement.

Effectivement mon premier choix était de faire une combobox mais je n'arrive pas à ajouter des items dans une combobox provenant d'une autre page ... Mais si tu sais comment faire je suis curieux d'apprendre .

Bonjour, je viens d'essayer de rajouter un option bouton pour choisir la case pour afficher le résultats. ( c'est-à-dire soit la case D15 soit la case D14) mais maintenant je n'ai plus aucun résultats qui s'affiche, je vous joint le fichier uploader.....

J'ai trouvé cette façon de faire même si je pense que cer n'est pas la plus simple, on fait ce que l'on peut avec ses connaissance lol....

Private Sub CommandButton1_Click()
Dim C As Range
Dim Mmol As Double
    If OptionButton1 = True Then
        With Sheets("Tableau périodique des éléments")
        For i = 1 To 16 Step 2
            If IsNumeric(Controls("TextBox" & i).Value) Then
                If Controls("TextBox" & i + 1).Text <> "" Then
                    Set C = .Range("B1:B72").Find(Controls("TextBox" & i + 1).Text, , xlValues, xlWhole)
                    If Not C Is Nothing Then
                        Mmol = Mmol + Val(Controls("TextBox" & i).Value) * C.Offset(, 1).Value
                    End If
                End If
            End If
        Next i
    End With
    Sheets("Calcul FC").Cells(14, 4) = Mmol
    ElseIf OptionButton2 = True Then
        With Sheets("Tableau périodique des éléments")
                For i = 1 To 16 Step 2
                    If IsNumeric(Controls("TextBox" & i).Value) Then
                        If Controls("TextBox" & i + 1).Text <> "" Then
                            Set C = .Range("B1:B72").Find(Controls("TextBox" & i + 1).Text, , xlValues, xlWhole)
                            If Not C Is Nothing Then
                        Mmol = Mmol + Val(Controls("TextBox" & i).Value) * C.Offset(, 1).Value
                            End If
                        End If
                    End If
                Next i
            End With
    Sheets("Calcul FC").Cells(15, 4) = Mmol
    End If
End Sub

bonjour,

tu pourrais simplifier le code ainsi, vu que le calcul semble le même pour option1 ou option2.

Private Sub CommandButton1_Click()
    Dim C As Range
    Dim Mmol As Double

    With Sheets("Tableau périodique des éléments")
        For i = 1 To 16 Step 2
            If IsNumeric(Controls("TextBox" & i).Value) Then
                If Controls("TextBox" & i + 1).Text <> "" Then
                    Set C = .Range("B1:B72").Find(Controls("TextBox" & i + 1).Text, , xlValues, xlWhole)
                    If Not C Is Nothing Then
                        Mmol = Mmol + Val(Controls("TextBox" & i).Value) * C.Offset(, 1).Value
                    End If
                End If
            End If
        Next i
    End With

    If OptionButton1 = True Then
        Sheets("Calcul FC").Cells(14, 4) = Mmol
    ElseIf OptionButton2 = True Then
        Sheets("Calcul FC").Cells(15, 4) = Mmol
    End If
End Sub

d'autre part avec 2 optionbutton tu as 4 possibilités (vrai,vrai; vrai,faux;faux,vrai et faux,faux). Tu sembles n'en avoir besoin que de 2. Dans ce cas, un seul bouton d'option est nécessaire (l'alternative étant, mettre en ligne 14 ou en ligne 15)

Bonjour,

Voici une application avec ComboBox ...

Cordialement.

Rechercher des sujets similaires à "erreur lors calcul vba"