Problème conversion str en cnlg ???

Le
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 3
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Patrice Henrio
Le #15363891
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 ?
Jacques93
Le #15363881
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.
Jacques93
Le #15363871
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.
LE TROLL
Le #15363861
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" é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 ?
LE TROLL
Le #15363851
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.
LE TROLL
Le #15363841
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.
LE TROLL
Le #15363831
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.
Patrice Henrio
Le #15363821
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
Jean-marc
Le #15363811
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_' ;
aski
Le #15363801
Hello,

"Jean-marc" 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
Publicité
Poster une réponse
Anonyme