supprimer des lignes en fonction de la valeur d'une autre cellule

timothee68

XLDnaute Nouveau
Bonjour à tous,

J'ai actuellement le problème suivant :
J'ai 1 colonne (colonne A) pour laquelle chaque cellule contient du texte avec plus ou moins de mots. J'aimerais pouvoir supprimer les cellules ou leur contenu quand ces cellules de texte contiennent moins de 5 mots.

J'arrive grâce à une formule, à faire apparaître à côté de chaque cellule (colonne B) le nombre de mots que contient la cellule.

Je sais supprimer des cellules vides.

Il me manque de pouvoir supprimer une cellule ou son contenu en fonction de la valeur de la cellule d’à côté.

Pourriez-vous m'aider svp ?
 

VDAVID

XLDnaute Impliqué
Re : supprimer des lignes en fonction de la valeur d'une autre cellule

Bonjour timothee68,

Tu peux essayer dans le code VBA de la feuille concernée: (Alt +F11)

Code:
Sub Carac()

Application.ScreenUpdating = False

    Dim i&
    For i = Range("A65536").End(xlUp).Row To 1 Step -1

        If Len(Range("A" & i).Value) <= 5 Then
        Rows(i).Delete 'Supprime la ligne
        'Range("A" & i).ClearContents 'Efface la valeur de la cellule
        End If
        
    Next i
    
Application.ScreenUpdating = True

End Sub

Bonne journée
 

timothee68

XLDnaute Nouveau
Re : supprimer des lignes en fonction de la valeur d'une autre cellule

Bonjour VDAVID,

Merci pour ta réponse. Cependant j'ai testé ton code en macro en faisant alt +f11 puis insertion module, puis j'ai rentré ton code en supprimant l'apostrophe au début de cette ligne (car je pense que c'est une erreur)
Code:
'Range("A" & i).ClearContents 'Efface la valeur de la cellule

Cependant cela ne fonctionne pas. Une idée ?
 

VDAVID

XLDnaute Impliqué
Re : supprimer des lignes en fonction de la valeur d'une autre cellule

Re,

En fait tu as provoquer l'erreur en enlevant l'apostrophe, j'ai mis cette ligne supplémentaire pour que tu choisisses entre supprimer la ligne quand ta condition est vérifiée, où simplement effacer le contenu (Ligne entre apostrophe)

Du coup gardes cette ligne:

Code:
Rows(i).Delete 'Supprime la ligne

Si tu veux supprimer la ligne une fois la valeur trouvée (Pas de cellules vide dans ta colonne)

Ou celle ci :

Code:
Range("A" & i).ClearContents

Si tu veux juste effacer le contenu de la cellule.

De plus, si tu insère le code dans un module et non dans le projet de la feuille concernée comme je te l'avais conseillé, il faut que tu spécifies la feuille dans laquelle tu travailles en rajoutant :

Code:
Sheets("Nomdetafeuille").Select
au début du code
 

timothee68

XLDnaute Nouveau
Re : supprimer des lignes en fonction de la valeur d'une autre cellule

Merci pour ta réponse. Je n'ai pas inséré le code dans le projet de la feuille car je ne connais que l'autre méthode. Peux-tu me dire comment fait-on pour l'insérer dans le projet de la feuille ?
Je n'arrive pas en ajoutant la dernière ligne citée.
 

VDAVID

XLDnaute Impliqué
Re : supprimer des lignes en fonction de la valeur d'une autre cellule

Re,

En pièce jointe le fichier, avec les deux exemples de codes (Module ou dans le projet feuille)

Pour accéder au projet de ta feuille, tu peux faire Alt +F11 puis dans Microsoft Excel Objects ==> Feuil("Caractères")

Je viens de re-tester chez moi ça marche parfaitement

N'hésites pas si tu as d'autres doutes ! :)

Bonne soirée
 

Pièces jointes

  • Celluleinf5.xls
    30.5 KB · Affichages: 48

timothee68

XLDnaute Nouveau
Re : supprimer des lignes en fonction de la valeur d'une autre cellule

OK. merci pour ta réponse.
Je comprends pourquoi j'ai testé plusieurs fois mais sans succès.
Le code fourni permet de supprimer les mots qui contiennent moins de 5 caractères. Moi je cherche à supprimer les cellules dont le texte (une phrase) contient moins de 5 mots.
 

VDAVID

XLDnaute Impliqué
Re : supprimer des lignes en fonction de la valeur d'une autre cellule

Re Timothee68,

Pour les mots, tu peux tester ce code:

Code:
Sub carac3()

Application.ScreenUpdating = False

Sheets("Caractère").Select


Dim i&, h&, Position As Integer
For i = Range("A65536").End(xlUp).Row To 1 Step -1

    If Range("A" & i).Value = "" Then GoTo Borne
    
        If Range("A" & i).Value Like "* * * * *" = True Then
        GoTo Borne
        End If
        
        Range("A" & i).Delete
Borne:
Next i

Application.ScreenUpdating = True

End Sub

Bonne journée
 

timothee68

XLDnaute Nouveau
Re : supprimer des lignes en fonction de la valeur d'une autre cellule

Bonjour VDAVID,

Merci pour ce code. Il fait bien son boulot. Il y a cependant un petit problème qui subsiste : si ma cellule a pour tout contenu seulement une virgule et un point par exemple, la cellule n'est pas supprimée.
 

VDAVID

XLDnaute Impliqué
Re : supprimer des lignes en fonction de la valeur d'une autre cellule

Re Timthee68,

Je pense que l'erreur vient du fait qu'il y ait des espaces après ta virgule ou ton point.
Le code fonctionne comme ceci : A chaque espace il y'a un mot supplémentaire.
Du coup il considère que la cellule contient autant de mots que d'espaces après ta virgule.

Ce code permet de remédier au problème:
Code:
Sub carac3()

Application.ScreenUpdating = False

Sheets("Caractère").Select


Dim i&
For i = Range("A65536").End(xlUp).Row To 1 Step -1

    If Range("A" & i).Value = "" Then GoTo Borne
    
        Range("A" & i).Value = RTrim(Range("A" & i).Value)
        If Range("A" & i).Value Like "* * * * *" = True Then
        GoTo Borne
        End If
        
        Range("A" & i).Delete
Borne:
Next i

Application.ScreenUpdating = True

End Sub
 

Discussions similaires

Statistiques des forums

Discussions
314 647
Messages
2 111 533
Membres
111 193
dernier inscrit
Raf'