Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Problème conversion str en cnlg ???

23 réponses
Avatar
LE TROLL
Bonjour,

Je fais:

Dim h(30) As long
Sub Command1_Click() 'moyenne
For i = 1 To 30
h(i) = CLng(Text1(i))
Next i
End Sub

A h(i) = CLng(Text1(i))
A (i = 1)
J'ai "13 : TYPE INCOMPATIBLE "

Où est l'erreur, svp ???

--
Merci beaucoup, au revoir et à bientôt :o)
------
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------

10 réponses

1 2 3
Avatar
Patrice Henrio
LE TROLL a écrit :
Bonjour,

Je fais:

Dim h(30) As long
Sub Command1_Click() 'moyenne
For i = 1 To 30
h(i) = CLng(Text1(i))
Next i
End Sub

A h(i) = CLng(Text1(i))
A (i = 1)
J'ai "13 : TYPE INCOMPATIBLE "

Où est l'erreur, svp ???



Où est déclaré i ?
Par ailleurs la déclaration d'un tableau n'est-elle pas
dim h(1 to 30) as long ?
Avatar
Jacques93
Bonjour LE TROLL,
LE TROLL a écrit :
Bonjour,

Je fais:

Dim h(30) As long
Sub Command1_Click() 'moyenne
For i = 1 To 30
h(i) = CLng(Text1(i))
Next i
End Sub

A h(i) = CLng(Text1(i))
A (i = 1)
J'ai "13 : TYPE INCOMPATIBLE "

Où est l'erreur, svp ???




L'erreur 13 me ferait penser à un TextBox non numérique. Tu peux essayer
ceci, qui par ailleurs assure, en partie, la validité de données :

Private Sub Command1_Click()
Dim i As Integer
Dim h(30) As Long

For i = 1 To 1
If IsNumeric(Text1(i)) Then
h(i) = CLng(Text1(i))
Else
MsgBox "Textbox n° : " & i & vbCrLf & "non numérique"
End If
Next i
End Sub


--
Cordialement,

Jacques.
Avatar
Jacques93
Bonjour Patrice Henrio,
Patrice Henrio a écrit :
LE TROLL a écrit :
Bonjour,

Je fais:

Dim h(30) As long
Sub Command1_Click() 'moyenne
For i = 1 To 30
h(i) = CLng(Text1(i))
Next i
End Sub

A h(i) = CLng(Text1(i))
A (i = 1)
J'ai "13 : TYPE INCOMPATIBLE "

Où est l'erreur, svp ???



Où est déclaré i ?



Bonne question, mais je crois que si i n'était pas du bon type cela
produirait une erreur de compilation sur l'instruction For ...

Par ailleurs la déclaration d'un tableau n'est-elle pas
dim h(1 to 30) as long ?



Histoire de chipoter, ça dépend aussi de l'instruction

Option base n

si n = 1

Dim h(1 To 30) As Long et Dim h(30) As Long sont équivalents

et si n = 0

Dim h(30) équivaut à Dim h(0 To 30)

--
Cordialement,

Jacques.
Avatar
LE TROLL
Bonjour,

"I" est global (long)

Non, comme dit Jacques, suffit de mettre le
dernier élément de l'indice, et ça part
automatiquement de 0, soit (2) = 0, 1, 2

--
Merci beaucoup, au revoir et à bientôt :o)
------
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------
"Patrice Henrio" a
écrit dans le message de news:
%236HGYA%
| LE TROLL a écrit :
| > Bonjour,
| >
| > Je fais:
| >
| > Dim h(30) As long
| > Sub Command1_Click() 'moyenne
| > For i = 1 To 30
| > h(i) = CLng(Text1(i))
| > Next i
| > End Sub
| >
| > A h(i) = CLng(Text1(i))
| > A (i = 1)
| > J'ai "13 : TYPE INCOMPATIBLE "
| >
| > Où est l'erreur, svp ???
| >
| Où est déclaré i ?
| Par ailleurs la déclaration d'un tableau
n'est-elle pas
| dim h(1 to 30) as long ?
Avatar
LE TROLL
Bonjour,

Peu importe, je commanc à 1...

--
Merci beaucoup, au revoir et à bientôt :o)
------
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------
"Jacques93" a écrit dans le
message de news:
OMTnUX%
| Bonjour Patrice Henrio,
| Patrice Henrio a écrit :
| > LE TROLL a écrit :
| >> Bonjour,
| >>
| >> Je fais:
| >>
| >> Dim h(30) As long
| >> Sub Command1_Click() 'moyenne
| >> For i = 1 To 30
| >> h(i) = CLng(Text1(i))
| >> Next i
| >> End Sub
| >>
| >> A h(i) = CLng(Text1(i))
| >> A (i = 1)
| >> J'ai "13 : TYPE INCOMPATIBLE "
| >>
| >> Où est l'erreur, svp ???
| >>
| > Où est déclaré i ?
|
| Bonne question, mais je crois que si i n'était
pas du bon type cela
| produirait une erreur de compilation sur
l'instruction For ...
|
| > Par ailleurs la déclaration d'un tableau
n'est-elle pas
| > dim h(1 to 30) as long ?
|
| Histoire de chipoter, ça dépend aussi de
l'instruction
|
| Option base n
|
| si n = 1
|
| Dim h(1 To 30) As Long et Dim h(30) As Long
sont équivalents
|
| et si n = 0
|
| Dim h(30) équivaut à Dim h(0 To 30)
|
| --
| Cordialement,
|
| Jacques.
Avatar
LE TROLL
Un textBox n'est-il pas par définition
toujours une chaîne alphanumérique ???

isNumeric, j'ai arrêté de l'utiliser, il y a
(de mémoire), plein de cas ou il ne fonctionne
pas, il ne répond pas, ou mal...


Je vais essayer ce que tu dis...

--
Merci beaucoup, au revoir et à bientôt :o)
------
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------
"Jacques93" a écrit dans le
message de news:
eygsUO%
| Bonjour LE TROLL,
| LE TROLL a écrit :
| > Bonjour,
| >
| > Je fais:
| >
| > Dim h(30) As long
| > Sub Command1_Click() 'moyenne
| > For i = 1 To 30
| > h(i) = CLng(Text1(i))
| > Next i
| > End Sub
| >
| > A h(i) = CLng(Text1(i))
| > A (i = 1)
| > J'ai "13 : TYPE INCOMPATIBLE "
| >
| > Où est l'erreur, svp ???
| >
|
| L'erreur 13 me ferait penser à un TextBox non
numérique. Tu peux essayer
| ceci, qui par ailleurs assure, en partie, la
validité de données :
|
| Private Sub Command1_Click()
| Dim i As Integer
| Dim h(30) As Long
|
| For i = 1 To 1
| If IsNumeric(Text1(i)) Then
| h(i) = CLng(Text1(i))
| Else
| MsgBox "Textbox n° : " & i & vbCrLf & "non
numérique"
| End If
| Next i
| End Sub
|
|
| --
| Cordialement,
|
| Jacques.
Avatar
LE TROLL
Eh eh, attends : Clng convertit une chaîne en
numérique, et là tu testes : si numérique =
convertit la chaîne.
Ben... s'il est numléiruque, y a pas besoin de le
convertir... enfin, sauf à le changer de taille d
evariable ??? Même avec "Val" il plante !

--
Merci beaucoup, au revoir et à bientôt :o)
------
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------
"Jacques93" a écrit dans le
message de news:
eygsUO%
| Bonjour LE TROLL,
| LE TROLL a écrit :
| > Bonjour,
| >
| > Je fais:
| >
| > Dim h(30) As long
| > Sub Command1_Click() 'moyenne
| > For i = 1 To 30
| > h(i) = CLng(Text1(i))
| > Next i
| > End Sub
| >
| > A h(i) = CLng(Text1(i))
| > A (i = 1)
| > J'ai "13 : TYPE INCOMPATIBLE "
| >
| > Où est l'erreur, svp ???
| >
|
| L'erreur 13 me ferait penser à un TextBox non
numérique. Tu peux essayer
| ceci, qui par ailleurs assure, en partie, la
validité de données :
|
| Private Sub Command1_Click()
| Dim i As Integer
| Dim h(30) As Long
|
| For i = 1 To 1
| If IsNumeric(Text1(i)) Then
| h(i) = CLng(Text1(i))
| Else
| MsgBox "Textbox n° : " & i & vbCrLf & "non
numérique"
| End If
| Next i
| End Sub
|
|
| --
| Cordialement,
|
| Jacques.
Avatar
Patrice Henrio
LE TROLL a écrit :
Eh eh, attends : Clng convertit une chaîne en
numérique, et là tu testes : si numérique =
convertit la chaîne.
Ben... s'il est numléiruque, y a pas besoin de le
convertir... enfin, sauf à le changer de taille d
evariable ??? Même avec "Val" il plante !



Et quel est le contenu de text(1) ?
Je viens de tester CLng, le réponse que tu obtiens vient du fait que la
chaîne à convertir n'est pas un nombre.

Utilise debug.print Text(1) avant ta conversion pour voir ce que
contient Text1

Attention certains caractères ne renvoient pas d'erreur
ainsi
Clng("azarer") erreur 13
Clng("12aze") erreur 13
Clng("12" & vbcrlf) renvoie 12

Le séparateur de décimal utilisé avec les fonctions de conversion est le
séparateur des paramètres nationaux, soit la virgule pour nous. Avec un
point dans le nombre il y a erreur 13.

... etc
Avatar
Jean-marc
Jacques93 wrote:

L'erreur 13 me ferait penser à un TextBox non numérique. Tu peux
essayer ceci, qui par ailleurs assure, en partie, la validité de
données :
Private Sub Command1_Click()
Dim i As Integer
Dim h(30) As Long

For i = 1 To 1
If IsNumeric(Text1(i)) Then
h(i) = CLng(Text1(i))
Else
MsgBox "Textbox n° : " & i & vbCrLf & "non numérique"
End If
Next i
End Sub



Hello,

On peut aussi faire un Val préalable, car le retour de Val()
sera toujours compatible avec Clng().

On pourrait faire ça:

'-----------------------------------------------------
Option Explicit

' Nombre de TextBoxs, de 1 à NB_TEXT_BOX
Private Const NB_TEXT_BOX As Long = 30

Dim h(NB_TEXT_BOX) As Long

Private Sub Command1_Click()

Dim i As Long

' Affectation
For i = 1 To NB_TEXT_BOX
h(i) = CLng(Val(Text1(i).Text))
Next i

' Vérification
For i = 1 To NB_TEXT_BOX
Debug.Print "h(" & Trim$(Str(i)) & ")=" & h(i)
Next i
End Sub

'-----------------------------------------------------

Dans un vrai programme, on rajouterait avant l'appel
du code de Command1 une fonction de vérification et
validation des TextBox, en utilisant une des techniques
présentées dans la FAQ:

http://faq.vb.free.fr/index.php?question1

ou mieux:
http://faq.vb.free.fr/index.php?question3

Bonne journée :-)

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
Avatar
aski
Hello,

"Jean-marc" a écrit dans le message
de groupe de discussion : 48005ced$0$2948$

On peut aussi faire un Val préalable, car le retour de Val()
sera toujours compatible avec Clng().



Dans mon utilisation de CLng, j'ai contourné une erreur qui se produit pour
les chaînes vides. J'ajoute systématiquement un "0" avant la chaîne à
convertir.
--
Cordialement

Aski
MVP Windows Desktop Experience
1 2 3