Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

[Résolu] Erreur de syntaxe ...

djodjodjo

XLDnaute Occasionnel
Bonjour à tous,

j'ai un petit souci.. évidemment ! Je m'explique: en fait je veux trouver une valeur dans une colonne, et dès que je l'ai trouvée je supprime toutes les lignes qui suivent cette valeur. J'ai rédigé ça, mais evidemment ça ne fonctionne pas :

Code:
k = ActiveSheet.UsedRange.Rows.Count
Set g = ActiveSheet.Range("C9:C" & k).Find("-", LookIn:=xlValues, LookAt:=xlWhole)
lig_g = g.Row
Range("C" & lig_g:"C" & k).Delete

Et Rows("lig_g:k").Delete ne fonctionne évidemment pas..

Je ne peux pas supprimer les lignes une par une avec une boucle for car ça fait ramer le fichier à chaque suppression de ligne, donc il faudrait tout supprimer d'un coup!

Merci d'avance
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : [Résolu] Erreur de syntaxe ...

Bonjour
Comme ça :
VB:
Dim K As Long, G As Range
With ActiveSheet.UsedRange: K = .Row + .Rows.Count - 1: End With
Set G = ActiveSheet.Range("C9:C" & K).Find("-", LookIn:=xlValues, LookAt:=xlWhole)
If Not G Is Nothing Then Rows(G.Row & ":" & K).Delete
À +

Bonjour Pierrot
 

TempusFugit

XLDnaute Impliqué
Re : [Résolu] Erreur de syntaxe ...

Bonjour


Je ne peux pas supprimer les lignes une par une avec une boucle for car ça fait ramer le fichier à chaque suppression de ligne, donc il faudrait tout supprimer d'un coup!
En utilisant par VBA un filtre automatique, plus besoin de rame.

Un exemple ci-dessous
Code:
Sub Macro1()
Dim k As Long
k = ActiveSheet.UsedRange.Rows.Count
Range("C8").Resize(k).AutoFilter Field:=1, Criteria1:="-"
Range("_FilterDatabase").Offset(1, 0).Resize(Range("_FilterDatabase").Rows.Count - 1).SpecialCells(xlCellTypeVisible).EntireRow.Delete
ActiveSheet.AutoFilterMode = False
End Sub
 
Dernière édition:

TempusFugit

XLDnaute Impliqué
Re : [Résolu] Erreur de syntaxe ...

@pierrot93
J'évoquais le filtre surtout pour ne pas faire de boucle comme le précise djodjodjo.

Je n'ai pas chronométré les deux méthodes, donc je ne saurai répondre laquelle est la plus rapide.
 

Pierrot93

XLDnaute Barbatruc
Re : [Résolu] Erreur de syntaxe ...

Re,

d'autre part ce code n'effacera que les lignes renseignées par "-", pas les autres même si elles suivent..; :
 

Dranreb

XLDnaute Barbatruc
Re : [Résolu] Erreur de syntaxe ...

Parce que la plage définie par UsedRange peut commencer au delà des ligne et colonne 1. Ça m'arrive souvent dans mes classeurs. Je n'utilise guère la ligne 1, sauf pour un titre général de la feuille, ni la colonne A, sauf pour un numéro d'ordre de ligne en dehors de la zone d'impression, et si je n'en mets pas elle est même hors de la plage utilisée.
 

djodjodjo

XLDnaute Occasionnel
Re : [Résolu] Erreur de syntaxe ...

Comment peut-on voir la plage définie par UsedRange ?

C'est bizarre moi j'ai rien en ligne 1 (juste du remplissage de couleur) et ma formule fonctionne...
 
Dernière édition:

djodjodjo

XLDnaute Occasionnel
Re : [Résolu] Erreur de syntaxe ...

Merci,

donc en gros pour plus de sûreté, autant toujours utiliser
Code:
With ActiveSheet.UsedRange: K = .Row + .Rows.Count - 1: End With
?

Ca sera équivalent à
Code:
k = ActiveSheet.UsedRange.Rows.Count
dans mon cas?
 

Discussions similaires

Réponses
2
Affichages
198
Réponses
3
Affichages
594
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…