Erreur 6 : Dépassement de capacité

Bonjour tout le monde,

Je viens vers vous car j'ai une erreur de capacité 6 sur un gros fichier excel. Alors j'ai fait le tour de la question.

Avec certains fichiers qui peuvent être plus gros cela marche et d'autre pas. (Le fichier 170 000 lignes et 170 colonnes)

Je vois met le début du code pour ceux qui on l'habitude de ce genre de question.

Private Sub Miseàjour_Click()

    Dim ligne As Long
    Dim O As Worksheet
    Dim TV As Variant

    Dim Critere1 As Long
    Dim Critere1bis As Long
    Dim Critere2 As Long
    Dim Critere2bis As Long
    Dim Critere3 As Long
    Dim Critere3bis As Long
    Dim Critere4 As Long
    Dim Critere4bis As Long
    Dim Critere5 As Long
    Dim Critere5bis As Long
    Dim Critere6 As Long
    Dim Critere6bis As Long
    Dim Critere7 As Long
    Dim Critere7bis As Long
    Dim Critere8 As Long
    Dim Critere8bis As Long
    Dim Critere9 As Long
    Dim Critere9bis As Long
    Dim Critere10 As Long
    Dim Critere10bis As Long
    Dim Critere11 As Long
    Dim Critere11bis As Long
    Dim Critere12 As Long
    Dim Critere12bis As Long
    Dim Critere13 As Long
    Dim Critere13bis As Long
    Dim Critere14 As Long
    Dim Critere14bis As Long
    Dim Critere15 As Long
    Dim Critere15bis As Long
    Dim Critere16 As Long
    Dim Critere16bis As Long
    Dim Critere17 As Long
    Dim Critere17bis As Long
    Dim Critere18 As Long
    Dim Critere18bis As Long
    Dim Critere19 As Long
    Dim Critere19bis As Long
    Dim Critere20 As Long
    Dim Critere20bis As Long
    Dim Critere21 As Long
    Dim Critere21bis As Long
    Dim Total As Long

    Set O = Worksheets("Feuil1")
    TV = O.Range("A1").CurrentRegion

    Critere1 = 0
    Critere1bis = 0
    Critere2 = 0
    Critere2bis = 0
    Critere3 = 0
    Critere3bis = 0
    Critere4 = 0
    Critere4bis = 0
    Critere5 = 0
    Critere5bis = 0
    Critere6 = 0
    Critere6bis = 0
    Critere7 = 0
    Critere7bis = 0
    Critere8 = 0
    Critere8bis = 0
    Critere9 = 0
    Critere9bis = 0
    Critere10 = 0
    Critere10bis = 0
    Critere11 = 0
    Critere11bis = 0
    Critere12 = 0
    Critere12bis = 0
    Critere13 = 0
    Critere13bis = 0
    Critere14 = 0
    Critere14bis = 0
    Critere15 = 0
    Critere15bis = 0
    Critere16 = 0
    Critere16bis = 0
    Critere17 = 0
    Critere17bis = 0
    Critere18 = 0
    Critere18bis = 0
    Critere19 = 0
    Critere19bis = 0
    Critere20 = 0
    Critere20bis = 0
    Critere21 = 0
    Critere21bis = 0

        For ligne = 2 To UBound(TV, 1)

            'Critère 1
            If TV(ligne, 122) <> "" Then
            Critere1bis = TV(ligne, 51)
            Critere1 = Critere1 + Critere1bis
            End If

J'utilise aussi un import de fichier peut-être que l'erreur peut venir de là

Private Sub ImportFichier_Click()
Dim I As Integer
 Dim nom As String
 Dim Nomdececlasseur As String
 Dim Nomcopie As String
 Dim chemin As Variant
 Application.DisplayAlerts = False
  chemin = Application.GetOpenFilename("Classeurs Excel (*.xlsx), *.xlsx")
   Workbooks.Open (chemin)
'classeur à copier
Nomcopie = ActiveWorkbook.Name
 'on parcourt toutes les feuilles
 For I = 1 To Worksheets.Count
Workbooks(Nomcopie).Activate 'classeur à copier a adapter le nom
nom = Worksheets(I).Name
Nomdececlasseur = ThisWorkbook.Name
Sheets(nom).Select
 Sheets(nom).Copy After:=Workbooks(Nomdececlasseur).Sheets(1) 'classeur à coller a adapter le nom
Sheets(nom).Move After:=Sheets(Sheets.Count) 'on met les onglets dans l'ordre
Next
Workbooks(Nomdececlasseur).Sheets(1).Activate
Application.DisplayAlerts = True
End Sub

Merci pour votre aide

Bonjour,

quelle est la ligne en erreur ?

Tu aurais eu avantage d'utiliser un tableau plutôt que ta longue litanie de variables critère : Dim critere(1 to 21, 1 to 2)
Et des inutilités :
Pourquoi Nomdececlasseur = ThisWorkbook.Name pour utiliser plus loin Workbooks(Nomdececlasseur) ?
Utilise directement ThisWorkbook partout.
eric

Oui pardon.

La ligne d'erreur est celle-ci

TV = O.Range("A1").CurrentRegion

Pour la réponse du dim, je ne savais pas que l'on pouvait mettre en ligne

Sans classeur j'imagine que O=Nothing.
Ta Worksheets("Feuil1") ne doit pas exister dans le classeur actif.

Pour la réponse du dim, je ne savais pas que l'on pouvait mettre en ligne

il ne s'agit pas de les mettre en ligne, mais d'utiliser une variable tableau.
Ensuite au lieu de :

            Critere1bis = TV(ligne, 51)
            Critere1 = Critere1 + Critere1bis

tu utilises les indices du tableau :

            Critere(1,2) = TV(ligne, 51)
            Critere(1,1) = Critere(1,1) + Critere(1,2)

eric

L'ordinateur urilisé est en x32 ou x64 ? Attention au dépassement de capacité, que ce soit dans le nb de ligne de code, le nb de variable déclaré, le nb de ligne/colonne/cellule etc

Tout est dimensionné sur une base 32 ou 64 Bits, ce qui bien entendu offre plus de liberté en 64, mais à quand même des limites.

Ps: Pour moi le PB de vient pas de l'import

Après ce que je sais, c'est quand je réduit la taille du fichier (que j'enlève des lignes cela va remarcher parfaitement). Donc pour moi ce n'est pas un problème de reconnaissance de la feuille.
Mais vraiment un problème de format sur un critère et je ne vois pas d'où cela peut venir

Je peux t'envoyer le fichier avec juste la macro.

Mais bon c'est vraiment un labyrinthe, j'ai fait avec ce que je connaissais. Après on m'a déjà dit de faire avec des variables tableau, mais le mal était déjà fait j'avais déjà fait une bonne partie de la macro.

Si tu regardes le fichier. La macro ce trouve dans le userform1.

Salut Evan et merci pour l'aide,

Mon ordinateur est en 64 bits. Après je pense comme toi mais je sais pas si je peux remplacer une variable qui est trop courte comme un As integer par un As Long.

Ou si j'ai vraiment attend la limite.

Sur la ligne annoncée en erreur il n'est pas du tout question de nombre de lignes : TV = O.Range("A1").CurrentRegion
Ou alors c'est une autre ligne en erreur...

Remplace ta ligne par :

    If O Is Nothing Then
        MsgBox "Pas de Feuil1, abandon": Exit Sub
    Else
        TV = O.Range("A1").CurrentRegion
    End If

Et que ce soit en 32 ou 64 bits, la taille maxi des types de variable ne change pas.
eric

La ligne d'erreur est toujours la même malgré la condition.

 TV = O.Range("A1").CurrentRegion

Quel est le fichier actif au moment de l'erreur ?

Dans le doute, type plus précisément TV : Dim TV as Range

Edit : met cette ligne avant celle en erreur msgbox O.Range("A1").CurrentRegion.address
Qu'est-ce qui s'affiche ?

Pour Dim TV as Range cela ne marche j'ai une erreur de compilation après avec la ligne For ligne = 2 To UBound(TV, 1)

Je ne sais pas comment on voit le fichier actif au moment de l'erreur ?
En tous cas si cela peut répondre à ta question toute l'action se passe dans l'onglet "Suivi OPTIMUM"

Non mais il faut savoir.

TV ne peut pas être à la fois un Range et une variable tableau.
D'ailleurs je viens de voir que tu n'avais pas mis Set TV =
Si tu veux un tableau des valeurs alors c'est : TV = O.Range("A1").CurrentRegion.Value

Suite au rajout de msgbox O.Range("A1").CurrentRegion.address

Cela m'affiche cela $A$1:$FP$177939

J'ai vérifier cela correspond bien à ma plage de valeur

Je viens d'essayer avec Set TV = O.Range("A1").CurrentRegion.Value (avec ou sans set)

Et de changer le Dim en range ou variant et c'est toujours le même problème

Mais non, Set c'était si tu voulais le Range, ce qui correspondait à la ligne que tu avais mise. Toi tu veux les valeurs dans un tableau.
Il ne faut pas laisser VBA choisir à ta place la propriété voulue, toujours l'indiquer explicitement, même si des fois il y arrive sans.
Met ce que je t'ai indiqué : TV = O.Range("A1").CurrentRegion.Value

Déjà essayer cela ne change rien

Si tu veux un tableau de valeurs il faut laisser TV en Variant.
Si tu as toujours le même message d'erreur au même endroit, je ne me l'explique pas.
Peut-être un pb de taille mémoire.
Combien as-tu de RAM et peux-tu essayer sur un PC mieux fourni ?
eric

J'ai 8G de RAM en DR3, j'essaierai ce soir avec mon PC et je ferai un retour.

Merci quand même pour l'aide et le temps passé.

8 Go ça permet de voir venir normalement.
Tu pourrais essayer en rebootant pour faire le ménage et en ne lançant rien d'autre que excel...

Non mais je pense que c'est la fichier.

Si je peux toute les lignes et colonnes.

J'ai 30 605 508 cellules non vides avec une somme de 1,52569E+11

Rechercher des sujets similaires à "erreur depassement capacite"