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

Résolu
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. Contributeur
    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. Contributeur
      Re le Forum

      Et tu veux faire quoi avec ton code . . .

      Mytå
      0
  2. Contributeur
    Bonjour à tous,

    Dim a As Integer 

    Tu es limité à 256, met As Long.

    eric
    0
    1. 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. Contributeur
      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
    3. @eriiicMerci pour ta réponse Eric,

      Voici le lien de mon fichier :

      http://www.cjoint.com/data3/3LhawrgLkhK.htm
      0
  3. Contributeur
    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
    1. Salut michel,

      Pour corriger le code je dois faire comment SVP ?

      Je suis un novice

      Merci d'avance de ta réponse.
      0
      1. 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. 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
      2. Re
        il sufit de mettre 40 sur le For

        For L = 1 To 40

        a toi de voir

        A+

        Maurice
        0
        1. 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
          1. 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. 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
          2. 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