Problème de macro sur la suppression de ligne en fonction de la valeur d'une cellule

tim_so

XLDnaute Nouveau
Bonjour à tous,

Je suis nouvelle sur le forum mais ça fait longtemps que je viens "m'instruire" entre autre sur les macros et les formules.

Après des heures de recherche sur un problème de macro, je me décide à faire appel vous.

Il faut savoir qu'en terme de macro je suis débutante, donc j'utilise l'enregistreur de macro (que j'essaie ensuite d'épurer un peu) ainsi que des morceaux de macros trouvés sur internet.

Je vous joins mon fichier et dans ma macro chaque étape est expliquée. Mon problème est qu'elle bloque toujours au même endroit mais si je mets à part le petit morceau qui bloque, ça fonctionne. C'est à devenir fou !!!

Voilà la partie de la macro qui bloque (j'ai même pas de message d'erreur, j'ai juste mon sablier et plus rien !) :

Code:
    Dim n As Integer
    Application.ScreenUpdating = False
    For n = Range("F5000").End(xlUp).Row To 1 Step -1
    If (Range("F" & n) <> "tarif") Then
    Rows(n).Delete
    End If
    Next n

Ce que je souhaite faire à ce niveau c'est que soit supprimées toutes les lignes qui n'auront pas le mot "tarif" dans la colonne F.

J'espère que vous pourrez m'aider

Merci d'avance

So
 

Pièces jointes

  • Fichier de calcul MO pour excel downloads.xlsm
    199.2 KB · Affichages: 76

Robert

XLDnaute Barbatruc
Repose en paix
Re : Problème de macro sur la suppression de ligne en fonction de la valeur d'une cel

Bonjour Tim_so, Peirrot, bonjour le forum,

Oui tu as mis des parenthèses en trop ! Essaie comme ça :
Code:
Sub Macro1()
Dim n As Integer
Application.ScreenUpdating = False
For n = Range("F5000").End(xlUp).Row To 1 Step -1
    If Range("F" & n) <> "tarif" Then Rows(n).Delete shift:=xlShiftUp
Next n
Application.ScreenUpdating = True
End Sub
 

JNP

XLDnaute Barbatruc
Re : Problème de macro sur la suppression de ligne en fonction de la valeur d'une cel

Bonjour le fil :),
C'est surtout que c'est très, très long, mais ton code fonctionne (le coup des parenthèses, tu me le referas Robert, pourquoi ça génerait quelque chose :rolleyes:...).
Ceci est certainement dù au fait qu'il considère toutes les colonnes utilisées jusqu'à WVS :mad:...
Une solution plus rapide (environ 10 secondes) :p
Code:
Sub Macro2()
Dim n As Integer, Plage As Range
Application.ScreenUpdating = False
For n = 1 To Range("F5000").End(xlUp).Row
    If Range("F" & n) <> "tarif" Then
        If Plage Is Nothing Then
            Set Plage = Rows(n)
        Else
            Set Plage = Union(Rows(n), Plage)
        End If
    End If
Next n
Plage.Delete
Application.ScreenUpdating = True
End Sub
Bonne soirée :cool:
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Problème de macro sur la suppression de ligne en fonction de la valeur d'une cel

Bonjour le fil, bonjour le forum

JNP à dit:
le coup des parenthèses, tu me le referas Robert, pourquoi ça génerait quelque chose :rolleyes:...
Heu... J'sais pas je me suis dit que... Mais si ça sert à rien autant les enlever non ?



JNP à dit:
Ceci est certainement dù au fait qu'il considère toutes les colonnes utilisées jusqu'à WVS :mad:...
Pourquoi ? Puisque on stipule les cellules de la colonne F de la dernière ligne éditée jusqu'à la ligne par pas de -1 ?
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Problème de macro sur la suppression de ligne en fonction de la valeur d'une cel

Bonjour le fil, bonjour le forum,

Je sais pas pourquoi je boucle JM ? Moi qui ne la boucle jamais d'habitude... La preuve...
 

Staple1600

XLDnaute Barbatruc
Re : Problème de macro sur la suppression de ligne en fonction de la valeur d'une cel

Re


Donc avec un filtre (mais sans le café)... et sans boucle.
Code:
Sub Macro1()
Range("F1").AutoFilter Field:=6, Criteria1:="<>tarif*", Operator:=xlAnd
Rows("1:1727").Delete Shift:=xlUp
End Sub
 
Dernière édition:

JNP

XLDnaute Barbatruc
Re : Problème de macro sur la suppression de ligne en fonction de la valeur d'une cel

Re :),
Heu... J'sais pas je me suis dit que... Mais si ça sert à rien autant les enlever non ?
Oui :p ! Mais ça peut servir dans une combinaison de And et Or pour obliger la priorité des opérateurs, et logiquement, c'est pas ça qui va ralentir le schmimblick :rolleyes:...
Pourquoi ? Puisque on stipule les cellules de la colonne F de la dernière ligne éditée jusqu'à la ligne par pas de -1
Ce n'est qu'une hypothèse, mais si dans le fichier tu fait Ctrl+Fin, tu vas en cellule WVS2094, j'ai donc tendance à penser que chaque suppression de ligne recalcule sur cette largeur de colonne (soit 16139 colonnes, quand même :p), ce qui expliquerait le "moulinage" pendant 10 minutes...

Pourquoi vous bouclez les amis ?
Un filtre automatique (en VBA) serait beaucoup plus rapide non ?
Oui et non :p...
Comme je n'utilise jamais les filtres, je n'y ai pas pensé :eek:...
Mais je viens de faire le test entre ton code et le mien, et :)...
Ma boucle est sensiblement plus rapide que le filtre (du simple au double, même en désactivant l'affichage :rolleyes:), alors que j'aurais pensé logiquement que ce serait le contraire :p...
Bonne journée :cool:
 

tim_so

XLDnaute Nouveau
Re : Problème de macro sur la suppression de ligne en fonction de la valeur d'une cel

Bonjour à tous,

Merci beaucoup pour votre aide, j'ai pu tester vos différentes propositions et j'ai appliqué celle de JNP. Effectivement avec ma macro si j'étais patiente devant mon pc elle s'exécutait mais mettait plus de 10 minutes alors que là c'est très rapide.

Merci encore d'avoir répondu si vite et d'avoir pu m'aider.

Bonne après-midi

so
 

Staple1600

XLDnaute Barbatruc
Re : Problème de macro sur la suppression de ligne en fonction de la valeur d'une cel

Bonsoir JNP


Avec cette version "plus aboutie", chez moi la suppression est immédiate

Code:
Sub Macro1()
Application.ScreenUpdating = False
Range("F1").AutoFilter Field:=6, Criteria1:="<>tarif*", Operator:=xlAnd
Range("_FilterDataBase").SpecialCells(12).Delete Shift:=xlUp
Application.ScreenUpdating = True
End Sub

EDITION: je viens de chronométrer le filtre auto est plus rapide mais pas de beaucoup
0,1640625 pour la macro ci-dessus
0,2148438 pour celle de JNP
 
Dernière édition:

Discussions similaires

Réponses
8
Affichages
349

Membres actuellement en ligne

Statistiques des forums

Discussions
314 499
Messages
2 110 248
Membres
110 711
dernier inscrit
chmessi