XL 2019 Lenteur macro (nouveau cas)

Cheyenne_2021

XLDnaute Junior
Bonjour,

La macro est longue je dirais presque 30 sec !

Un fichier avec 6 onglets, sur chacun un tableau structuré de 360 lignes.

Lecture 1er onglet, toutes les lignes, si le statut est = SUPP

Alors

Suppression de la ligne

Onglet 2 :Recherche de la ligne concernée avec RechercheV, suppression de la ligne

Onglet 3 :Recherche de la ligne concernée avec RechercheV, suppression de la ligne

Onglet 4 :Recherche de la ligne concernée avec RechercheV, suppression de la ligne

Onglet 5 :Recherche de la ligne concernée avec RechercheV, suppression de la ligne

Onglet 6 :Recherche de la ligne concernée avec RechercheV, suppression de la ligne

fin



Je ne peux pas utiliser l’accélérateur de Recherche V (avec un SI) par car mes n° ne sont pas triés

Je n’ai pas de Macro "évènementielle superfétatoire".

Je ne peux pas vous mettre le fichier car il est trop lourd, je vous recopie la macro. Je ne mets qu’un des call car ils sont tous strictement identiques.



Public Num_S As Integer

Sub Supprimer_ASUPP()


Call Initialisation_Variables_Public



Application.Calculation = xlCalculationManual

Application.ScreenUpdating = False



Application.DisplayAlerts = False

Dim r As Integer ' indice des lignes dans le tableau T_suivi_DI

'Paramètres pour le RechercheV

Dim numero As Variant

Dim Tableau_num As Range

Dim num_col As Single

Dim valeur_proche As Boolean

indice = ""



Call Deverrouiller_feuille(ActiveWorkbook.Worksheets("1- Suivi des DI & avis n+1"))



Di_Ligne = Range("T_suiviDi").Rows.Count


For r = 1 To Di_Ligne

col_statut = Worksheets("1- Suivi des DI & avis n+1").ListObjects("T_SuiviDi").ListColumns("Statut").Index

col_num = Worksheets("1- Suivi des DI & avis n+1").ListObjects("T_SuiviDi").ListColumns("NumL").Index


If [T_SuiviDi[statut]].Rows(r) = "ASUPP" Then

Num_S = [T_SuiviDi[NumL]].Rows(r)

derniere_ligne = [T_SUPP].ListObject.ListRows.Count

[T_SUPP].ListObject.ListRows.Add

[T_SuiviDi].Rows(r).Copy

[T_SUPP].Rows(derniere_ligne).PasteSpecial Paste:=xlPasteValues

[T_SUPP].Rows(derniere_ligne).PasteSpecial Paste:=xlPasteFormats

'suppression de la ligne dans les onglets 2-3-4-5-6

' ---------------------------------------------------

Call supp_2(Num_S)

Call supp_3(Num_S)

Call supp_4(Num_S)

Call supp_5(Num_S)

Call supp_6(Num_S)


End If

Next


Application.ScreenUpdating = True

Application.Calculation = xlCalculationAutomatic

Application.DisplayAlerts = True



Call Verouiller_feuille(ActiveWorkbook.Worksheets("1- Suivi des DI & avis n+1"))

End Sub



Sub supp_2(Num_S As Integer)

Call Deverrouiller_feuille(Onglet_TraitDi)


'Parametres pour le RechercheV

Dim numero As Variant

Dim Tableau_num As Range

Dim num_col As Single

Dim valeur_proche As Boolean

indice = ""

numero = Num_S

Set Tableau_num = Worksheets("2- Traitement des DI").Range("T_TraitDi")

valeur_proche = False

indice = ""

num_col = 1 ' n° de la colone ou est numero

DL_2 = [T_TraitDi].ListObject.ListRows.Count

indice = RECHERCHEV(numero, Tableau_num, num_col, valeur_proche)

'RECHERCHEV_F = WorksheetFunction.VLookup(num_rat, Tableau_num, 2, 0)


If indice <> "#N/A" Then 'numero TW trouvé

' n° de ligne du tableau où il a trouvé le n°

numero2 = Application.Match(Num_S, [T_TraitDi[NumL]], 0)

[T_TraitDi].Rows(numero2).Delete

End If

Call Verouiller_feuille(Onglet_TraitDi)

End Sub

Merci,
 

JBARBE

XLDnaute Barbatruc
Bonjour à tous,
Je ne sais si cela permettre de résoudre le probléme !
D'abord compressé le fichier après l'avoir allégé ( voir précédemment )
Puis utiliser ceci : (limite 15 Mo)
je n'ai pas d'autre solution !
Bonne journée !
 
Bonjour Cheyenne_2021, patricktoulon, pierrejean, jbarbe, le forum

Votre fichier n'est pas fonctionnel, c'est un xlsx, aucune macro, pourquoi les avoir enlevé ? Dans votre post 1, 1 seule macro de suppression (d'ailleurs non encadrée dans une balise).
Comme vous l'a expliqué patricktoulon, s'ils peuvent avoir envie de vous aider pour votre problème, les membres n'ont pas forcément envie de se taper la reconstruction d'un fichier fonctionnel, que vous, vous connaissez parfaitement pour l'avoir créé, pour tester ou de passer du temps à comprendre votre logique de programmation.
Mettez au moins l'ensemble des macros dans une balise, qu'il y ait juste à les copier pour rendre le fichier fonctionnel.

Bien cordialement, @+
 

Cheyenne_2021

XLDnaute Junior
Bonjour,
J'ai enlevé toutes les macros car PatrickToulon me l'a demandé. Recopier toutes les macros ... j'ai 10 modules avec plusieurs macros à l'interieur et des macros (creation, envoi de mails, etc) qui n'ont rien à voir avec celle qui me pose pb, ce serait trop long je pense. Et je ne peux pas mettre le fichier dans sa totalité car il est trop lourd, meme compressé.
Comment recopier une macro avec des balises ?
Je comprends tout à fait l'utilité d'avoir le fichier avec les tableaux deja crées, bien-sur.
 
Re,

patrick vous a parlé des macros pour réduire la taille du fichier afin de le passer dans la discussion avec la limite d'un méga d'Xld, cjoint n'est pas limité aux 1 mo pour les fichiers mais à 15 mo, vous pouvez laisser les macros sans problème à partir du moment ou vous passez par cjoint. Le but est de faciliter au maximum la tache des contributeurs bénévoles qui peuvent ainsi s'attaquer au seul problème.
Une fois le fichier complet obtenu et fonctionnel, nous pourrons très certainement en réduire la taille pour l'intégrer dans la discussion ce qui est la règle, les fichiers sur cjoint finissant par devenir des liens morts.

Bien cordialement, @+
 

patricktoulon

XLDnaute Barbatruc
bonjour à tous
ben deja on a au moins une base
alors maintenant !!!!!
que veux tu faire dans ce fichier et dans quel contexte
explique toi clairement
étape par étape car je suppute que c'est une suite d'actions lancées d'un même point
par exemple a quel moment cette ou ces actions doivent être faites ?
par l’intermédiaire de quel événement ou peut être un bouton ?
 

Cheyenne_2021

XLDnaute Junior
Voici le fichier avec toutes ses macros, j'ai juste enlevé 3 onglets de stats.
Nouveau lien : [modération : lien supprimé, RGDP]

Explication : Dans ce fichier, il y a des lignes que l'utilisatrice veut supprimer mais il faut en conserver une trace.
J'ai donc creer des statuts, donc ASUPP (ligne à supprimer). Elle ne le fera donc pas au quotidien mais de temps en temps. Sur le 1er onglet, j'ai créé un bouton (-) pour lancer la macro qui va donc supprimer des 6 onglets les lignes qui ont le n° reperé dans le 1er onglet avec le statut ASUPP. Et je recopie les n° dans un onglet n° 7. (Au debut je recopiais toute les lignes avec un copier/coller, j'ai changé de tactique craignant que ça prenne du temps)
Merci
 
Dernière modification par un modérateur:

Statistiques des forums

Discussions
311 720
Messages
2 081 900
Membres
101 834
dernier inscrit
Jeremy06510