RS8
Messages postés100Date d'inscriptionvendredi 18 mai 2007StatutMembreDernière intervention15 juillet 2009
-
5 juin 2007 à 08:45
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 2021
-
6 juin 2007 à 09:49
Bonjour,
j'ai un tableau Excel et avec vb6 je voudrais tester si le contenu d'une cellule est un entier. J'ai essayé avec IsNumeric mais il lui arrive de convertir les String en Integer.
N'est-il pas possible de tester si le contenu de la cellule appartient à un intervalle d'entiers ?
Par exemple :
Dim intervelle As Range
intervalle = [0..50]
If contenuCellule "appartient" intervalle Then
...
Else
End If
RS8
Messages postés100Date d'inscriptionvendredi 18 mai 2007StatutMembreDernière intervention15 juillet 2009 5 juin 2007 à 08:59
Ok mais je ne veux pas justement !
Je t'explique un peu mieux : je teste si le contenu de la cellule A1 est un entier et si c'est le cas je stocke les valeurs de la ligne 1.
Si elle est vide ou contient une chaîne de caractère je passe à la ligne suivante et ainsi de suite jusqu'à parcourir complétement mon tableau Excel.
Je ne souhaite donc garder que les cellules contenant des entiers et IsNumeric convertit les String en Int et donc ça fausse mes données!
RS8
Messages postés100Date d'inscriptionvendredi 18 mai 2007StatutMembreDernière intervention15 juillet 2009 5 juin 2007 à 09:13
Non c'était un exemple! En fait ma colonne et numérotée de 1 à 30 000 mais je dois convertir les données d'un appareil de mesure et lorsqu'il y a une erreur ce n'est plus un entier mais une string et la je ne veux pas qu'il me mette cette ligne dans mon tableau car elle est inutile et comme je dois tracer un graphe par la suite il ne me faut que des réels dans mon tableau !
Mais oui il faut que ce soit un entier naturel (>= 0)
Merci
Vous n’avez pas trouvé la réponse que vous recherchez ?
RS8
Messages postés100Date d'inscriptionvendredi 18 mai 2007StatutMembreDernière intervention15 juillet 2009 5 juin 2007 à 09:22
Non pas un nombre, il me met le nom de l'erreur avec un charabia incompréhensible!
Je voudrais juste que mon programme, tant que les lignes de la colonne A sont des entiers (ex : 1, 2, 3, ...) récupère la ligne correspondante et la stocke dans un tableau d'entier et dès qu'il s'aperçoit que c'est une string passe à la ligne suivante et ce autant de fois que le fichier excel contient d'erreurs. Car si j'utilise IsNumeric, il va convertir la string mais ca ne va pas correspondre et mon graphique va etre faussé!
drikce06
Messages postés2236Date d'inscriptionlundi 29 mai 2006StatutMembreDernière intervention29 mai 200810 5 juin 2007 à 09:27
Mais si tu fais, isnumeric alors que tu as une chaine du style "258toto25588" ça converti pas en Integer il vois bien que c'est une chaîne et pas un nombre, là je vois pas ton problème.
If IsNumeric(Range("N1").Value) Then
Donne le bout de code que tu as fait qu'on voye ce qui va pas.
RS8
Messages postés100Date d'inscriptionvendredi 18 mai 2007StatutMembreDernière intervention15 juillet 2009 5 juin 2007 à 09:32
C'est exactement ce que tu as mis :
Dim i As Long
Dim tableau(30 000) As Long
For i = 1 To 30 000
If IsNumeric(Range("A" & i).Value) Then
tableau(i-1) = Range("A" & i).Value
Else
End If
Next
drikce06
Messages postés2236Date d'inscriptionlundi 29 mai 2006StatutMembreDernière intervention29 mai 200810 5 juin 2007 à 09:40
Le problème c'est que tu ne gères pas le cas où ce n'est pas numéric.
Dim i As Long
Dim tableau(30 000) As Long
For i = 1 To 30 000
If IsNumeric(Range("A" & i).Value) Then
tableau(i-1) = Range("A" & i).Value
Else
tableau(i-1) = 0 ou autre chose
End If
Next
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 5 juin 2007 à 10:40
J'ai fait le test avec différentes valeurs numériques, avec virgule ou point, avec apostrophe comme premier caractère, avec espace, avec des lettres,... et ça devrait bien fonctionner de cette manière.
If IsNumeric(Range("A" & I)) _
And Range("A" & I) >= 0 _
And Range("A" & I) <= 30000 Then
MsgBox "Ligne " & I & " OK" & vbCrLf & _
Range("A" & I) * 2 ' pour vérifier si la valeur se calcule
End If
RS8
Messages postés100Date d'inscriptionvendredi 18 mai 2007StatutMembreDernière intervention15 juillet 2009 5 juin 2007 à 12:01
Oui et ça doit être pour cela qu'il ne marche pas
Mais c'est bon j'ai trouvé! Plutôt que de tester si c'est un entier je fais plusieurs tests car j'ai remarqué que les erreurs commencent par des string qui sont tout le temps les mêmes (il y en a 20 différentes!!!) ! Certes ce n'est pas très esthétique un If avec 19 ElseIf mais c'est le seul code que j'ai trouvé et qui marche ! Et donc si le test ne rentre dans aucun des elseIf c'est que ma cellule contient un entier !
Sinon j'ai lu sur un autre forum que la commande IsNumeric ralentissait le programme ! Est-ce vrai?
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 5 juin 2007 à 12:40
Une méthode rigolote :
Une chaîne de caractères représente sans aucun doute un entier lorsque la retransformation en chaîne de l'entier de la division par 1 de la chaîne concernée est la chaine de départ.
Ainsi :
Private Sub Command1_Click()
toto = "11.1"
MsgBox IIf(CStr(Val(toto) \ 1) = toto, toto & " est un entier", toto & " n'est pas un entier")
toto = "11"
MsgBox IIf(CStr(Val(toto) \ 1) = toto, toto & " est un entier", toto & " n'est pas un entier")
toto = "n'importe quoi"
MsgBox IIf(CStr(Val(toto) \ 1) = toto, toto & " est un entier", toto & " n'est pas un entier")
toto = "-10"
MsgBox IIf(CStr(Val(toto) \ 1) = toto, toto & " est un entier", toto & " n'est pas un entier")
End Sub
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 6 juin 2007 à 09:49
Je crois que j'ai saisi, une cellule qui contient "16" (un texte) ne doit pas être confondu avec une cellule qui contiendrait 16 (numérique)...
voilà du tout cuit...
Public Function IsCellValueInRange(ByRef voCell As Range, ByVal vnMin As Integer, ByVal vnMax As Integer) As Boolean
'# Si notre cellule contient un numérique
If IsNumeric(voCell.Text) Then
'# Et qu'il ne comporte pas de partie décimale...
If voCell.Value = voCell.Value \ 1 Then
'# Alors, on testes, tentant de savoir si le contenu de notre
'# cellule est situé entre les bornes reçues en paramètre.
IsCellValueInRange = voCell.Value >= vnMin And voCell.Value <= vnMax
End If
End If
End Function , ----
By Renfield
s'utilise ainsi :
If IsInValueRange(ActiveCell, 0, 50) Then
...
End If , ----
By Renfield