Acceleration d'un code VBA

Hello cher Forum,

pensez vous qu'il serait possible d'accélérer ce code VBA qui sert a supprimer des lignes d'une database si l'occurence remonte en colonne B ?

Ce code est generalement utilisé sur une DB qui fait 20K lignes,

EDIT : le code tourney dans un module en applicationscreen sur FALSE

   Sub SUPPRIMER()

Dim i As Long

ActiveWorkbook.Sheets("DATA").Select

    For i = [B65536].End(xlUp).Row To 1 Step -1
        If Cells(i, 2) Like "Canada DF" Or Cells(i, 2) Like "Canada ML" Or Cells(i, 2) Like "USA ML (BPI)" Or Cells(i, 2) Like "Mag Canada" Then
            Rows(i).EntireRow.Delete
        End If
    Next

End Sub

Merci beaucoup pour votre aide

Antoine

bonjour

moi j'utilise ce code la pour accélérer je suis pas si ça peux t'aider

Application.ScreenUpdating = False

Bonjour,

Si tu peux trier la plage sur la colonne B, tu pourrais supprimer les lignes par paquets de lignes.

Hello Merci beaucoup pour vos retours guys !

@Jonat J'ai deja mis ce code et j'ai fait un edit sur mon post pour le signifier

@I20100 Les lignes concernées sont deja regroupé en paquet dans la DB, donc le tri n'y changera rien

Ca serait plutot de trouver un autre bout de code peut etre plus malin pour parvenir au meme résultat ?

Merci en tout cas pour vos aides precieuses,

Antoine

re,

à tester,

Sub SUPPRIMER()
Dim i As Integer, rw1 As Long, rw2 As Long, m As String, v

v = Array("Canada DF", "Canada ML", "USA ML (BPI)", "Mag Canada")

ActiveWorkbook.Sheets("DATA").Select

For i = LBound(v) To UBound(v)
m = v(i)
rw1 = Application.Match(m, Range("B:B"), 0)
rw2 = Application.Match(m, Range("B:B"))
Rows(rw1 & ":" & rw2).EntireRow.Delete
Next i

End Sub

bonjour à tous

selon les principes de gestion de données, je propose de ne rien effacer !

un simple TCD servant de filtre (c'est trèèèèèèès efficace et hyper-rapide) suffit

joins un petit fichier avec le résultat attendu

note: on peut aussi utiliser Power Query , 1 000 000 fois plus puissant, pour "nettoyer" des données, mais ce ne sera pas nécessaire ici.

note 2 : si tes données viennent d'un autre fichier ou logiciel, alors PQuery fera le job. Bien mieux et plus vite.

note 3 : il FAUT apprendre un minimum de PQuery

à te relire

amitiés

Hello I20100,

Merci beaucoup pour ton code,

Je l'ai testé et malheureusement j'ai une erreur Run time error 13 type mismatch sur

rw1 = Application.Match(m, Range("B:B"), 0)

Mille mercis pour ton aide,

Antoine

et bien sûr sans VBA

Bonjour Antoine, bonjour à tous,

j'ai ajouté une condition pour vérifier que le mot cherché est présent ou non.

Sub SUPPRIMER()
Dim i As Integer, rw1 As Long, rw2 As Long, m As String, v

v = Array("Canada DF", "Canada ML", "USA ML (BPI)", "Mag Canada")

ActiveWorkbook.Sheets("DATA").Select

For i = LBound(v) To UBound(v)
    m = v(i)
    If Not IsError(Application.Match(m, Range("B:B"), 0)) Then
        rw1 = Application.Match(m, Range("B:B"), 0)
        rw2 = Application.Match(m, Range("B:B"))
        Rows(rw1 & ":" & rw2).EntireRow.Delete
    End If
Next i

End Sub

Merci pour ton code I20100

l'erreur n'est plus et le traitement est vachement plus rapide,

Par contre le traitement supprime des lignes supplementaire ne remplissant pas les conditions...

Je te joins un fichier,

Tu verras qu'apres le traitement les lignes avec AMcent ML disparraissent par exemple,

Mille mercis encore pour ton aide precieuse !

bonjour à tous

selon les principes de gestion de données, je propose de ne rien effacer !

un simple TCD servant de filtre (c'est trèèèèèèès efficace et hyper-rapide) suffit

joins un petit fichier avec le résultat attendu

note: on peut aussi utiliser Power Query , 1 000 000 fois plus puissant, pour "nettoyer" des données, mais ce ne sera pas nécessaire ici.

note 2 : si tes données viennent d'un autre fichier ou logiciel, alors PQuery fera le job. Bien mieux et plus vite.

note 3 : il FAUT apprendre un minimum de PQuery

à te relire

amitiés

Hello JMD merci pour ton message,

cette DB fini bien entendu en TCD,

Le souci est que cette DB est un export depuis une application WEB,

Il sert au suivi du CA facture et le probleme c'est que ce fichier va ensuite etre partagé avec d'autres collaborateurs beaucoup moins experimenté sur excel, et il serait trop "dangeureux" de fonctionner avec un filtre qui risquerait trop rapidemment d'etre defait.

Je vais regarder quand meme vers power querry que je ne connais que tres peu

Merci pour ton aide

Antoine

re,

ça fonctionne bien lorsque les données sont trier,

à tester,

Hello I20100

Merci beaucoup pour ton code,

J'ai l'impression que cela fonctionne bien

Je l'ai adapté pour fitter sur ma DB

Est ce que tu pourrais me confirmer que ma selection de ma plage de tri permettra bien d'integrer des col supplementaires avec cette méthode ? (tant que la cellule n'est pas vide)

Sub SUPPRIMER()
Dim i As Integer, rw1 As Long, rw2 As Long, m As String, v

Sheets("DATA").Select

Range("A7:" & Cells.SpecialCells(xlCellTypeLastCell).Address).Sort key1:=Range("B7"), order1:=xlAscending

v = Array("Canada DF", "Canada ML", "USA ML (BPI)", "MagH Canada")

For i = LBound(v) To UBound(v)
    m = v(i)
    If Not IsError(Application.Match(m, Range("B:B"), 0)) Then
        rw1 = Application.Match(m, Range("B:B"), 0)
        rw2 = Application.Match(m, Range("B:B"))
        Rows(rw1 & ":" & rw2).EntireRow.Delete
    End If
Next i

End Sub

Merci beaucoup en tout cas!

Tres bonne journée

re,

Est ce que tu pourrais me confirmer que ma selection de ma plage de tri permettra bien d'integrer des col supplementaires avec cette méthode ? (tant que la cellule n'est pas vide)

oui, pour vérifier en mode pas à pas tu peux l'écrire comme ça,

plg = "A7:" & Cells.SpecialCells(xlCellTypeLastCell).Address
Range(plg).Sort key1:=Range("B2"), order1:=xlAscending

re

lecture de données du web : il faut Power Query

https://www.google.com/search?q=power+query+internet&client=firefox-b-d&source=lnms&tbm=vid&sa=X&ved=0ahUKEwiO0qPc243hAhVSA2MBHUySCb0Q_AUIDigB&biw=1857&bih=1006

lecture et nettoyage (dont effacement des données non nécessaires)

ensuite, tu analyse tes données dans Excel, ou mieux encore dans Power BI Desktop gratuit

note : un filtre dans Excel est à la portée d'un débutant. D'ailleurs quand on enseigne Excel, il faut débuter par les fonctionnalités de gestion de données* avant d'apprendre les additions

*Tableaux, tris filtres, TCD, GCD et tout de suite après Power Query.

amitiés

Rechercher des sujets similaires à "acceleration code vba"