OVH Cloud OVH Cloud

Suppression de lignes en WBA

12 réponses
Avatar
Michel
Bonjour,

j'ai une feuille de calcule avec des données qui vont de la ligne 1 jusqu'à
la ligne 36'444 et je désire garder les lignes 1 à 15, puis supprimer les
lignes 16 à 32, puis garder les lignes 33 à 47, puis supprimer les lignes 48
à 64, etc... en fait une fiche(données) client comporte toujours 32 lignes,
et je désire garder uniquement les 15 premières lignes da ladite fiche.

Merci de votre aide

2 réponses

1 2
Avatar
Daniel.M
Bienvenu chez les incompris !

mdr !
AV


:-)))

Pffff! (tm AV)
J'ai eu le présentiment que j'aurais droit à ce genre de message de ta part.

En effet, j'aime bien le pattern qui consiste à utiliser une colonne
supplémentaire pour isoler les enregistrements (lignes) pertinents (à l'aide
d'une formule adaptée) et d'y effectuer ensuite les opérations en une seule
instruction.

Salutations,

Daniel M.

Avatar
Daniel.M
Salut Alain,

En tant que exégète officiel de Daniel M, je ne saurait trop te conseiller de
tester la solution qu'il t'a proposé !


Cette boucle (ex de ex) n'aura-t-elle jamais de fin? :-)

En passant, voici quand même une nouvelle version (avec un tantinet plus de
commentaires):

Sub Det17DernLigneDesFichesDMA()

Dim nLi As Long, nCol As Long, res As Variant
Dim ColUt As Range

Application.ScreenUpdating = False
' Stratégie pour effacement rapide (1 seul effacement)
' É1. Mettre formule qui retourne 1 pour les 15 premières lignes
' É2. Fixer les Valeurs
' É3. Trier sur cette condition (0 et 1)
' É4. Effacer les lignes où la formule = 0

With Range("A1").CurrentRegion
nLi = .Rows.Count
nCol = .Columns.Count
Set ColUt = .Offset(0, nCol).Resize(, 1)
ColUt.FormulaR1C1 = "=--(MOD(ROW()-1,32)<15)" ' É1.
ColUt.Value = ColUt.Value ' É2.

' É3. Tri avec les 0 en dernier
.Resize(, nCol + 1).Sort key1:=ColUt(1, 1), _
order1:=xlDescending, header:=xlNo
res = Application.Match(0, ColUt, 0)

' É4.
If Not IsError(res) Then 'si on trouve au moins un 0
.Cells(res, 1).Resize(1 + nLi - res).EntireRow.Delete
End If

' Efface le contenu de la colonne utilitaire
ColUt.ClearContents
Set ColUt = Nothing
End With

Application.ScreenUpdating = True
End Sub

Salutations,

Daniel M.

"AV" wrote in message
news:
A l'évidence, tu n'as pas testé l'ensemble des solutions proposées !
C'est une grave erreur !

Elle est, et de très loin, la plus rapide et la plus sure !

AV




1 2