Supp lignes en fct du début d'une cellule

A

Antoine

Guest
bonjour,

Ma demande est identique à celle présente sur ce lien
Lien supprimé

Seul la condition sur la cellule change.

En effet, je veux supprimer les lignes dont le contenu de la cellule commence par 'Prix :'.
J'ai essayé d'utiliser la fonction left( ) mais je ne sais pas comment elle marche.

Voici un rappel du programme :

Range('A1').Select ' si ta colonne est la A
Do
If ActiveCell.Value = 'Prix :' Then
'Prix est que la partie gauche du contenu de la cellule concernée,
'donc comme écrit là ça ne marche pas

ActiveCell.EntireRow.Delete
End If
ActiveCell.Offset(1, 0).Select
Loop Until ActiveCell.Value = '' ' descend d'une case jusqu'a ce que la cellule active soit vide

Merci de votre aide

Antoine
 

PascalXLD

XLDnaute Barbatruc
Modérateur
Re

Oui c'est plus sur

Imagine en ligne 4 et 5 tu as prix

il arrive à la 4 il supprime la ligne
donc la cellule active devient celle de la ligne 5
ensuite tu passes à la ligne suivante donc à la 6
Et tu as oublié de supprimer la ligne 5

Bon courage
 
A

Antoine

Guest
Ta macro marche super.

Juste pour info g testé aussi le programme suivant (autre solution) qui se trouve
Lien supprimé

où j'ai modifier une instruction en fonction de ce que je veux :
.FormulaR1C1 = '=IF(Left((RC[1], 9) = ''Adaptable'',''del'')'

mais ne fonctionne pas avec cette instruction. Saurais-tu pourquoi?

rappel du programme:

Sub SuppCertainLigne2()
' Sans boucle:
' (données en colonne A, recherche 'Adaptable')

Dim rng As Range
Columns(1).Insert
Set rng = Range([B1], [B65536].End(xlUp)).Offset(, -1)
With rng
.FormulaR1C1 = '=IF(Left((RC[1], 9) = ''Adaptable'',''del'')'
On Error Resume Next
.SpecialCells(xlCellTypeFormulas, xlConstants).EntireRow.Delete
On Error GoTo 0
.EntireColumn.Delete
End With
Set rng = Nothing

' Suppression des lignes en fonction de la longueur de caractère
' de la cellule
' tu remplaces:
' .FormulaR1C1 = '=IF(RC[1]=''texte'',''del'')'
' par
' .FormulaR1C1 = '=IF(LEN(RC[1])=5,''del'')'

Bonne soirée
Antoine
 

PascalXLD

XLDnaute Barbatruc
Modérateur
Re

Je ne vais pas critiqué un code qui n'est pas de moi mais je le trouve un peu compliqué. Le code crée une colonne dans lequel il met une formule et ensuite suppprime les lignes où il ya une valeur et non FAUX puis supprime la colonne.

Perso j'ai essayé ça marche mais bon c'est pas du tout ma façon de programmer
 
A

Antoine

Guest
G testé ta macro dans la pratique est je me suis heurté à deux problèmes :

1_ Si le nombre de lignes est trop important ça ne marche pas. Je commence donc depuis la ligne 15000 et je répète l'opération.

2_ Dans l'esemple du fichier joint, quand je lance ta macro, cela ne supprime que la dernière ligne!

Bonne journée,
Antoine
 
A

Antoine

Guest
Merci pour la solution de 'Long'

Désolé le fichier ne s'est pas attaché...
Le voici

A+
Antoine [file name=EffaceLigneDtCelluleVide.zip size=9809]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/EffaceLigneDtCelluleVide.zip[/file]
 

Pièces jointes

  • EffaceLigneDtCelluleVide.zip
    9.6 KB · Affichages: 19

PascalXLD

XLDnaute Barbatruc
Modérateur
Bonjour

Si tu parles de cette macro il est normal qu'elle ne fonctionne pas

Sub SuppLigneDtCelluleVides()

Dim x As Integer

For x = Range('B65536').End(xlUp).Row To 1 Step -1
If IsEmpty(Range('B' & x)) Then
Rows(x).Delete
End If
Next

End Sub

En effet ta colonne B est vide donc

Range('B65536').End(xlUp).Row

Renvoie 1 donc ta boucle ne traite que la ligne 1

Il faut que tu regardes la dernière ligne de la colonne A

For x = Range('A65536').End(xlUp).Row To 1 Step -1

Bonne journée
 
A

Antoine

Guest
Encore une fois merci Pascal de tes lumières.

Je viens d'utiliser ta macro plusieurs fois et c'est parfait.

Sinon pour l'autre cas de copie plage je viens d'y joindre un fichier sur
Lien supprimé

Bonne soirée à toi et à très bientôt,
Antoine
 

Discussions similaires

Statistiques des forums

Discussions
312 361
Messages
2 087 627
Membres
103 608
dernier inscrit
rawane