VBA : sélection de cellules
Salut les chouals
Question rapide sur le vba : j'ai fais une macro, pour dans un tableau à 40.000 lignes et 15 colonnes
Le but c'est de supprimer les lignes qui sont inutiles (donc dont la colonne M et N sont vide)
Actuellement je supprime les lignes au fur et à mesure du programme, mais du coup ça prend énormément de temps puisqu'à chaque suppression t'as 40.000 ligne en dessous qui doivent remonter
Je pourrais partir du bas du tableau pour réduire les délais mais ça serait quand même ultra long surtout vers la fin
Donc est ce que j'ai moyen de sélectionner toutes les lignes vides pour les supprimer en un coup tout à ma fin ?
En gros au fur et à mesure de l'avancement d'une boucle, ajouter des lignes à une sélection pour tout supprimer d'un coup à la fin ?
Désolé si c'est pas super clair, j'écris ça vite fait au boulot sur mon tel
Voilà la macro :
Sub tri()
Dim dern As Long, i As Long
dern = InputBox("entrez le numéro de la dernière ligne du rapport")
For i = 2 To dern Step 1
If Range("M" & i) = 0 And Range("N" & i) = 0 Then
Rows(i & ":" & i).Delete xlUp
i = i - 1
End If
Next i
End Sub
Je voudrais remplacer la suppression par une sélection dont la taille augmente à chaque boucle pour la delete tout d'un coup
Tu peux aussi mettre Application.ScreenUpdating = False au début de la macro pour le remettre à True à la fin.
Cela évite la mise à jour de ton écran
ouais mais je sais pas, ça calcule quand même les modification nan ?
Enfin quoi qu'il en soit ça m'arrange sur tous les points ma méthode, sinon mon compteur devait se desincrelenter dans le if sinon il sautait une ligne sur deux dans les séries de lignes vides
L'avantage du screenupdating est qu'il ne met pas à jour l'écran et se concentre, de fait, exclusivement aux calculs et ne t'affiche les résultats qu'à la fin de l'exécution de la macro. Le 'remontage de ligne' n'existe plus.
Par exemple, suppression d'une ligne sur deux pour 5000 lignes prend 40s à true et seulement 2 secondes à false
Private Sub CommandButton1_Click()
On Error GoTo fin
Dim n As Integer
Dim nb As Integer
Dim A As Variant
Dim cellule As Variant
nb = Val(Suppression_de_lignes.TextBox1.Value)
'Application.ScreenUpdating = False
n = 1
Do
n = n + 1
cellule = "A" & n
A = n & ":" & n + nb - 1
Rows(A).Select
Selection.Delete Shift:=xlUp
Loop Until ActiveSheet.Range(cellule).Value = ""
'Application.ScreenUpdating = True
Suppression_de_lignes.Hide
fin:
End Sub
Il te faut utiliser un tableau de taille variable pour stocker les numéros de ligne dans ta fonction de "scan" et faire une fonction qui parcoureras le tableau et delete les lignes vide.
Tu ne dois accéder à ce site que si tu as au moins 18 ans ou si tu as l'âge légal pour visionner ce type de matériel dans ta juridiction locale, l’âge le plus élevé étant retenu. En outre, tu déclares et garantis que tu ne permettras aucun mineur à d'accéder à ce site ou à ces services.
En accédant à ce site, tu acceptes nos conditions d'utilisation.