Erreur d'exécution 6 Dépassement de capacité

Résolu/Fermé
MMAGNIN Messages postés 7 Date d'inscription samedi 6 décembre 2014 Statut Membre Dernière intervention 7 décembre 2014 - 6 déc. 2014 à 22:38
 Maurice - 7 déc. 2014 à 13:09
Bonsoir à tous,

Après avoir tapé la macro suivante :

Sub test()
Dim i As Integer
i = 1
Dim a As Integer
a = 1
Dim b As Integer
b = 1
While i <= 40
If Sheets("Feuil1").Range("E" & a).Value <> "" Then
Sheets("Feuil2").Range("A" & b).Value = Sheets("Feuil1").Range("A" & a).Value
Sheets("Feuil2").Range("B" & b).Value = Sheets("Feuil1").Range("B" & a).Value
Sheets("Feuil2").Range("C" & b).Value = Sheets("Feuil1").Range("C" & a).Value
Sheets("Feuil2").Range("D" & b).Value = Sheets("Feuil1").Range("D" & a).Value
i = i + 1
b = b + 1
End If
a = a + 1
Wend
End Sub

J'ai une erreur d'exécution 6 '' Dépassement de capacité " qui s'affiche lors de lancement de la macro, après le débogage l'erreur se trouve dans la ligne a = a +1

Pour information j'ai essayé la fonction Dim As Long pour toutes les variables et ça ne marche pas non plus.

Donc pour l'instant je suis bloqué.

Merci de votre aide.

Cordialement,
A voir également:

9 réponses

Mytå Messages postés 2973 Date d'inscription mardi 20 janvier 2009 Statut Contributeur Dernière intervention 20 décembre 2016 942
Modifié par Mytå le 6/12/2014 à 23:02
Salut le Forum

Un test sur le nombre max de lignes (Pour a et b)
If a > 1048576 Then Exit Sub

Mytå


Merci de donner suite à votre question, nous ne sommes pas des robots...
« Si le déboguage est l'art d'enlever les bogues, alors la programmation doit être l'art de les créer. »
0
Mytå Messages postés 2973 Date d'inscription mardi 20 janvier 2009 Statut Contributeur Dernière intervention 20 décembre 2016 942
6 déc. 2014 à 23:05
Re le Forum

Et tu veux faire quoi avec ton code . . .

Mytå
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 209
6 déc. 2014 à 23:12
Bonjour à tous,

Dim a As Integer 

Tu es limité à 256, met As Long.

eric
0
MMAGNIN Messages postés 7 Date d'inscription samedi 6 décembre 2014 Statut Membre Dernière intervention 7 décembre 2014
Modifié par MMAGNIN le 6/12/2014 à 23:43
Bonsoir Eric,

Après remplacement de As Integer par As Long

La macro m'affiche ''erreur d'exécution 1004''

Erreur définie par l'application ou par l'objet

L'erreur est dans la ligne suivante :

If Sheets("Feuil1").Range("E" & a).Value <> "" Then

Pour info je suis un débutant

Merci d'avance de votre retour,
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 209
7 déc. 2014 à 00:07
Et bien quelqu'un pourra regarder quand tu auras répondu à myta (au-dessus).

Quand tu colles un code indente-le et met-le en forme avec l'icone <>
Et un fichier de travail générera plus de réponses : cjoint.com et coller ici le lien fourni.

eric
0
MMAGNIN Messages postés 7 Date d'inscription samedi 6 décembre 2014 Statut Membre Dernière intervention 7 décembre 2014 > eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023
7 déc. 2014 à 00:17
Merci pour ta réponse Eric,

Voici le lien de mon fichier :

http://www.cjoint.com/data3/3LhawrgLkhK.htm
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
7 déc. 2014 à 08:44
Bonjour à tous

tu implémente "i" que lorsqu'il y a qqchose dans la colonne E
donc quand tu dépasses la dernière ligne de E ta boucle tourne sur elle m^me ("i" ne s'implémente plus puisqu'inséré dans le "if")jusqu'à ce que "a" dépasse la capacité d'un type "long"
0
MMAGNIN Messages postés 7 Date d'inscription samedi 6 décembre 2014 Statut Membre Dernière intervention 7 décembre 2014
7 déc. 2014 à 10:25
Salut michel,

Pour corriger le code je dois faire comment SVP ?

Je suis un novice

Merci d'avance de ta réponse.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bonjour

Je pense a un truc comme ca

Sub Test()
Dim L As Long
Dim B As Long
B = 1
Application.ScreenUpdating = False
DernLigne = Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row
   For L = 1 To DernLigne
      If Range("E" & L).Value > 0 Then
         Range("A" & L & ":D" & L).Copy
         Sheets("Feuil2").Range("A" & B).PasteSpecial xlPasteValues
         B = B + 1
      End If
   Next
Application.ScreenUpdating = True
Application.CutCopyMode = False
End Sub



A+
Maurice
0
MMAGNIN Messages postés 7 Date d'inscription samedi 6 décembre 2014 Statut Membre Dernière intervention 7 décembre 2014
7 déc. 2014 à 11:55
Salut Maurice,

Tout d'abord merci pour ta réponse

J'ai essayé ton code, il marche sans problème

mais le souci c'est que il prend toutes les lignes de la feuille1 et il les colle dans la feuille2. Or moi je voulais qu'il copie juste 40 lignes de la feuille1, parce que dans la feuille2 je suis limité à 40 lignes.

Peux-tu m'apporter cette modification STP, j'en serai vraiment reconnaissant

D'avance merci,
0
Re
il sufit de mettre 40 sur le For

For L = 1 To 40

a toi de voir

A+

Maurice
0
MMAGNIN Messages postés 7 Date d'inscription samedi 6 décembre 2014 Statut Membre Dernière intervention 7 décembre 2014
7 déc. 2014 à 12:22
quant je mets :

DernLigne = 40
For L = 1 To 40

Il me prends 40 lignes de la feuille1 et il les copie dans la feuille2, mais pas que les lignes avec la cellule E pleine, il prends les deux cas (cellule E pleine et cellule E vide). moi je veux qu'il me prenne que les lignes là où la cellule E est pleine (une valeur).

je m'excuse pour le dérangement.
0
re

je pense que tu maitise pas du tout les macro

regarde bien

Sub Test()
Dim DernLigne As Long
Dim L As Long
Dim B As Long
B = 1
Application.ScreenUpdating = False
Feuil2.Cells.ClearContents
'DernLigne = Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row
DernLigne = 40
   For L = 1 To DernLigne
      If Range("E" & L).Value > 0 Then
         Range("A" & L & ":E" & L).Copy
            Feuil2.Range("A" & B).PasteSpecial xlPasteValues
         B = B + 1
'         If B > 40 Then Exit For
      End If
   Next
Application.ScreenUpdating = True
Application.CutCopyMode = False
End Sub



A+
Maurice
0
MMAGNIN Messages postés 7 Date d'inscription samedi 6 décembre 2014 Statut Membre Dernière intervention 7 décembre 2014
7 déc. 2014 à 12:54
Merci Maurice pour le temps consacré

Oui, j'avoue que je ne maîtrise pas du tout les macros, j'ai jamais fait c'est ma première fois

Merci encore

A+
0
re
et pour copier 40 Ligne sur la feuille2

Sub Test()
Dim DernLigne As Long
Dim L As Long
Dim B As Long
B = 1
Application.ScreenUpdating = False
Feuil2.Cells.ClearContents
DernLigne = Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row
   For L = 1 To DernLigne
      If Range("E" & L).Value > 0 Then
         Range("A" & L & ":E" & L).Copy
            Feuil2.Range("A" & B).PasteSpecial xlPasteValues
         B = B + 1
         If B > 40 Then Exit For
      End If
   Next
Application.ScreenUpdating = True
Application.CutCopyMode = False
End Sub


A+
Bon je vais manger

Maurice
-1