Suppression de ligne suivant condition

Bonjour à tous,

Il y a bon nombre de sujet sur la suppression de ligne suivant des conditions.

Je les ai lu, et appliqué. Et cela fonctionne ... sur un fichier test.

Cependant, lorsque je veux le faire sur mon "vrai" fichier, la boucle de suppression de ligne a l'air de ne pas fonctionner, et reste bloquée.

Je pense que le mieux serait de vous faire partager mes fichiers, que vous fassiez le test, et pourquoi pas reperer où serait mon erreur ?

33test-jeremy.xlsm (109.44 Ko)
33test-jeremy.xlsm (109.44 Ko)

Explication de la macro :

  • importe un fichier .txt dans la feuille "données", sans écraser les précedentes importations.
  • supprime les entêtes du fichier .txt
ET LE PROBLEME :

- supprime toutes les équipes <> de l'équipe 390 ou 391.

N'hésitez pas à me poser toutes vos questions, je serai disponible pour y répondre !


Je n'arrive pas à insérer le fichier txt :s

Il s'agit de la macro 3 (la plus longue) ...

Désolé de vous balancer ça comme ça :/

Bonsoir,

Tu aurais pu préciser le nom de la macro qui t'intéresse...

Bon de toute façon en l'absence de fichier .txt à importer on va pas pouvoir faire grand chose.

la première chose qui me vient c'est :

Worksheets("Données").Cells(fin, 1).Delete

ou :

Worksheets("Données").Cells(fin, 8).Delete

... selon le cas !

En précisant bien le Worksheets("Données").

A+

Salut galopin !

Merci pour ta réponse,

Je te joint le fichier, avec les données txt importées (il n'y avait pas de probleme de toute façon pour l'importation).

J'ai suivi ton conseil et ajouté "Worksheets("Données")." quand je site des cellules. Malheureusement ce n'était pas (que) ça le soucis !

Si tu as 5 minutes pour lire mon code et peut être voir ce qui cloche, ça serait génial

Merci par avance !

(ci-joint le fichier)

Sinon le code :

Sub suppressionequipe()

Application.ScreenUpdating = False

fin = Worksheets("Données").Range("A1000000").End(xlUp).Row

'supression de l'entête du fichier .txt (qui en plus, est faux)
For ligne = fin To 2 Step -1
    If Worksheets("Données").Cells(ligne, 1).Value = "OF" Then
        Worksheets("Données").Cells(ligne, 1).EntireRow.Delete
    End If
Next ligne

'suppression des équipes qui ne nous concernent pas
ligne = 2

For ligne = fin To 2 Step -1
    If Worksheets("Données").Cells(ligne, 8).Value <> "390" Then
    If Worksheets("Données").Cells(ligne, 8).Value <> "391" Then
        Worksheets("Données").Cells(ligne, 8).EntireRow.Delete
    End If
    End If
Next ligne

Application.ScreenUpdating = True

End Sub
35test-jeremy.xlsm (190.30 Ko)

Bonjour,

Bon... j'ai essayé de travailler un peu ton code , mais le problème est qu'il doit lui falloir au moins 10 minutes pour s'exécuter. Je l'ai donc un petit peu repensé.

C'est quand même un peu plus performant !

Sub suppressionequipe()
Dim a(), b(), i&, ii&, k&, fin&
Application.ScreenUpdating = False
With Worksheets("Données")
   fin = .Range("A" & .Rows.Count).End(xlUp).Row
   'chargement de la base de donnée dans un tableau virtuel
   a = .Range("A2:J" & fin).Value
   'Effacement de la BD
   .Range("A2:J" & fin).Clear
   'Préparation d'un tableau vide
   b = .Range("A2:J" & fin).Value
   ii = 1
   For i = 1 To fin - 1
      'recopie des éléments du tableau a vers le tableau b si 390 ou 391
      If a(i, 8) = 390 Or a(i, 8) = 391 Then
         For k = 1 To 10
            b(ii, k) = a(i, k)
         Next
         ii = ii + 1
      End If
   Next
   'Tranfert du tableau b vers la bd
   .Range("A2:J" & fin) = b
End With
End Sub

A+

Bonjour,

Je suis tombé dessus au passage, et j'ai cru qu'il fallait supprimer ce qui n'était ni 390 ni 391 ?

Proposition pour supprimer si c'est cela en question :

Sub suppressionequipe()
    Dim fin&, ligne&
    With Worksheets("Données")
        Application.ScreenUpdating = False
        fin = .Range("A1000000").End(xlUp).Row
        .Range("A1:J1").AutoFilter 8, "<>390", xlAnd, "<>391"
        .Range("A2:J" & fin).SpecialCells(xlCellTypeVisible).EntireRow.Delete
        .Range("A1:J1").AutoFilter
        Application.ScreenUpdating = True
    End With
End Sub

Cordialement.

Salut Ferrand,

OUi,oui tu as bien cru... J'en ai déduit qu'il suffisait de garder les 390 et 391...

Timing pour la solution avec Array : 0.484375

Timing pour Auto Filter : 0.5429688

And the winner is ...

Hi, hi!!!

A+

Merci pour vos réponses !

Le problème est résolu

De mon côté j'avais réussi à trouver le résultat (mais c'est beaucoup plus long), en modifiant de la sorte :

For ligne = fin To 2 Step -1
    If Worksheets("Données").Cells(ligne, 8).Value = "390" Or Worksheets("Données").Cells(ligne, 8).Value = "391" Then
    Else
        Worksheets("Données").Rows(ligne).EntireRow.Delete
    End If

Par contre j'ai un autre soucis, les formules ne se mettent plus à jour, tout reste à 0 alors qu'il n'y a pas raison d'être :s

Le calcul du classeur est bien en automatique ...


Ok ok j'ai rien dit on oublie tout

Tout marche parfaitement, vraiment merci pour vos solutions, vraiment efficaces !

(Je vais poster un autre sujet, pour faire apparaitre dans le "tableau de bord" tous les opérateurs qui apparaissent, de façon automatique (pour ne pas passer à côté de certains)).

Encore merci à vous

C'est une excellente raison pour adopter ma méthode !

Hi,hi !!!

Nan je rigole. De ce point de vue toutes les méthodes se valent : il n'y à pas de raison que le recalcul ne se fasse pas.

A+

Salut Galopin ! Ça va le décalage n'est pas excessif...

Mais là ça confirme vraiment ce que j'ai déjà constaté à maintes reprises, c'est que VBA est plus rapide "hors" interaction avec Excel, même avec des incrémentations nombreuses.

J'aurais cru qu'avec le filtrage et la suppression en bloc on irait plus vite, mais ce n'est finalement pas le cas !

Oui, oui... C'est bien pour ça que je suis devenu un inconditionnel des Array :

Array + Dico c'est too much !

A+

Bonjour,

J'ai un fichier excel contenant des données et je cherche à supprimer des lignes spécifiques : en fait je dois diminuer les points de mesures : effacer 2 points sur 10 : le 5 éme et le 10 ème .... ainsi de suite jusqu'à la fin du fichier. Merci pour votre aide !

Bonsoir,

1) Créer ton sujet !

2) Ne pas omettre de joindre un fichier !

17ecorrhz-saine.zip (13.88 Ko)

Je veux supprimer les lignes 5,10,15,20........ainsi de suite jusqu'à la fin des données. Merci !

Rechercher des sujets similaires à "suppression ligne suivant condition"