Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2527 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Erreur d'éxecution '6' - Dépassement de capacité

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Erreur d'éxecution '6' - Dépassement de capacité

n°2070391
FrenchGirl
Posté le 15-04-2011 à 22:25:14  profilanswer
 

Bonsoir,  
 
J'ai lu un peu sur le forum les réponses revenants à ce sujet, mais problème, je ne trouve toujours pas la logique de la programmation  :??: .
Je vous explique alors mon problème, je dois rendre un projet utilisant VBA pour un mémoire d'économie, j'ai utilisé le même programme pour un autre pays (etats-unis) et tout fonctionne à la perfection. J'ai essayé de nouveau pour un autre pays mais là le programme bogue. De plus, l'erreur ne venait pas d'une autre variable. J'essaie d'augmenter la capacité de mon programme... Mais je n'y arrive toujours pas.  
 
Je vous laisse ici mon programme:
 

Sub ProcAnnéeTech()
Dim t As Integer
Dim prod As Integer
Dim prow as Integer
Dim i As integer
Dim j As integer
Dim n As Integeer
 
Dim wsACRSA As Worksheet
Dim année As String
Dim pays As String
 
pays = InputBox("Quel est le pays étudié?", "Choix du pays", "Portugal" )
Set wsACRSA = ThisWorkbook.Worksheets("Synthèse_année" )
prod = wsACRSA.Cells(Rows.Count, 1).End(xlUp).Row - 2
wsACRSA.Rows(prod + 3).Clear
wsACRSA.Cells(1, 2).Resize(Rows.Count, Columns.Count - 1).Clear
wsACRSA.Cells(1, 1).Value = "Tableau 2. " & pays & " : avantages comparatifs (1) selon l'intensité technologique"
 
n = InputBox("Quel est le nombre d'année?", "Nombre d'année", 5)
 
For i = 1 To n
année = InputBox("Quelle est l'année étudiée?", "Choix de l'année", "1969" )
wsACRSA.Cells(2, 1 + i).Value = année
 
t = 3
Do Until ThisWorkbook.Worksheets(pays).Cells(3, t).Value = année
t = t + 1
Loop
    For j = 1 To prod
    prow = 4
    Do Until ThisWorkbook.Worksheets(pays).Cells(prow, 4).Value = wsACRSA.Cells(2 + j, 1).Value
 [#ff3800]   prow = prow + 1[/#ff3800][i][b] => Raison du bogue[/b][/i]
    Loop
    wsACRSA.Cells(2 + j, 1 + i).Value = ThisWorkbook.Worksheets(pays).Cells(prow, t).Value
    Next j
Next i
 
With wsACRSA
.Cells(3, 2).Resize(prod, n).NumberFormat = "0.00"
.Cells(2, 2).Resize(prod + 1, n).HorizontalAlignment = xlCenter
.Rows("2:" & prod + 2).RowHeight = 18
.Cells(2 + prod + 1, 1).Value = "Note (1) mesurés par l'indicateur d'avantages comparatifs révélés symétriques de Balassa"
.Cells(2, 1).Resize(prod + 1, n + 1).Borders.LineStyle = xlContinuous
End With
 
End Sub


 
Je suis désolée de poster à nouveau un sujet sur ce thème, mais je n'y arrive vraiment pas toute seule.  
 
Bonne soirée à tous!


Message édité par FrenchGirl le 15-04-2011 à 23:05:22
mood
Publicité
Posté le 15-04-2011 à 22:25:14  profilanswer
 

n°2070393
kiki29
Posté le 15-04-2011 à 22:43:15  profilanswer
 

Salut,à vue de nez, sans aller plus loin pour le moment


Dim n As Integeer ????


 
sinon change le type de tes variables Integer en Long
 
puis Do Until .... Loop en  


Do
.....
Loop Until ...


 
et balise ton code stp ( sélectionner le code puis cliquer sur icône Fixe )

Message cité 1 fois
Message édité par kiki29 le 15-04-2011 à 22:51:35
n°2070394
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 15-04-2011 à 22:50:23  profilanswer
 

Selon ce tableau : http://msdn.microsoft.com/en-us/li [...] S.90).aspx

 

Le type Integer a une taille de 16 bits signé, donc son éventail de valeurs possibles va de -32768 à +32767. Si tu as un dépassement de capacité à la ligne que tu as mentionnée, ça veut dire qu'à un moment donné, ta variable "prow" à force d'être incrémentée, dépasse sa capacité, et donc prend une valeur supérieur à 32767.

 

D'après la ligne au dessus de ta ligne en erreur, la condition de sortie de la boucle qui incrémente cette variable (la boucle Do Until...Loop) est que la cellule située à (prow, 4) de ta feuille "Pays" doit être égale à la cellule (2+j, 1) de ta feuille "Synthese_Annee".

 


Il est donc fort possible que cette condition ne soit jamais vraie, provoquant l'incrémentation infinie de ta variable prow, et donc un dépassement de sa capacité. A toi de vérifier tes 2 feuilles.

 

edit:
@kiki29 : changer le type en long ne fera que retarder le problème si la condition de sortie de la boucle Do Until...Loop n'est jamais respectée. Elle peut effectivement essayer de modifier le type de prow en Long. Si ça marche, alors ça veut dire que la condition est respectée au delà de la 32767eme ligne, sinon il faudra vérifier les sheets pour voir pourquoi la condition de sortie n'est jamais rencontrée.


Message édité par Harkonnen le 15-04-2011 à 22:57:06

---------------
J'ai un string dans l'array (Paris Hilton)
n°2070395
FrenchGirl
Posté le 15-04-2011 à 22:50:52  profilanswer
 

kiki29 a écrit :

Salut,à vue de nez, sans aller plus loin pour le moment


Dim n As Integeer ????


 
sinon change le type de tes variables Integer en Long
 
puis Do Until .... Loop en  


Do
.....
Loop Until ...


 
et balise ton code stp


 
Parce que selon mon prof, as integer prend moins de mémoire... Donc je le suis plutôt, je ne savais même pas qu'on pouvait baliser un code !

n°2070396
kiki29
Posté le 15-04-2011 à 22:55:45  profilanswer
 

Re,regarde aussi la remarque d'Harkonnen
sinon oui cela prend moins de place mais en fait tu as interet à déclarer tes "Integer" en Long car sur les processeurs actuels cela est plus rapide


Message édité par kiki29 le 15-04-2011 à 22:56:14
n°2070397
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 15-04-2011 à 22:56:39  profilanswer
 

FrenchGirl a écrit :


 
Parce que selon mon prof, as integer prend moins de mémoire... Donc je le suis plutôt, je ne savais même pas qu'on pouvait baliser un code !


Ton prof est un idiot : on ne choisit pas le type des variables en fonction de la consommation mémoire, mais en fonction de la plage de valeurs qu'elles sont susceptibles de contenir.
Là en l'occurence, choisir Integer est inopportun, car une feuille Excel peut contenir jusqu'à 65535 lignes, soit bien au delà de la capacité d'un Integer. Et comme il n'existe pas d'Integer non signé en VBA, il faut passer direct à Long.


---------------
J'ai un string dans l'array (Paris Hilton)
n°2070400
FrenchGirl
Posté le 15-04-2011 à 23:02:24  profilanswer
 

Harkonnen a écrit :


Ton prof est un idiot : on ne choisit pas le type des variables en fonction de la consommation mémoire, mais en fonction de la plage de valeurs qu'elles sont susceptibles de contenir.
Là en l'occurence, choisir Integer est inopportun, car une feuille Excel peut contenir jusqu'à 65535 lignes, soit bien au delà de la capacité d'un Integer. Et comme il n'existe pas d'Integer non signé en VBA, il faut passer direct à Long.


 
Je confirme... Ca fait deux ans qu'il essaie de m'enseigner VBA, sans grand succès, voir aucun :/

n°2070402
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 15-04-2011 à 23:04:07  profilanswer
 

Sinon, comme je doute fort que tes feuilles Excel atteignent 32767 lignes, tu as vérifié pourquoi ta condition de sortie n'est jamais vraie ?

Message cité 1 fois
Message édité par Harkonnen le 15-04-2011 à 23:04:30

---------------
J'ai un string dans l'array (Paris Hilton)
n°2070403
FrenchGirl
Posté le 15-04-2011 à 23:08:05  profilanswer
 

Harkonnen a écrit :

Sinon, comme je doute fort que tes feuilles Excel atteignent 32767 lignes, tu as vérifié pourquoi ta condition de sortie n'est jamais vraie ?


 
J'ai regardé oui, et il y a en théorie aucun problème mais je cherche une autre raison. Pour le coup non, vu que la feuille en question ne comporte que 9 colonnes et 32 lignes! Je vous tiens informer, si j'y arriver. En tout cas, merci énormément pour votre aide à vous et kiki!


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Erreur d'éxecution '6' - Dépassement de capacité

 

Sujets relatifs
Temps d'exécution en millisecondes (linux/windows) + multithreadsErreur de récupération de session entre HTTP et HTTPS
Erreur SQLprobleme xampp erreur 404
1120: Accès à la propriété non définie rewind erreur flashformulaire de contact : erreur ?
Objet WMI inaccessible : de quoi vient cette erreur ?VBA Excel 2007 Problème de variable objet. Erreur 91
Erreur d'exécution '6' : dépassement de capacité 
Plus de sujets relatifs à : Erreur d'éxecution '6' - Dépassement de capacité


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR