Supprimer des lignes en VBA

Amilo

XLDnaute Accro
Bonsoir le Forum,

J'ai trouvé une ptite macro pour supprimer toutes les lignes vides d'une feuille, par contre dans mon exemple je souhaite également supprimer d'autres lignes partiellement vides !!!

Ci-dessous le récapitulatif des lignes que je souhaite supprimer :

- les lignes bleues (la macro les supprime sans problème)
- les lignes oranges et les lignes rouges qui sont partiellement vides

Les lignes que je souhaite conserver :

- la 1ère ligne en vert (correspondant à l'en-tête de mon tableau)
- les autres lignes vertes

Pour info, mes données tiennent en réalité sur 300 lignes env. mais toujours avec la même structure comme présentée dans le fichier, avec du texte, des chiffres et de tirets, à intervalles, lignes et colonnes identiques.

Je vous remercie d'avance pour votre aide

Cordialement.
 

Pièces jointes

  • SuppLignes.xls
    44 KB · Affichages: 168
  • SuppLignes.xls
    44 KB · Affichages: 174
  • SuppLignes.xls
    44 KB · Affichages: 176
Dernière édition:

david84

XLDnaute Barbatruc
Re : Supprimer des lignes en VBA

Bonsoir,
peut-être comme cela :
Code:
Sub SupprLignesVides() 'Le Programmeur
    Dim DerniereLigne As Long
    Dim Compteur As Long
    DerniereLigne = ActiveSheet.UsedRange.Row - 1 + _
                       ActiveSheet.UsedRange.Rows.Count
    For Compteur = DerniereLigne To 1 Step -1
        If Application.WorksheetFunction.CountA(Rows(Compteur)) <> 6 _
        Then Rows(Compteur).Delete
    Next Compteur
End Sub
Ne te garde que les lignes sans cellule vide.
A+

Edit : même si les 2 fonctionnent, remplacer :
If Application.WorksheetFunction.CountA(Rows(Compteur)) <> 6 _
Then Rows(Compteur).Delete
par :
If Application.WorksheetFunction.CountA(Rows(Compteur)) <> Range([A1], [A1].End(xlToRight)).Count Then _
Rows(Compteur).Delete
 
Dernière édition:

Amilo

XLDnaute Accro
Re : Supprimer des lignes en VBA

Bonsoir david84,

Merci pour votre aide, c'est presque ça à un détail près, sauf erreur de ma part les lignes rouges ne sont pas supprimées..

Je viens de tester votre macro avec le remplacement de 2 lignes par les 2 nouvelles.

Je souhaite également supprimer les lignes en rouge car elles comportent du texte au lieu de chiffres dans les colonnes D, E, F.

Mais c'est déjà trés bien comme ça, au pire je pourrai toujours les supprimer manuellement les lignes contenant du texte dans les colonnes D, E , F

P.S : j'ai remis le même fichier après avoir testé avec votre macro, l'onglet "Données" contient le tableau brut avant suppression des lignes.

Bonne soirée

Slts
 

Pièces jointes

  • SuppLignes.xls
    46.5 KB · Affichages: 86
  • SuppLignes.xls
    46.5 KB · Affichages: 91
  • SuppLignes.xls
    46.5 KB · Affichages: 94

skoobi

XLDnaute Barbatruc
Re : Supprimer des lignes en VBA

Bonsoir amilo,
David ;),

En reprenant le code de David, en bleu l'ajout (si j'ai bien compris):

Code:
Sub SupprLignesVides() 'Le Programmeur
    Dim DerniereLigne As Long
    Dim Compteur As Long
    DerniereLigne = ActiveSheet.UsedRange.Row - 1 + _
                       ActiveSheet.UsedRange.Rows.Count
    For Compteur = DerniereLigne To 1 Step -1
        If Application.WorksheetFunction.CountA(Rows(Compteur)) <> Range([A1], [A1].End(xlToRight)).Count Then
          Rows(Compteur).Delete
       [COLOR=Blue][B] ElseIf Range("D" & Compteur) Like "[A-Z]" And Range("E" & Compteur) Like "[A-Z]" And Range("F" & Compteur) Like "[A-Z]" Then
          Rows(Compteur).Delete
        End If[/B][/COLOR]
    Next Compteur
End Sub
 

kjin

XLDnaute Barbatruc
Re : Supprimer des lignes en VBA

Bonsoir, salut david :),
Peut-être comme ceci si le tableau est constituéde blocs similaires
Code:
Sub SupprLignesVides()
dl = Range("A65000").End(xlUp).Row - 11
For i = dl To 2 Step -13
    Range("A" & i + 12).EntireRow.Delete
    Range("A" & i & ":A" & i + 3).EntireRow.Delete
Next
End Sub

Edit: bonsoir skoobi :), désolé je ne t'avais point vu...

A+
kjin
 

david84

XLDnaute Barbatruc
Re : Supprimer des lignes en VBA

Re
bon dans ce fil, il y aura au moins 2 heureux :Amilo parce qu'il a trouvé 2 solutions et moi parce que j'aurai appris quelque chose:)
Skoobi :) : merci car je n'aurai pas pensé ni su utiliser Like. Bon, maintenant que j'ai regardé l'aide d'excel et ton exemple, je crois que j'ai compris le principe. Tu l'utilise un peu comme le Regexp : comparaison d'une chaîne de caractère avec un pattern (si j'ai bien compris:rolleyes:...).
Perso, j'étais parti du côté d'un truc du genre :
Code:
ElseIf Not IsNumeric(Range("D" & Compteur)) then
mais cela ne prenait en compte que les lettres et pas les tirets.
et quand je testais
Code:
ElseIf Not IsNumeric(Range("D" & Compteur)) Or Range("D" & Compteur) <> "-" Then
, là tout s"effaçait (logique mais bon j'étais coincé:eek:).
D'ailleurs quelle est la correspondance de IsNumeric(mavariable) pour du texte ?
J'ai essayé IsText(mavariable) mais sans succès...

Kjin :) : je ne sais pas si ta proposition sera adaptée au fichier original d'Amilo
si le tableau est constituéde blocs similaires
, mais il a fallu que je la teste pour en comprendre le principe:confused:.
Franchement, il faut aller la chercher celle-là !
Merci à vous deux et à +.
 

Amilo

XLDnaute Accro
Re : Supprimer des lignes en VBA

Bonjour, le Forum, david84, Skoobi, Kjin,

merci à tous pour ce renfort,

Je ne suis pas à la maison et je prends 5 min au boulot pour vous remercier d'avance pour tout ce soutien,

et je ne doute pas un instant que la nouvelle macro ne puisse pas fonctionner.

Je la testerai sur mon fichier ce soir une fois à la maison, je vous tiens au courant en tout cas.

Merci beaucoup à vous et bonne fin de journée.

P.S :
bon dans ce fil, il y aura au moins 2 heureux :Amilo parce qu'il a trouvé 2 solutions et moi parce que j'aurai appris quelque chose

david84, effectivement à chacun de mes fil j'ai été heureux d'avoir une réponse et une solution à mes problèmes et surtout de progresser....grâce à ce forum et à l'entre aide de tous.(-:

Merci à tous

Cordialement
 

skoobi

XLDnaute Barbatruc
Re : Supprimer des lignes en VBA

Re bonjour le fil,

D'ailleurs quelle est la correspondance de IsNumeric(mavariable) pour du texte ?
J'ai essayé IsText(mavariable) mais sans succès...

L'inverse du numérique est
Code:
Not IsNumeric(.......)
C'est pour cela je pense que "Bill" n'a pas prévu la fonction genre "IsText".
Ton test est bon mais au lieu de "Or" il faudrait utiliser "And". Mais dans ce cas, les lignes qui ont un tirait "-" en colonne D à F seront aussi supprimées.
Voilà pourquoi je suis passé par "Like".
Effectivement, cela ressemble à RegExp ;).
Maintenant à voir avec le fichier réel de Amilo.
Au plaisir :).
 
Dernière édition:

Amilo

XLDnaute Accro
Re : Supprimer des lignes en VBA

Re,

Voilà, je viens de tester les macros sur mon fichier réel,

- la macro à kjin fonctionne trés bien car en effet tous les blocs du tableau sont similiaires et les lignes à supprimer sont exactement à même intervalle,

- la 2ème solution proposée par david84 et complétée par skoobi demande une légère modification en raison de mon manque de précision et de ma maladresse (avec mes excuses),

En effet, les lignes rouges de mon tableau ne comportent pas en réalité une seule lettre dans les colonnes D, E, F mais 3 mots qui reviennent à chaque bloc ou ligne rouge.

Aussi, j'ai modifié simplement :
ElseIf Range("D" & Compteur) Like "[A-Z]" And Range("E" & Compteur) Like "[A-Z]" And Range("F" & Compteur) Like "[A-Z]" Then
Rows(Compteur).Delete

Par :

ElseIf Range("D" & Compteur) Like "Le mot1" And Range("E" & Compteur) Like "Le mot2" And Range("F" & Compteur) Like "Le mot3" Then
Rows(Compteur).Delete

Voilà les 2 macros fonctionnent trés bien sur mon fichier réel,

Mille mercis pour votre travail et votre aide,


Bonne soirée à vous,

Cordialement
 
Dernière édition:

haonv

XLDnaute Occasionnel
Re : Supprimer des lignes en VBA

Bonjour à tous ,
Désolé de m'incruster comme cela dans ce fil ,mais comme je commence VBA , j'ai du mal à saisir le raisonnement et l'utilité de :
DerniereLigne = ActiveSheet.UsedRange.Row - 1 + _
ActiveSheet.UsedRange.Rows.Count

Je pensais que cela pouvait servir en cas de tableau commençant sur une autre ligne que la première , mais apparement, ce n'est pas cela.
Si vous pouviez éclairer ma lanterne .
Merci et bonne soirée.
Amicalement
 

david84

XLDnaute Barbatruc
Re : Supprimer des lignes en VBA

Re
Je pensais que cela pouvait servir en cas de tableau commençant sur une autre ligne que la première , mais apparemment, ce n'est pas cela.
Si, je pense que tu as compris. Je vais essayer de t'expliquer mais je débute moi aussi donc si je dis des bêtises ou si je manque de précision, que les VBAistes veuillent bien me reprendre ou compléter mes propos:rolleyes:.
ouvre le fichier d'Amilo et insère 2 lignes en début de feuille.
Teste ces 3 macros :
Sub test()
MsgBox ActiveSheet.UsedRange.Row - 1
End Sub
te renvoie 2, c'est à dire la ligne (utilisation de la propriété row) au-dessus de la 1ère ligne de de la zone contenant le tableau (UsedRange).

Sub test2()
MsgBox ActiveSheet.UsedRange.Rows.Count
End Sub
te renvoie 40, à savoir le nbre de lignes du tableau (utilisation des propriétés rows et count)

Sub test3()
MsgBox ActiveSheet.UsedRange.Row - 1 + _
ActiveSheet.UsedRange.Rows.Count
renvoie 42, donc le n° de la dernière ligne du tableau.

Même si dans l'exemple présent cela n'est pas utile, cela te permet de "cerner" les lignes du tableau s'il y a des lignes vides entre la 1ère ligne de la feuille et celles du tableau.
A+
 
Dernière édition:

haonv

XLDnaute Occasionnel
Re : Supprimer des lignes en VBA

Bonsoir David, Kjin,Skoobi,Amilo

Merci David pour ta réponse.

J'avais tester le cas où le tableau ne commence pas sur la premiere ligne.La macro effaçait le tableau entièrement.D'où mon interrogation .:confused:

En modifiant légèrement la macro ,on arrive , je pense, au résultat escompté, à une condition:que les lignes vides n'aient jamais contenues de données.Apparemment , si des cellules ont eues des données à un moment ,elles sont comptées comme utilisées.

Dans le fichier joint , sur la feuille "lignes vides", j'ai collé les données directement ligne 4.Sur la feuille "lignes insérées" , j'ai collé les données ligne 1 puis j'ai insérées 4 lignes au dessus.En appliquant la même macro sur les deux feuilles ,on n'obtient pas le même résultat.

Désolé de ne pas avoir répondu plus tôt , mais j'ai tester un peu dans tous les sens pour essayer de comprendre.
Au cas où.. , je ne suis pas sur de pouvoir me reconnecter avant mardi ...
A bientôt sur ce fil ...ou un autre .

Amicalement
 

Pièces jointes

  • pour amilo.zip
    13.3 KB · Affichages: 66

skoobi

XLDnaute Barbatruc
Re : Supprimer des lignes en VBA

Bonsoir haonv,

curieux ce qui t'arrive car chez-moi, avec excel 2003, tout ce passe bien, qu'il y ai des lignes insérées ou non.
Attendons de voir si David confirme ou non vu qu'il a aussi excel 2007.
 

Discussions similaires

Réponses
26
Affichages
1 K

Statistiques des forums

Discussions
312 839
Messages
2 092 678
Membres
105 508
dernier inscrit
Albator