IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Dépassement de capacité dans un for [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2010
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 36
    Par défaut Dépassement de capacité dans un for
    Bonjour,

    En montrant un bout de code à quelqu'un je suis tombé sur un dépassement de capacité que je ne m'explique pas, j'ai un tableau déclaré en Long que je remplis avec une boucle via un compteur déclaré en Long et j'obtiens un dépassement de capacité pour compteur = 16384.

    La seule explication logique que je vois pour cela se produise serait que 2*compteur=32768 et que compteur prenne temporairement la valeur 32768 qui dépasse la valeur d'un Integer mais pourtant tableau est déclaré en long... et non en Integer, donc je ne dépasse pas la capacité de tableau...

    Du coup je ne vois pas pourquoi cela ce produit... Avez vous une idée ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Option Explicit
     
    Sub test()
        Dim tableau(30000, 5) As Long '-2147483648 à 2147483647
        Dim compteur As Long '-32768 à +32767
     
        For compteur = 1 To UBound(tableau, 1)
            tableau(compteur, 0) = 2 * compteur
        Next compteur
     
    End Sub

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    C e n'est certes pas la portion du code que tu montres-là qui peut générer une telle erreur.
    Cette erreur est ailleurs dans ton code .

    Je "sens" par contre que le code que tu nous a montré n'est pas le copié/collé fidèle du tien, notamment en ce qui concerne la ligne disant :
    Car si tu l'as en réalité typée en Integer -->> alors là oui --->> dépassement de capacité, c'est certain !

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2010
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 36
    Par défaut
    oh, au temps pour moi, le code d'origine était bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub test()
        Dim tableau(30000, 5) As Long '-2147483648 à 2147483647
        Dim compteur As Integer '-32768 à +32767
     
        For compteur = 1 To UBound(tableau, 1)
            tableau(compteur, 0) = 2 * compteur
        Next compteur
    End Sub
    En effet, j'ai tester en Long et l'erreur n'apparait plus, j'ai oublié de remettre en l'état avant de copier coller.

    Ce que je ne comprend pas c'est pourquoi dans ce cas il y a dépassement de capacité, compteur ne prend jamais une valeur supérieur à 32767 puisqu'il boucle entre 1 et 30000...

  4. #4
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour !

    Il suffit pourtant de regarder la ligne déclenchant l'erreur et de la corriger :

          tableau(compteur, 0) = 2 * CLng(compteur)

    ou encore tableau(compteur, 0) = 2& * compteur !

    Evidemment en déclarant convenablement la variable compteur en Long …

    _________________________________________________________________________________________________________
    Je suis Paris, Nice, Bruxelles, Charlie, …

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. erreur de dépassement de capacité dans calcul après filtrage
    Par marcelisa2 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/11/2013, 16h41
  2. [AC-2007] Dépassement de capacité dans un état
    Par Rundal1 dans le forum VBA Access
    Réponses: 2
    Dernier message: 05/12/2011, 10h28
  3. Dépassement de capacité dans une base de données
    Par platon1 dans le forum Assembleur
    Réponses: 5
    Dernier message: 09/09/2011, 15h01
  4. [XL-2000] Boucle for, erreur de dépassement de capacité
    Par chouki60 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 31/05/2011, 13h56
  5. Dépassement de capacité pour stockage identifant dans une appli vb6
    Par Pynuch dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 16/04/2008, 15h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo