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 SubA+
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
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 SubMais il y a plus rapide je pense
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 SubA+
quelqu'un a une idee car je suis toujours bloque....
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 -1xlUp 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 SubMon 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 SubOn 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!
