VBA - gestion de beaucoup de données
Fermé
LoicL89
Messages postés
15
Date d'inscription
jeudi 14 mai 2015
Statut
Membre
Dernière intervention
16 mai 2015
-
14 mai 2015 à 22:22
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 15 mai 2015 à 11:24
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 15 mai 2015 à 11:24
A voir également:
- VBA - gestion de beaucoup de données
- Reinstaller windows sans perte de données - Guide
- Effacer les données de navigation - Guide
- La zone de données passée à un appel système est insuffisante - Windows 11
- Comment sauvegarder toutes les données de mon téléphone - Guide
- Liste de données excel - Guide
4 réponses
Utilisateur anonyme
14 mai 2015 à 22:38
14 mai 2015 à 22:38
Bonjour,
Tu peux essayer avant ta boucle :
Et ensuite tu remets
Ca pourrait améliorer la vitesse.
Pour ne pas avoir cette sensation de plantage, juste avant ton Next i tu mets :
Tu peux essayer avant ta boucle :
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Et ensuite tu remets
Application.Calculation = varCalcMode
Application.ScreenUpdating = True
Ca pourrait améliorer la vitesse.
Pour ne pas avoir cette sensation de plantage, juste avant ton Next i tu mets :
DoEvents
LoicL89
Messages postés
15
Date d'inscription
jeudi 14 mai 2015
Statut
Membre
Dernière intervention
16 mai 2015
Modifié par LoicL89 le 14/05/2015 à 22:45
Modifié par LoicL89 le 14/05/2015 à 22:45
Merci pour ta réponse ! Je viens d'essayer et il me met variable non définie pour " varCalcMode"... Je suis débutant et ne comprends pas trop pourquoi il me dit ça, ce n'est pas une variable...
Sub suppression_points_sol()
Dim i As Double
With ThisWorkbook.Sheets("Feuil1")
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
For i = .Range("D" & .Rows.Count).End(xlUp).Row To 2 Step -1
If .Range("D" & i).Value = "2" Then
.Rows(i).Delete
End If
DoEvents
Next i
Application.Calculation = varCalcMode
Application.ScreenUpdating = True
End With
End Sub
LoicL89
Messages postés
15
Date d'inscription
jeudi 14 mai 2015
Statut
Membre
Dernière intervention
16 mai 2015
14 mai 2015 à 22:49
14 mai 2015 à 22:49
Je viens de le lancer, c'est en cours, ça a l'air long toujours...
Screenupdating sert à faire quoi exactement?
Screenupdating sert à faire quoi exactement?
LoicL89
Messages postés
15
Date d'inscription
jeudi 14 mai 2015
Statut
Membre
Dernière intervention
16 mai 2015
14 mai 2015 à 22:55
14 mai 2015 à 22:55
Ok ! Sinon ça charge toujours...
eriiic
Messages postés
24600
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
21 octobre 2024
7 239
15 mai 2015 à 00:58
15 mai 2015 à 00:58
Bonjour,
Le plus rapide sur excel c'est de filtrer ta colonne et de supprimer les lignes (manuellement ou par macro)
eric
Le plus rapide sur excel c'est de filtrer ta colonne et de supprimer les lignes (manuellement ou par macro)
eric
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
Modifié par michel_m le 15/05/2015 à 11:27
Modifié par michel_m le 15/05/2015 à 11:27
Bonjour
essai sur 1048576 lignes (toute la colonne)
suppression des lignes avec 2 et non "2" en environ 11 à 12 sec avec un tableau de 8 colonnes commencant colonne A
https://www.cjoint.com/?3EplI7XhmKt
mais on peut peut-^tre aller plus vite en utilisant la technologie ADO pour cela il faudrait mettre en pièce jointe la feuille avec 200 ou 300 lignes et préciser la version Excel...
en attendant,ci dessous le code actuel
Michel
essai sur 1048576 lignes (toute la colonne)
suppression des lignes avec 2 et non "2" en environ 11 à 12 sec avec un tableau de 8 colonnes commencant colonne A
https://www.cjoint.com/?3EplI7XhmKt
mais on peut peut-^tre aller plus vite en utilisant la technologie ADO pour cela il faudrait mettre en pièce jointe la feuille avec 200 ou 300 lignes et préciser la version Excel...
en attendant,ci dessous le code actuel
Option Explicit
Option Base 1
'-------------------------------------------------------------------------
Sub supprimer()
Dim Nbre As Long, Derlig As Long, Dercol As Integer, T_in, T_out
Dim Cptr As Long, idx As Long, Col As Integer
Dim Start As Single
'--- initialisations
Application.ScreenUpdating = False
Start = Timer
'Nbre = Application.CountIf(Columns("D"), 2
With Sheets(1)
Dercol = .Rows(1).Find(what:="*", searchdirection:=xlPrevious).Column
Derlig = .Columns("D").Find(what:="*", searchdirection:=xlPrevious).Row
'mémorisation feuille Excel en RAM
T_in = .Range(.Cells(1, "A"), .Cells(Derlig, Dercol))
ReDim T_out(1 To Derlig, 1 To Dercol)
End With
'--- construction du tableau de sortie si colonne D =2
For Cptr = 1 To UBound(T_in)
If T_in(Cptr, 4) <> 2 Then
idx = idx + 1
For Col = 1 To Dercol
T_out(idx, Col) = T_in(Cptr, Col)
Next
End If
Next
'restitution en feuille2 pour essai
With Sheets(2)
.Range("A1").Resize(UBound(T_out), Dercol) = T_out
.Activate
End With
Application.ScreenUpdating = True
MsgBox "durée: " & Timer - Start & " sec."
End Sub
Michel