Macros qui ne fonctionnent plus sans aucun changements sur Excel
Bonjour,
Je passe décidément beaucoup trop de temps sur ce forum à mon gout mais il faut avouer que la communauté est réactive et compétente, alors je reviens !
Je vous explique le problème. Dans le cadre de mon stage j'ai énormément de données à traiter. Pour se faire j'ai commencé à m’intéresser aux macros j'en ai rédigé, avec l'aide de ce forum et de plein d'autres pages internet 4. Mais voilà, depuis vendredi, deux ne fonctionnent plus, ou plutôt, elles fonctionnent, elles tournent à l'infini mais ne produisent aucun effet. C'est plutôt frustrant puisque jusqu'alors elles fonctionnaient parfaitement, et le debogueur ne renvoie aucune erreur.
Je fais donc appel à vous pour trouver l'erreur et m'aider à corriger ça !
Les deux macros on pour objectif de supprimer des lignes.
voici la première :
Sub SuppressionValeursNulles ()
With Sheets("correction")
dl = .Cells(Rows.Count, 10).end(xlUp).Row
For i = dl to 2 Step -1
If .Cells(i, 10).Value = 0 Then Rows(i).EntireRow.Delete
Next i
End With
End SubLe code est pourtant simple, il fonctionnait jusqu'à jeudi, pourtant, depuis vendredi, il tourne de manière ininterrompu sans renvoyer d'erreur.
Un camarade du forum m'avait proposé ce code si :
Sub Plus_De_Vitesse()
Dim UN
With Sheets("correction")
dl = .Cells(Rows.Count, 10).End(xlUp).Row
Set UN = .Range("A1") 'une cellulle hors la colonne 10
For i = dl To 2 Step -1
If .Cells(i, 10).Value = "0" Then Set UN = Union(UN, .Cells(i, 10)) 'toutes ces cellulles
Next i
If UN.Cells.Count > 1 Then
Set UN = Intersect(UN, .Columns(10)) 'exclude la cellulle A1
UN.EntireRow.Delete 'tous les autres cellulles
End If
End With
End Submais qui me renvoie une erreur 1004.
Pour la deuxième macro, elle vise aussi à supprimer des lignes et pareil, elle a fonctionné correctement jusqu'à jeudi et depuis tourne dans le vide sans renvoyer d'erreur.
Sub SuppressionNuits()
'
' SuppressionHeureNuit Macro
' Supprime les données de 22h à 4h59
Dim i As Long
With Sheets("correction")
dl = .Cells(Rows.Count, 7).End(xlUp).Row
For i = dl To 2 Step -1
If UCase(Cells(i, 7)) Like 0 Then Rows(i).EntireRow.Delete
If UCase(Cells(i, 7)) Like 1 Then Rows(i).EntireRow.Delete
If UCase(Cells(i, 7)) Like 2 Then Rows(i).EntireRow.Delete
If UCase(Cells(i, 7)) Like 3 Then Rows(i).EntireRow.Delete
If UCase(Cells(i, 7)) Like 4 Then Rows(i).EntireRow.Delete
If UCase(Cells(i, 7)) Like 22 Then Rows(i).EntireRow.Delete
If UCase(Cells(i, 7)) Like 23 Then Rows(i).EntireRow.Delete
Next i
End With
End SubJ'ai conscience que ces macros ne sont pas les plus optimisées mais j'ai juste besoin d'un programme qui marche, je n'ai pas le temps de me former plus sur VBa même si j'identifie la puissance de l'outil, je le ferai sans doute plus tard.
Bref je suis bloqué pour l'analyse de mes données.
C'est vrai que je pourrai supprimer les lignes à la main, mais l'idée est de créer des boutons dans un tableur Excel automatisé pour que les prochains stagiaires n'aient pas à se coltiner se boulot.
Merci d'avance !
Bonjour,
une autre technique beaucoup plus rapide et efficace consiste à filtrer et effacer les lignes affichées.
Effacer ligne à ligne est très lent
Sub supp0()
With ActiveSheet
' filtrer sur 0
.Range("$A$1").Resize(Cells(Rows.Count, 10).End(xlUp).Row).AutoFilter Field:=10, Criteria1:="0"
On Error Resume Next
' supprimer lignes visibles
Range("_FilterDataBase").Offset(1, 0).Resize(Range("_FilterDataBase").Rows.Count - 1).SpecialCells(xlCellTypeVisible).Delete Shift:=xlUp
On Error GoTo 0
' afficher tout
If .AutoFilterMode And .FilterMode Then .ShowAllData
End With
End SubA toi de mettre le filtre qui va bien, je vois qu'il change à la fin.
Tu peux utiliser l'enregistreur de macro pour sa mise en place
eric
Bonsoir …
Elle ne devait pas être efficace car il faut aussi un . devant Rows(i)…
point c'est Tout n'est-ce pas Eriiic (salut) !
Sans celui-ci, les lignes sont supprimées dans la feuille active au lancement de la macro et si on y a une événementielle, bonjour les dégats avec une boucle qui ne la boucle pas !
Salut Ordonc,
bien vu
Bonjour
A toutes et à tous, merci de votre implication, j'ai oublié que j'avais ouvert ce topic.
Par la magie de VBA, les macros se sont remises à fonctionner (je n'ai vraiment aucune idée de pourquoi et du comment).
Encore merci et à bientôt
Ugo