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,
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,