Si la cellule contient un "à la ligne" alors...

Résolu/Fermé
lau-vaya - Modifié le 10 mai 2017 à 13:54
 lau-vaya - 10 mai 2017 à 15:48
Bonjour,

Je dispose d'un fichier excel et je veux supprimer les lignes dont les cellules des deux premières colonnes sont vides. Or mon code avec If Cells(i,1)="" And Cells(i,2)="" Then ne marche pas, car il se trouve que mes cellules ne sont pas vides et contiennent un saut de ligne.

Problème: je ne sais pas comment coder "If Cells(...) contient un saut à la ligne". Savez-vous si c'est possible?

Et si non, avez-vous des astuces qui me permettraient d'arriver au résultat? J'ai pensé par exemple à "If Cells(...) ne contient pas de lettre", ce qui reviendrait au même vu mon fichier.

Merci beaucoup pour vos réponses!
Laurène

Edit:
Vous trouverez ici mon fichier excel: https://www.dropbox.com/s/99vltlywwlvpi82/exemple.xlsx?dl=0
et voici mon code entier:

Sub nettoyage_lignes()

Dim wb As Workbook
Dim ws As Worksheet
Set wb = ThisWorkbook
Set ws = wb.Sheets("Travail")

Dim n As Integer, i As Integer, j As Integer, k As Integer
Dim Tableau() As String

n = ws.Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row 'Nombre de lignes du fichier
j = 0

For i = 1 To n
If ws.Cells(i, 1) = CrLf And ws.Cells(i, 2) = CrLf Then 'On trouve les lignes vides (attention les cellules contiennent des sauts de ligne)
j = j + 1
ReDim Tableau(j)
Tableau(j) = i
MsgBox ("ok") 'Pour vérifier si on rentre dans la boucle if, et le fait est que non..!
End If
Next i 'On se retrouve avec Tableau contenant les indices de toutes les lignes nulles (il y a j lignes nulles)

For i = 1 To j
l = Tableau(i)
ws.Cells(l, 1).Select
EntireRow.Delete 'On supprime les lignes nulles
If i <> j Then
For k = i + 1 To j
Tableau(k) = Tableau(k) - 1 'On ajuste l'indice des lignes qui ont bougé suite à la suppression d'une ligne
Next k
End If
Next i

End Sub

1 réponse

f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
Modifié le 10 mai 2017 à 13:33
Bonjour,

pour test "saut de ligne":

If Cells(i, 1) = vbLf And Cells(i, 2) = vbLf Then
0
Bonjour,

Merci de ta réponse. J'ai essayé en mettant cette condition (voir mon code en entier dans mon premier post édité) mais cela ne marche toujours pas, on ne rentre pas dans la boucle if. J'ai joint également mon fichier excel.
A mon avis, deux solutions: soit ce n'est pas vbLf qu'il faut mettre, soit ce n'est pas vraiment un saut de ligne qu'il y a dans mes cases (mais alors, quoi?)

Merci pour ton aide!
Laurène
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701 > lau-vaya
Modifié le 10 mai 2017 à 14:51
Re,

Pas de dropbox pour moi, passez par

Pour transmettre un fichier,
Veillez a ce qu'il n'y ait PAS DE DONNEES CONFIDENTIELLES
il faut passer par un site de pièce jointe tel que cjoint.com

Allez sur ce site : https://www.cjoint.com/
Clic sur parcourir,
Cherche ton fichier,
clic sur ouvrir,
Clic sur "Créer le lien cjoint",
Copier le lien,
Revenir ici le coller dans une réponse...

deja crlf ---->VbCrLf:
If ws.Cells(i, 1) = vbCrLf And ws.Cells(i, 2) = vbCrLf Then
0
Voilà le lien: http://www.cjoint.com/c/GEkm5Er5alg

J'avais déjà essayé avec vbCrLf et ça ne fonctionne pas non plus... (j'ai essayé CrLf après au cas où car je l'avais trouvé quelque part)

Merci beaucoup
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701 > lau-vaya
Modifié le 10 mai 2017 à 15:29
Re,

Je recupere le fichier et regarde la chose
A+

Suite:

fichier modifie, c'est un vbLf qu'il faut tester et si suppression de ligne commencer par la fin

https://www.cjoint.com/c/GEknDbbRInf
0
Parfait, merci beaucoup, ça marche !

Par contre, je n'ai toujours pas compris pourquoi quand j'ai mis moi-même le vbLf la condition n'étais pas satisfaite...mais bon

Merci beaucoup pour le temps que tu m'as accordé ! :-)
Bonne journée
0