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

Résolu
MMAGNIN Messages postés 8 Statut Membre -  
 Maurice -
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,

9 réponses

  1. Mytå Messages postés 4246 Date d'inscription   Statut Contributeur Dernière intervention   958
     
    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
    1. Mytå Messages postés 4246 Date d'inscription   Statut Contributeur Dernière intervention   958
       
      Re le Forum

      Et tu veux faire quoi avec ton code . . .

      Mytå
      0
  2. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonjour à tous,

    Dim a As Integer 

    Tu es limité à 256, met As Long.

    eric
    0
    1. MMAGNIN Messages postés 8 Statut Membre
       
      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
    2. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      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
      1. MMAGNIN Messages postés 8 Statut Membre > eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Merci pour ta réponse Eric,

        Voici le lien de mon fichier :

        http://www.cjoint.com/data3/3LhawrgLkhK.htm
        0
  3. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
  4. MMAGNIN Messages postés 8 Statut Membre
     
    Salut michel,

    Pour corriger le code je dois faire comment SVP ?

    Je suis un novice

    Merci d'avance de ta réponse.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Maurice
     
    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
    1. MMAGNIN Messages postés 8 Statut Membre
       
      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
  7. Maurice
     
    Re
    il sufit de mettre 40 sur le For

    For L = 1 To 40

    a toi de voir

    A+

    Maurice
    0
  8. MMAGNIN Messages postés 8 Statut Membre
     
    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
  9. Maurice
     
    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
    1. MMAGNIN Messages postés 8 Statut Membre
       
      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
  10. Maurice
     
    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