dépassement de capacité

W

wikend

Guest
Bonjour forum,

J'ai une erreur dépassement de capacité que je ne comprend pas trop.
De plus, suis je obligé de récupérer les valeurs en string ?
Merci

Code:
    Dim Valeur1 as String
    Dim Valeur2 as String

    Valeur1 = Sheets(1).Cells(1, 1).Value
    Valeur2 = Sheets(1).Cells(1, 2).Value
    
    If CInt(Valeur1) < CInt(Valeur2) Then
    //Erreur dépassement de capacité !

Valeur1 = 5731528,3
Valeur2 = 5126110,59
 

2passage

XLDnaute Impliqué
Bonjour,

tu cherches à convertir en entier des valeurs de texte. Le problème c'est que 'integer' ne supporte que de -32 768 et 32 767. Donc, remplace CInt par CLng qui convertit en entier long (-2 à +2 milliards et des poussières)

A+

EDIT : je m'aperçois apres coup que tu as des décimales en plus... si tu souhaite les conserver : CDble

Message édité par: 2passage, à: 01/09/2005 11:51
 

PascalXLD

XLDnaute Barbatruc
Modérateur
Bonjour wikend et 2passage

Peut-être peux-tu simplemnt déclarer tes variables en double comme cela tu n'as pas besoin de conversion du style

Code:
   Dim Valeur1 as Double

    Dim Valeur2 as Double

    Valeur1 = Sheets(1).Cells(1, 1).Value

    Valeur2 = Sheets(1).Cells(1, 2).Value
  
    If Valeur1 < Valeur2 Then

(sinon méthode de 2passage)


Bonne journée

Message édité par: Pascal76, à: 01/09/2005 12:00
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonjour WikEnd, le Forum

C'est normal car CInt est une Fonction de Conversion qui retourne une Valeur Integer (-32,768 to 32,767)

Essaie plutôt CDbl qui retournera une Valeur Double...

Par la même occasion il est très peu orthodox de passer de String vers du Numérique si on part d'une valeur en provenance d'une Range...

Voici déjà une exemple de base de test :
Sub VariableDouble()
Dim Valeur1 As Double
Dim Valeur2 As Double

 
    Valeur1 = 5731528.3
    Valeur2 = 5126110.59
   
   
If CDbl(Valeur1) < CDbl(Valeur2) Then
        MsgBox 'Glop Glop'
   
Else
        MsgBox 'Pas Glop'
   
End If


End Sub


Et maintenant un autre exemple avec gestion d'un test pour vérifier que la Valeur des Range est bien numérique, car la Déclaration 'As Double' ne fera pas de cadeau si il y a 'Toto' en A1...

Sub VariableDoubleFromRangeWithTest()
Dim Valeur1 As Double
Dim Valeur2 As Double


With Sheets(1)
If IsNumeric(.Cells(1, 1)) Then Valeur1 = .Cells(1, 1)
If IsNumeric(.Cells(1, 2)) Then Valeur2 = .Cells(1, 2)
End With

   
   
If CDbl(Valeur1) < CDbl(Valeur2) Then
        MsgBox 'Glop Glop'
   
Else
        MsgBox 'Pas Glop'
   
End If


End Sub

En fait à partir de là, la Conversion 'CDbl' devient même inutile, mais je l'ai laissée pour l'exemple


Bon Appétit
[ol]@+Thierry[/ol]

EDITION !!!

Sorry pas raffraichi et coup de Fil entre-temps pour poster ma réponse...
Bonjour à vous deux aussi Pascal et 2Passage !

Message édité par: _Thierry, à: 01/09/2005 12:05
 
W

wikend

Guest
Bonjour Pascal76, 2Passage et @+Thierry,

En mettant des Double celà fonctionne !
Un grand merci donc, je n'ai plus besoin de convertir et Pour infos j'avais prévu de tester la valeur numéric.
Donc merci bien ! :)

Bonne journée
 

Discussions similaires

Réponses
10
Affichages
535

Statistiques des forums

Discussions
312 347
Messages
2 087 502
Membres
103 563
dernier inscrit
samyezzehar