Problème conversion valeur contrôle

mécano41

XLDnaute Accro
Bonjour à tous,

Quelqu'un pourrait-il me dire où est l'erreur?

Code:
Private Sub BoutonValider_Click()
Dim Ctrl As Control
Dim T(1, 23)

For Each Ctrl In Me.Controls
    If Ctrl.Tag <> "" Then
        T(1, CLng(Ctrl.Tag)) = CSng(Ctrl.Value)
    End If
Next Ctrl

Les contrôles sont des Textbox dont les Tag sont en ordre croissant. Je cherche à mettre dans un tableau, au rang indiqué par le Tag, la valeur du Textbox correspondant convertie (ici en Single). Cela fonctionne sans le CSng (donc, en restant en texte), mais avec la conversion cela m'indique une erreur "Incompatibilité de type"...

Merci d'avance.

Cordialement
 

job75

XLDnaute Barbatruc
Re : Problème conversion valeur contrôle

Bonjour mecano41,

CSng, comme CLng ou CDbl, renvoie une erreur si la valeur à convertir n'est pas numérique (texte vide par exemple).

On peut donc utiliser :

Code:
Private Sub BoutonValider_Click()
Dim Ctrl As Control
Dim T(1, 23)

For Each Ctrl In Me.Controls
    If Ctrl.Tag<> Then
        If IsNumeric(Ctrl) then T(1, CLng(Ctrl.Tag)) = CSng(Ctrl)
    End If
Next Ctrl

End Sub
ou aussi :

Code:
Private Sub BoutonValider_Click()
Dim Ctrl As Control
Dim T(1, 23)

For Each Ctrl In Me.Controls
    If Ctrl.Tag <> "" Then
        T(1, CLng(Ctrl.Tag)) = Val(Replace(Ctrl, ",", "."))
    End If
Next Ctrl

End Sub
A+
 

mécano41

XLDnaute Accro
Re : Problème conversion valeur contrôle

Bonjour job75,

Merci pour cette réponse. Effectivement, en faisant cela, tout fonctionne.

Mais alors, pourquoi si je fais ce qui suit, les trois cas fonctionnent :

Code:
Sub essai()
Dim A As String
A = "125"
MsgBox CSng(A)
MsgBox CSng(A) * 10
MsgBox A / 10
End Sub

Pour info. : les textbox concernés font l'objet d'un module de classe qui n'autorise qu'une saisie de chiffre, virgule et point...

Autre exemple : si je mets dans mon code, pour l'un des textbox "MsgBox CSng(TxtX1.Value)" par ex. cela me sort la valeur sans erreur...

Pourquoi cela ne fonctionne plus dans une boucle des contrôles. J'avoue ne pas toujours comprendre certaines réaction d'EXCEL...

Cordialement
 

job75

XLDnaute Barbatruc
Re : Problème conversion valeur contrôle

Re,

Mais alors, pourquoi si je fais ce qui suit, les trois cas fonctionnent :

Tout simplement parce que dans ton exemple IsNumeric(A) renverrai True...

En VBA il suffit que la fonction IsNumeric() renvoie True pour qu'un texte puisse se convertir en nombre.

Note que sur une cellule vide IsNumeric renvoie True.

Mais si la cellule contient une date (formatée) IsNumeric renvoie False.

A+
 

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 915
Membres
101 838
dernier inscrit
Christelle.B86