Macro ne fonctionne plus subitement

bonjour,

j'utilise une macro depuis queques jours sans aucun soucis et subitement hier plus rien ne se passe lorsque je la lance et je n'ai aucun message d'erreur, une idee?

phil

Bonjour philiric

Peut-on avoir le code utilisé ou mieux le fichier anonymisé

A+

Voici le code mais il semble que ca vienne d'ailleurs car je l'utilise depuis une dizaine de jours sans problemes...

le fichier comporte 114000 ligne et actuelement je travaille sur les lignes apres 4000 les lignes precedentes ont etes "nettoyes" je change dans l e code seulement les references des lignes que je veut supprimer ex:("DRA13771")

Sub CLEARUNVANTEDLIGNS()
Dim I As Integer
For I = [D65000].End(xlUp).Row To 1 Step -1
If Not Cells(I, 4).Find("DRA13771") Is Nothing Then Rows(I).Delete
If Not Cells(I, 4).Find("DRA14159") Is Nothing Then Rows(I).Delete
If Not Cells(I, 4).Find("DRA16367") Is Nothing Then Rows(I).Delete
If Not Cells(I, 4).Find("DRA16368") Is Nothing Then Rows(I).Delete
If Not Cells(I, 4).Find("DRA16807") Is Nothing Then Rows(I).Delete
If Not Cells(I, 4).Find("DRA18549") Is Nothing Then Rows(I).Delete
If Not Cells(I, 4).Find("DRA18561") Is Nothing Then Rows(I).Delete
If Not Cells(I, 4).Find("DRA19345") Is Nothing Then Rows(I).Delete
If Not Cells(I, 4).Find("DRA19735") Is Nothing Then Rows(I).Delete
If Not Cells(I, 4).Find("DRA22213") Is Nothing Then Rows(I).Delete
If Not Cells(I, 4).Find("DRA22322") Is Nothing Then Rows(I).Delete
Next I
End Sub

phil

Bonjour Phil

Pour commencer, la définition "Integer" d'une variable pour les linges, n'est pas correcte

https://www.excel-pratique.com/fr/vba/variables

Essayez ce code en changeant le nom de la feuille

Sub CLEARUNVANTEDLIGNS()
  ' Integer : valeurs de -32768 à 32768
  Dim Lig As Long
  ' Avec l'objet conteneur
  With Sheets("NomDeLaFeuille")
    ' Pour chaque ligne en partant de la fin
    For Lig = .Range("D" & Rows.Count).End(xlUp).Row To 1 Step -1
    ' Si la cellule ne contient pas une des valeurs
    If InStr(1, "DRA13771,DRA14159,DRA16367,DRA16368,DRA16807," _
      & "DRA18549,DRA18561,DRA19345,DRA19735,DRA22213,DRA22322", .Range("D" & Lig)) = 0 Then Rows(Lig).Delete
    Next Lig
  End With
End Sub

A+

la macro s'effectue mais ca travaille depuis plus d'une 1/2 heure alors qu'avec l'ancien code pour un nombre equivalent de reference ca ne prenait que quelques minutes, donc en fait je ne sait pas si ca efface des lignes ou si ca tourne en boucle sans rien faire, je doit partir je vais le laisser tourner et je verrais ce soir ce qu'il en est..

bonjour

donc resultat ca a tourne en boucle jusqu'a 23h et aucune ligne ont etes supprimes

phil

Bonjour Phil

Je suis vraiment désolé

Nous sommes bien d'accord, si la cellule dans la colonne "D" de la ligne x ne contient pas
"DRA13771,DRA14159,DRA16367,DRA16368,DRA16807,DRA18549,DRA18561,DRA19345,DRA19735,DRA22213,DRA22322"

La ligne est supprimée ?

Je ne comprends pas que le code est duré tout ce temps vous avez combien de lignes remplies ?

A+

non il faut que si il rencontre une des references dans la colonne D il supprime toutes les lignes ayant la meme reference et il y a environ 115000 lignes dans la feuille

cordialement

phil

Re,

Oups je l'ai compris à l'envers

Donc il faut changer le "= 0" par "> 0", mais avec 115.000 lignes cela ne doit mettre que quelques minutes et encore tout dépend du PC

Sub CLEARUNVANTEDLIGNS()
  ' Integer : valeurs de -32768 à 32768
  Dim Lig As Long
  ' Avec l'objet conteneur
  With Sheets("NomDeLaFeuille")
    ' Pour chaque ligne en partant de la fin
    For Lig = .Range("D" & Rows.Count).End(xlUp).Row To 1 Step -1
    ' Si la cellule ne contient pas une des valeurs
    If InStr(1, "DRA13771,DRA14159,DRA16367,DRA16368,DRA16807," _
      & "DRA18549,DRA18561,DRA19345,DRA19735,DRA22213,DRA22322", .Range("D" & Lig)) > 0 Then Rows(Lig).Delete
    Next Lig
  End With
End Sub

Mais il y a plus rapide je pense , en supprimant les lignes filtrées

Sub CLEARUNVANTEDLIGNS()
  ' Integer : valeurs de -32768 à 32768
  Dim dLig As Long
  Dim TabRef() As String
  ' Définir le tableau des références à supprimer
  TabRef = Split("DRA13771,DRA14159,DRA16367,DRA16368,DRA16807," _
      & "DRA18549,DRA18561,DRA19345,DRA19735,DRA22213,DRA22322", ",")
  ' Avec l'objet conteneur
  With Sheets("NomDeLaFeuille")
    dLig = .Range("D" & Rows.Count).End(xlUp).Row
    ' Plage à définir
    .Range("$A$1:$Z$" & dLig).AutoFilter Field:=4, _
      Criteria1:=Array(TabRef), Operator:=xlFilterValues
    .Rows("2:" & dLig).Delete Shift:=xlUp
    .Range("$A$1:$Z$" & dLig).AutoFilter
  End With
End Sub

A+

ca fait pareil avec la 1re methode

en bas de l'ecran j'ai accessibilite consultez nos recommendations, je sais pas ce que ca veut dire?...

avec la 2eme methode j'ai une erreur 1004

img 20230208 124507

quelqu'un a une idee car je suis toujours bloque....

Phil

Comme un exemple vaut mieux que 1000 discours

A+

Bonjour a vous,

Petite info, j'evite toujours de passé au dessus des 65000 lignes mais j'ai trouvé une petite boulette:

@BrunoM45, je pense qu'une coquille s'est glissée dans ton message

Oups je l'ai compris à l'envers ...

For Lig = .Range("D" & Rows.Count).End(xlUp).Row To 1 Step -1

xlUp devrait etre xldown d'apres mes tests sur "seulement" 65 000 lignes mais ça fonctionne

@Philric, essai avec cette correction :

Sub CLEARUNVANTEDLIGNS()
  ' Integer : valeurs de -32768 à 32768
  Dim Lig As Long
  ' Avec l'objet conteneur
  With Sheets(1)
    ' Pour chaque ligne en partant de la fin
    For Lig = .Range("D" & Rows.Count).End(xlDown).Row To 1 Step -1
    ' Si la cellule ne contient pas une des valeurs
    If InStr(1, "DRA13771,DRA14159,DRA16367,DRA16368,DRA16807," _
      & "DRA18549,DRA18561,DRA19345,DRA19735,DRA22213,DRA22322", .Range("D" & Lig)) > 0 Then Rows(Lig).Delete
    Next Lig
  End With
End Sub

Mon fichier de test (environ 1 minute pour suprimer les DRA... en 65000 lignes)

A+

alors en fait j'ai deinstalle office et reinstalle, depuis le code de Bruno ci dessous fonctionne :

Sub CLEARUNVANTEDLIGNS()
' Integer : valeurs de -32768 à 32768
Dim Lig As Long
' Avec l'objet conteneur
With Sheets("all items milner 20221230")
' Pour chaque ligne en partant de la fin
For Lig = .Range("D" & Rows.Count).End(xlUp).Row To 1 Step -1
' Si la cellule ne contient pas une des valeurs
If InStr(1, "DRA22489" _
& "DRA22492", .Range("D" & Lig)) > 0 Then Rows(Lig).Delete
Next Lig
End With
End Sub

c'est assez lent 14 minutes pour 2 references mais bon si il y a pas mieux je laissserais travaille la nuit...

Salut Phil

Pour commencer, je suis rassuré

Ensuite, il peut y avoir plus rapide avec le 2ème code donné

Sub CLEARUNVANTEDLIGNS()
  ' Integer : valeurs de -32768 à 32768
  Dim dLig As Long
  Dim TabRef() As String
  ' Définir le tableau des références à supprimer
  TabRef = Split("DRA13771,DRA14159,DRA16367,DRA16368,DRA16807," _
      & "DRA18549,DRA18561,DRA19345,DRA19735,DRA22213,DRA22322", ",")
  ' Avec l'objet conteneur
  With Sheets("NomDeLaFeuille")
    dLig = .Range("D" & Rows.Count).End(xlUp).Row
    ' Plage à définir
    .Range("$A$1:$Z$" & dLig).AutoFilter Field:=4, _
      Criteria1:=Array(TabRef), Operator:=xlFilterValues
    .Rows("2:" & dLig).Delete Shift:=xlUp
    .Range("$A$1:$Z$" & dLig).AutoFilter
  End With
End Sub

On filtre les lignes selon un tableau des valeurs prédéfinies et on supprime toutes les lignes affichées

A+

malheureusement avec ce code j'ai encore l'erreur 1004

phil

Re,

Le nom de la feuille que j'ai donné a bien été remplacé par le tiens "all items milner 20221230"

Car il n'y a pas de raison

bonjour

oui tout a fait mais c'et pas grave j'ai laisse tourne toute la nuit avec environ 36 references, ce matin c'etait fini et il a efface 13339 lignes donc c'est bon je vais continier comme ca, une fois le fichier termine je n'est plus a y revenir donc le temps de traitement est pas si important, je te remercie de ton aide et a un autre fois peut etre!

Rechercher des sujets similaires à "macro fonctionne subitement"