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 :

ERREUR D'EXECUTION 6 : DEPASSEMENT DE CAPACITE


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Inscrit en
    Avril 2010
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 257
    Par défaut ERREUR D'EXECUTION 6 : DEPASSEMENT DE CAPACITE
    J'ai un soucis avec ma macro et je ne trouve vraiment pas le probleme. elle me renvoi les informations d'un tableau Excel sur un fichier .txt selon un format.

    cependant j'ai une erreur 6 au niveau de cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     NCpt = FormatNb(Sheets(1).Cells(i, 8).Value, 9) & Left(Sheets(1).Cells(i, 9).Value, 1)
    voici le code de ma macro :
    Merci de bien vouloir m'aider.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
     
    ' Procedure permettant d'écrire les informations dans le fichier texte
    Public Sub FormatFile()
    Dim i, IdFic As Integer
    Dim Chaine, mois, NCpt As String
    Dim TtlCpt, TtlMnt As Double
     
        i = 2
        'y = Sheets(1).Cells(i, 5)
        'Vérif période
        mois = InputBox("Donnez la date de traitement au format 'jjmmaa'.", "Période")
        IdFic = FreeFile
        Open "C:\macrobank\VirSGB" & mois & ".txt" For Output As IdFic
     
        Chaine = "02100001" & mois & "008" & FormatNb(111, 5) & FormatNb(30224399, 11) & FormatStrAfter("UA-Vie", 24) & "00028" & Space(66)
        Print #IdFic, Chaine
     
        i = 6: TtlCpt = 3022439
        While (Sheets(1).Cells(i, 2).Value <> "")
            NCpt = FormatNb(Sheets(1).Cells(i, 8).Value, 9) & Left(Sheets(1).Cells(i, 9).Value, 1)
            Chaine = "022" & _
                FormatNb(i - 4, 5) & _
                mois & "008" & _
                FormatNb(Sheets(1).Cells(i, 7).Value, 5) & _
                NCpt & Right(Sheets(1).Cells(i, 9).Value, 1) & FormatNb(Sheets(1).Cells(i, 3).Value, 6) & " " & _
                FormatStrAfter(Sheets(1).Cells(i, 4).Value & " " & Sheets(1).Cells(i, 5).Value, 24) & _
                FormatStrAfter("SGBCI", 17) & _
                FormatStrAfter("UA-Vie - Rentes", 30) & _
                FormatNb(Sheets(1).Cells(i, 10), 12) & Space(5)
     
            Print #IdFic, Chaine
            TtlCpt = TtlCpt + CDbl(NCpt)
            TtlMnt = TtlMnt + Sheets(1).Cells(i, 10).Value
            i = i + 1
        Wend
     
        Chaine = "029" & FormatNb(i - 4, 5) & mois & Space(8) & FormatNbAfter(TtlCpt, 10) & Space(79) & FormatNbAfter(TtlMnt, 12) & Space(5)
        Print #IdFic, Chaine
        Close IdFic
    End Sub
     
    'Fonction permettant d'écrire une chaine de caractères (Str) sur un nombre fini (Lg) de positions
    Public Function FormatStr(ByVal Str As String, ByVal Lg As Integer) As String
    Dim Result As String
    Dim Diff As Integer
     
        Diff = Lg - Len(Str)
        If Diff > 0 Then
            Result = Space(Diff) & Str
        Else
            Result = Left(Str, Lg)
        End If
     
        FormatStr = Result
    End Function
     
    Public Function FormatStrAfter(ByVal Str As String, ByVal Lg As Integer) As String
    Dim Result As String
    Dim Diff As Integer
     
        Diff = Lg - Len(Str)
        If Diff > 0 Then
            Result = Str & Space(Diff)
        Else
            Result = Left(Str, Lg)
        End If
     
        FormatStrAfter = Result
    End Function
     
    'Fonction permettant d'écrire un nombre (Nb) sur un nombre fini (Lg) de positions
    Public Function FormatNb(ByVal Nb As Long, ByVal Lg As Integer) As String
    Dim Result As String
    Dim Diff As Integer
     
        Diff = Lg - Len(CStr(Nb))
        If Diff > 0 Then
            Result = Space(Diff) & CStr(Nb)
     
        Else
            Result = Left(CStr(Nb), Lg)
        End If
            Result = Replace(Result, " ", "0")
        FormatNb = Result
    End Function
     
    'Fonction permettant d'écrire un nombre (Nb) sur un nombre fini (Lg) de positions en prenant les chiffres de la droite vers la gauche
    Public Function FormatNbAfter(ByVal Nb As Long, ByVal Lg As Integer) As String
    Dim Result As String
    Dim Diff As Integer
     
        Diff = Lg - Len(CStr(Nb))
        If Diff > 0 Then
            Result = Space(Diff) & CStr(Nb)
        Else
            Result = Right(CStr(Nb), Lg)
        End If
        Result = Replace(Result, " ", "0")
     
        FormatNbAfter = Result
    End Function

  2. #2
    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,

    progresser dans le code en mode pas à pas via la touche F8 tout en contrôlant le contenu de la fenêtre des Variables locales



    ______________________________________________________________________________________________________
    Je suis Charlie - Je suis Bardo

  3. #3
    Membre émérite Avatar de Nico Chg
    Homme Profil pro
    Apprenti ingénieur Business Development
    Inscrit en
    Juillet 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Apprenti ingénieur Business Development
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2014
    Messages : 352
    Par défaut


    Bonjour,

    Ton erreur se situe probablement au sein de la fonction "FormatNb". Comme le dis Marc-L, il faut regarder le code en mode pas-à-pas, et regarder la valeur de chacune de tes variables.

    juste en survolant ton code, tu peux peut être essayer de remplacer les types "integer" par des types "doubles". Un integer ne contient que 65635 valeur entière positive. La plupart des dépassements de capacités proviennent de cette limite, essaye donc de typer tes variables en "doubles".

  4. #4
    Membre éclairé
    Inscrit en
    Avril 2010
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 257
    Par défaut
    au fait elle s'exécute de la ligne 6 la ligne 15 puis marque l'erreur c'est ce que je n'arrive pas à comprndre !


  5. #5
    Membre émérite Avatar de Nico Chg
    Homme Profil pro
    Apprenti ingénieur Business Development
    Inscrit en
    Juillet 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Apprenti ingénieur Business Development
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2014
    Messages : 352
    Par défaut


    L'erreur pointe l'appel à la fonction FormatNb (appelé ligne 15), mais je pense (n'aillant pas fais les tests), que ton erreur se situe réellement dans la fonction "FormatNb". Je pense que tu peux en être fixé en effectuant le debug en mode pas-à-pas (Pose un point d'arrêt avant la ligne 15, et ensuite suis le code ligne par ligne avec F8).

    Ensuite, a mon avis, comme je le disais un peu plus tôt, la plupart des erreurs de dépassement de capacités se situe dans le typage des variables numériques. Un integer ne peut contenir que des nombres entiers positifs compris entre 0 et 65635. Le moindre nombre à virgule, ou un nombre négatif renvoie une erreur de capacité.

    Essaye donc de typer tes variables en "double".

    EDIT : C'est tout trouvé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Chaine = "02100001" & mois & "008" & FormatNb(111, 5) & FormatNb(30224399, 11) & FormatStrAfter("UA-Vie", 24) & "00028" & Space(66)
    30 224 399 n'est PAS un integer. Du moins, un integer ne peux pas contenir une valeur aussi importante. Il faut typer tes variables en double, comme je l'ai expliqué plus tôt.

  6. #6
    Membre éclairé
    Inscrit en
    Avril 2010
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 257
    Par défaut
    Merci pour vos réponses, j'ai trouvé la solution en utilisant le type Double à la place des long.

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

Discussions similaires

  1. erreur '6' depassement de capacité
    Par jad73 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 08/06/2012, 10h31
  2. erreur d'execution6 : depassement de capacité
    Par hebh dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 17/11/2011, 13h54
  3. [AC-2003] erreur d'execution 6 depassement de capacite
    Par Cuoreconleali dans le forum VBA Access
    Réponses: 2
    Dernier message: 17/12/2009, 17h45
  4. error execution ; depassement de capacité
    Par zcoul dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 26/07/2007, 12h05
  5. [VBA-E] erreur 1004 et depassement de capacité dans une boucle
    Par lio62 dans le forum Macros et VBA Excel
    Réponses: 23
    Dernier message: 11/02/2007, 13h37

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