Erreur d'execution"6" dépassement de capacité

Quent1

XLDnaute Nouveau
Bonjour à tous

Voila je travail actuellement sur une base de données avec plus de 360000 lignes

Mon problème est le suivant : ayant certaines lignes qui ne comportent pas de donnés dans la colonne A je désire les supprimer

Pour cela j'utilise la macro suivante :

Sub efface_A_vide()
Dim l As Integer
For l = Cells(65256, 1).End(xlUp).Row To 1 Step -1
If Cells(l, 1).Value = "" Then Cells(l, 1).EntireRow.Delete
Next l
End Sub

Elle marchait bien sur d'autre DB plus petites mais la l'erreur suivante apparait maintenant :

Erreur d'execution"6" dépassement de capacité

que puis je faire pour éviter cela ? :confused:

Merci d'avance de votre aide

Cordialement

Quentin
 
Dernière édition:

Quent1

XLDnaute Nouveau
Re : Erreur d'execution"6" dépassement de capacité

Merci de vos réponses rapides cependant un problème persiste
Ce dernier est probablement due à mon inexpérience avec le VB
pour résumé je doit donc remplacer
For l = Cells(65256, 1).End(xlUp).Row To 1 Step -1

par

For l as long.End(xlUp).Row To 1 Step -1

?

Si c'est bien cela j'ai un problème car Excel me parle de problème de compilation...
 

Quent1

XLDnaute Nouveau
Re : Erreur d'execution"6" dépassement de capacité

Merci de cette réponse

La macro est actuellement en cours de teste

Une simple question :

Pour exécuter cette macro sur 300 000 lignes ça prend combien de temps (juste pour avoir un ordre d'idée...)

Avec un ordinateur "classique"

Cordialement

Quentin
 

Misange

XLDnaute Barbatruc
Re : Erreur d'execution"6" dépassement de capacité

Bonjour
entre 1 seconde et 6h...
Ca dépend entièrement de la façon dont la cro est écrite, de ce qu'elle fait, du nombre d'infos par ligne.
Dès qu'on travaille sur un grand nombre de lignes il est VIVEMENT conseillé de travailler en transférant en 1 seule opération le contenu de toutes les lignes dans un array en VBA
de faire le traitement nécessaire en transférant l'array dans un nouvel Array, toujours en VBA
puis de réinjecter le second array dans la feuille en une seule opération et surtout pas en utilisant une boucle.
Testé : ça peut accélérer d'un facteur 10000 les macros
voir ici
Ce lien n'existe plus
et les 7 pages suivantes de ce tutoriel
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Erreur d'execution"6" dépassement de capacité

Bonjour le fil, bonjour le forum,

Peut-être comme ça ça ira plus vite :
Code:
Sub Macro1()
Dim dl As Long 'déclare la variable dl (dernière Ligne)
Dim pl As Range 'déclare la variable pl (PLage)

With Sheets("Feuil1") 'prend en compte l'onglet "Feuil1" (à adapter à ton cas)
    dl = .Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée de la colonne A
    Set pl = .Range("A2:A" & dl) 'définit la plage pl
    .Range("A1").AutoFilter Field:=1, Criteria1:="=" 'filtre les cellule vide en colonne A
    pl.SpecialCells(xlCellTypeVisible).EntireRow.Delete 'supprime les lignes visible de la plage filtrée
    .ShowAllData 'affiche toutes les données
    .Range("A1").AutoFilter 'supprime le filtre automatique
End With 'fin de la prise en compte de l'onglet "Feuil1"
End Sub
 

laetitia90

XLDnaute Barbatruc
Re : Erreur d'execution"6" dépassement de capacité

bonjour tous:)

une autre solution encore

Code:
Range("a1", Cells(Rows.Count, "a").End(xlUp)).SpecialCells(xlCellTypeBlanks).EntireRow.Delete

par contre sur 300000 lignes il faudrait tester
le filtre a l' ami Robert "pas de smiley" surement mieux adapté
 

laetitia90

XLDnaute Barbatruc
Re : Erreur d'execution"6" dépassement de capacité

re ,:)

j'ai teste ma solution sur >300000 lignes pas interessant du tout si beaucoup de lignes:(:(

as tu testé la solution a l'ami Robert????????
"toujours pas de smiley"

un tableau mais risque d'être long si beaucoup de colonnes
Code:
Sub es()
Dim t(), t1(), x As Long, i As Long, y As Long, c As Long, r As Long
 Application.ScreenUpdating = False
 c = Cells.Find("*", , , , xlByColumns, xlPrevious).Column
 r = Cells.Find("*", , , , xlByRows, xlPrevious).Row
 t = Cells(1, 1).Resize(r, c).Value
 ReDim t1(1 To UBound(t), 1 To c)
 For i = 1 To UBound(t)
 If t(i, 1) <> "" Then
 x = x + 1
 For y = 1 To c: t1(x, y) = t(i, y): Next y
 End If
 Next i
 Cells.ClearContents: [A1].Resize(x, c) = t1
 Erase t, t1
End Sub
 

Misange

XLDnaute Barbatruc
Re : Erreur d'execution"6" dépassement de capacité

Le contraire serait surprenant !
300000 lignes c'est une des rares excellentes raisons pour passer à office 2010 en 64 bits.

Plutot que de faire une macro, si c'est juste pour supprimer les lignes dont la colonne A est vide, un simple tri sur la colonne A et ensuite tu sélectionne les lignes et tu délètes...
Les fonctions intégrées d'excel sont BEAUCOUP plus rapides que le VBA...

en complément :
il est impératif dans une macro si tu y tiens d'ajouter ceci en début de module


Application.ScreenUpdating=False
Application.Calculation = xlCalculationManual


et de remettre le code de calcul sur auto en fin de module
Application.Calculation = xlCalculationAutomatic
 
Dernière édition:

MichD

XLDnaute Impliqué
Re : Erreur d'execution"6" dépassement de capacité

Bonjour,

Est-ce que tes cellules en colonne A sont réellement vide ou si le "" émane d'une formule?

Dans le cas où les cellules sont totalement vides, tu peux écrire ta macro comme ceci :


'-------------------------
Sub test1()
On Error Resume Next
Range("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub
'-------------------------

Une autre approche est un filtre automatique sur la colonne A avec un critère
sur les cellules vides. Tu supprimes toutes les lignes qui sont affichées.
Sans macro, tu sélectionnes la plage de cellules affichant le résultat du filtre,
tu appelles la commande "édition / atteindre / cellules / non vides
et tu appuies sur la touche "supprimer"
 

Quent1

XLDnaute Nouveau
Re : Erreur d'execution"6" dépassement de capacité

Finalement j'ai effectué des tris et supprimé manuellement les lignes, c'est pas très académique mais c'est le plus rapide...

Merci de votre aide, je garde précieusement ces réponses pour des databases plus petites

Cordialement

Quentin

:)
 

Discussions similaires

Réponses
3
Affichages
593

Statistiques des forums

Discussions
312 760
Messages
2 091 793
Membres
105 074
dernier inscrit
JPATOUNE