Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
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.
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
Re
Désolé mais je n'arrive pas à adapter la boucle pour prendre en compte ta demande.
Attendons quelqu'un de plus calé en VBA pour avoir une solution.
A+
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
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...
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🙄...).
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é😱).
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
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.(-:
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 🙂.
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
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,
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
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🙄.
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
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+
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 .😕
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 .
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.
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD