XL 2010 Supprimer des lignes rapidement en vba

lolobala

XLDnaute Nouveau
Bonjour,

Je suis a la recherche d'une méthode rapide en vba pour supprimer plusieurs lignes.
J'ai essayé la boucle (en partant de la fin) mais c'est beaucoup trop long.
J'ai essayé le filtre avec un critère mais c'est encore trop long
Dans l'exemple en pj, il y a plus de 3000 lignes mais j'en aurai beaucoup plus dans la réalité.

N'ayant pas beaucoup de connaissance en vba, j'ai parcouru quelques forums mais je n'ai pas trouvé d'autres solutions...
Merci pour votre retour

Laurent
 

Pièces jointes

  • V2_Prov - Copie.xlsm
    812.9 KB · Affichages: 7
Solution
Bonjour,

VB:
'Définition des constantes pour fixer la plage de données à traiter
Const nPremLig As Integer = 4
Const sPremCol As String = "B"
Const sDerCol As String = "AB"

Sub SupprLig()

Dim tablo As Variant
Dim nDerLig, nLigInc As Integer

'Désactivation de l'update visuel et du calcul automatique pour la performance
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

'Recherche de la dernière ligne de la plage de données à traiter
nDerLig = Feuil5.Range(sPremCol & Rows.Count).End(xlUp).Row
'Export des données de la feuille vers un Array
tablo = Feuil5.Range(sPremCol & nPremLig & ":" & sDerCol & nDerLig).Value
'On nettoie la feuille
Feuil5.Range(sPremCol & nPremLig & ":" & sDerCol &...

lolobala

XLDnaute Nouveau
Bonjour,

Une idée comme ça :
1) placer les données du tableau dans un Array VBA
2) ClearContents la feuille
3) réinsérer uniquement les lignes de l'array intéressantes

Bonne journée,

Merci pour votre réponse,

J'avais lu cette possibilité mais comme mes connaissances sont plus que limités, je n'ai pas essayé...
Est-ce que vous auriez un exemple ou un début de programme pour m'aider ?

Laurent
 

lolobala

XLDnaute Nouveau
Bonjour,

J'ai lu cette solution de sur le forum mais je n'arrive pas à l'adapter à ma situation et je ne comprends pas son fonctionnement.
Est-ce que quelqu'un peut m'aider s'il vous plait ?


Merci pour votre aide,

Laurent
 

xUpsilon

XLDnaute Accro
Bonjour,

VB:
'Définition des constantes pour fixer la plage de données à traiter
Const nPremLig As Integer = 4
Const sPremCol As String = "B"
Const sDerCol As String = "AB"

Sub SupprLig()

Dim tablo As Variant
Dim nDerLig, nLigInc As Integer

'Désactivation de l'update visuel et du calcul automatique pour la performance
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

'Recherche de la dernière ligne de la plage de données à traiter
nDerLig = Feuil5.Range(sPremCol & Rows.Count).End(xlUp).Row
'Export des données de la feuille vers un Array
tablo = Feuil5.Range(sPremCol & nPremLig & ":" & sDerCol & nDerLig).Value
'On nettoie la feuille
Feuil5.Range(sPremCol & nPremLig & ":" & sDerCol & nDerLig).ClearContents

'Pour chaque ligne du tableau (LBound = première ligne et UBound = dernière ligne du tableau )
For nLig = LBound(tablo) To UBound(tablo)
    'Sur la ligne observée, on cherche dans la dernière colonne de l'Array (l'équivalent de la colonne AB) si il y a la valeur "A supprimer"
    If tablo(nLig, UBound(tablo, 2)) <> "A supprimer" Then
        'Si la valeur en AB n'est pas "A supprimer", on exporte la ligne de l'Array dans la feuille Excel à la dernière ligne remplie +1
        For nCol = LBound(tablo, 2) To UBound(tablo, 2)
            Feuil5.Cells(nLigInc + nPremLig, nCol + Asc(sPremCol) - 65) = tablo(nLig, nCol)
        Next nCol
        'Augmentation de l'incrément de suivi de ligne Excel à remplir (distinction entre nLig qui boucle sur les lignes de l'array et nLigInc qui indique la ligne de la feuille Excel à remplir)
        nLigInc = nLigInc + 1
    End If
Next nLig

'Réactivation de l'update visuel et du calcul automatique
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub

Bonne journée,
 

lolobala

XLDnaute Nouveau
Bonjour,

VB:
'Définition des constantes pour fixer la plage de données à traiter
Const nPremLig As Integer = 4
Const sPremCol As String = "B"
Const sDerCol As String = "AB"

Sub SupprLig()

Dim tablo As Variant
Dim nDerLig, nLigInc As Integer

'Désactivation de l'update visuel et du calcul automatique pour la performance
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

'Recherche de la dernière ligne de la plage de données à traiter
nDerLig = Feuil5.Range(sPremCol & Rows.Count).End(xlUp).Row
'Export des données de la feuille vers un Array
tablo = Feuil5.Range(sPremCol & nPremLig & ":" & sDerCol & nDerLig).Value
'On nettoie la feuille
Feuil5.Range(sPremCol & nPremLig & ":" & sDerCol & nDerLig).ClearContents

'Pour chaque ligne du tableau (LBound = première ligne et UBound = dernière ligne du tableau )
For nLig = LBound(tablo) To UBound(tablo)
    'Sur la ligne observée, on cherche dans la dernière colonne de l'Array (l'équivalent de la colonne AB) si il y a la valeur "A supprimer"
    If tablo(nLig, UBound(tablo, 2)) <> "A supprimer" Then
        'Si la valeur en AB n'est pas "A supprimer", on exporte la ligne de l'Array dans la feuille Excel à la dernière ligne remplie +1
        For nCol = LBound(tablo, 2) To UBound(tablo, 2)
            Feuil5.Cells(nLigInc + nPremLig, nCol + Asc(sPremCol) - 65) = tablo(nLig, nCol)
        Next nCol
        'Augmentation de l'incrément de suivi de ligne Excel à remplir (distinction entre nLig qui boucle sur les lignes de l'array et nLigInc qui indique la ligne de la feuille Excel à remplir)
        nLigInc = nLigInc + 1
    End If
Next nLig

'Réactivation de l'update visuel et du calcul automatique
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub

Bonne journée,

Merci infiniment xUpsilon

ça marche super bien, c'est rapide et les explications sont bien détaillées !
Bonne journée et encore merci pour ton aide
 

Discussions similaires