01net    Web


Actuellement en ligne : 190 Utilisateurs dont 9 dans Programmation et développement >S'inscrire      >S'identifier      >Recherche      >Aide  
modéré par A.Ouloube, Beno@  
01net > Forum de 01net > Programmation et développement > .net / Technologies MS
> VBA Excel : dépassement de capacité
Auteur
Message
 
<     1       >
marsokod
  
   
      ?   @     Posté le 26/06/2007 21:07:31  
Voter pour ce message
Bonjour,
Je débute en VBA sous Excel et j'ai un problème lors de l'execution de ma macro.
J'ai de nombreuses feuilles de calcul qui donnent un résultat en fonction d'un paramètre que j'ai inscrit dans une cellule. Le but est de faire varier ce paramètre puis de récupérer le résultat et de mettre tout ça ne forme dans une autre feuille. Le problème est qu'au bout de trois boucles, cette erreur apparait. Y aurait-il un type à respecter pour les Range ?
Merci d'avance

Dim i As Integer
Dim rayon As Long
For i = 0 To 9000
Sheets("rp").Select
rayon = 340000000 + i * 10000
Range("A18") = rayon
Range("K14").Select
Selection.Copy
Sheets("Results").Select
Range("A1").Offset(i, 0) = 340000000 + i * 10000
Range("A1").Offset(i, 1).PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Next i

EDIT : Je suis parvenu à régler mon problème en créant la colonne des rayons sous la feuille excel puis en récupérant la valeur. C'est moins joli mais ça marche. Je suis toujours intéressé pour connaître le problème de ma macro initiale.
-->Message édité par marsokod le 26/06/2007 21:44:58<--
skyla
  
   
      ?   @     Posté le 30/07/2008 22:59:27  
Voter pour ce message
salut,
ton probleme vient de ta declaration
Dim rayon As Long
rayon = 340000000 + i * 10000

Exemle
Dim result As Long

result = 100 * 1000

ramene l'erreur pourtant, le résultat (100000) est compatible avec le type long.

Explication : Quand il effectue des opérations arithmétiques entre 2 expressions, VB produit un résultat intermédiaire (avant affectation) qui est du même type que celui de l'expression ayant le type le plus précis.
L'ordre de précision, du plus précis au moins précis est : Byte, Integer, Long, Single, Currency, Double, and Decimal.

Les constantes non suffixées comme 100 ou 10000 sont de type Integer. VB essaie donc de créer un résultat intermédiaire de type Integer pour y stocker 100000, ce qui est en dehors de la plage pour ce type (-32768, +32767).

Pour éviter cela, on peut spécifier que les constantes sont de type Entier Long, en ajoutant le signe & en suffixe :

result = 100& * 1000&
Note : une bonne pratique est de ne pas utiliser de constantes numériques ("nombres magiques") dans le code. On devrait préférer une déclaration explicite d'une constante, de préférence bien typée. Par exemple pour une constante de type Entier Long :

Const Pesanteur As Long = 10
<     1       >

01net > Forum de 01net > Programmation et développement > .net / Technologies MS
> VBA Excel : dépassement de capacité

Aller à :

Page générée en : 0.058s - X2board 2.2

Nous contacter | Charte de confiance | Voir notice légale

Tous droits réservés © 1999 - 2008 Groupe Tests - 01net.


Sites du réseau 01net Network : 01net - 01men - Rmc.fr - Bfmtv.fr - Radiobfm.com - TousLesPodcasts - Micro Achat

Jeux Mobile 
Mobile : Téléchargez les dernières nouveautés pour votre téléphone portable !
Foot   
Platini-Wenger: la guerre ? Dérapages verbaux entre le président de l'UEFA et le coach d'Arsenal !