Suppression de lignes vide a intégrer dans une macro
Résolu
shynseby
Messages postés
22
Date d'inscription
Statut
Membre
Dernière intervention
-
shynseby Messages postés 22 Date d'inscription Statut Membre Dernière intervention -
shynseby Messages postés 22 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
j'ai déjà regarder plusieurs post avec divers solution mais aucune n'a l'air de résoudre mon problème. (ou je n'ai pas tout compris)
j'ai une macro qui génère un nouveau tableau excel sur une feuille à partir de formules.
des données apparaissent mais pas à toutes les lignes. c'est normal car il y a un tri et certaines information sont supprimé volontairement.
je me retrouve avec un tableau de 20000 lignes dont les 3/4 vides.
Comment faire pour la macro me sélectionne les lignes 3 à 20000 et me supprime toutes celles qui sont vides?
je joint un passage de ma macro avec la ligne en jaune qui pose problème:

j'ai déjà regarder plusieurs post avec divers solution mais aucune n'a l'air de résoudre mon problème. (ou je n'ai pas tout compris)
j'ai une macro qui génère un nouveau tableau excel sur une feuille à partir de formules.
des données apparaissent mais pas à toutes les lignes. c'est normal car il y a un tri et certaines information sont supprimé volontairement.
je me retrouve avec un tableau de 20000 lignes dont les 3/4 vides.
Comment faire pour la macro me sélectionne les lignes 3 à 20000 et me supprime toutes celles qui sont vides?
je joint un passage de ma macro avec la ligne en jaune qui pose problème:

A voir également:
- Vba supprimer lignes vides
- Supprimer rond bleu whatsapp - Guide
- Comment supprimer une page vide sur word - Guide
- Supprimer pub youtube - Accueil - Streaming
- Fichier impossible à supprimer - Guide
- Supprimer compte instagram - Guide
11 réponses
Oui, je me souviens !
Cela veut dire que tu n'as pas de cellules vides dans la zone recherchée
pour contrecarrer:
Michel
Cela veut dire que tu n'as pas de cellules vides dans la zone recherchée
pour contrecarrer:
On Error Resume Next--
Range("A3:A20000").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
Michel
bien tenter,
Effectivement je n'ai plus le message d'erreur. mais cela ne marche pas.
j'ai bien vérifier que mes cellules était vide et c'est le cas.

Cependant, elles n'ont pas été vide tout le temps.
Je m'explique.
sur la ligne A, il y a des formules qui vont chercher des infos dans un autre tableau et s'il ne trouve rien, il affiche rien au lieu d'afficher un message d'erreur.
Par exemple dans la case A1:

en gros, la macro copie les formules de la ligne A et les colle sur les 20000 lignes en dessous.
les formules et la macro marche très bien
Ensuite, je copie les 20000 lignes et je fais un collage spécial "Valeurs" pour que mes cellules n'affiche plus mes formules mais les résultats de celle-ci.
et ensuite j'essai de supprimer les lignes vides.
Cela à peut-être un rapport...
Effectivement je n'ai plus le message d'erreur. mais cela ne marche pas.
j'ai bien vérifier que mes cellules était vide et c'est le cas.

Cependant, elles n'ont pas été vide tout le temps.
Je m'explique.
sur la ligne A, il y a des formules qui vont chercher des infos dans un autre tableau et s'il ne trouve rien, il affiche rien au lieu d'afficher un message d'erreur.
Par exemple dans la case A1:

en gros, la macro copie les formules de la ligne A et les colle sur les 20000 lignes en dessous.
les formules et la macro marche très bien
Ensuite, je copie les 20000 lignes et je fais un collage spécial "Valeurs" pour que mes cellules n'affiche plus mes formules mais les résultats de celle-ci.
et ensuite j'essai de supprimer les lignes vides.
Cela à peut-être un rapport...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour
faire un test avec cette macro
A+
Maurice
faire un test avec cette macro
Sub SupprimeLigne() Nlig = Cells(Rows.Count, 1).End(xlUp).Row On Error Resume Next With Range("A3:A" & Nlig) .SpecialCells(4).EntireRow.Delete '.SpecialCells(4).EntireRow.Select End With On Error GoTo 0 End Sub
A+
Maurice
Bonjour
en général quand il y a des formules ou on veut "rien" on a en résultat ""
par ex si (A1="blabla";4;"")
et "rien " n'est pas rien (raymond devos) ce qui expliquerait le message d'erreur
envoie un extrait de ton classeur avec environ 1000 lignes, (sur 20000 lignes on procèdera peut-^tre autrement )
en général quand il y a des formules ou on veut "rien" on a en résultat ""
par ex si (A1="blabla";4;"")
et "rien " n'est pas rien (raymond devos) ce qui expliquerait le message d'erreur
envoie un extrait de ton classeur avec environ 1000 lignes, (sur 20000 lignes on procèdera peut-^tre autrement )
Mettre le classeur sans données confidentielles en pièce jointe sur https://www.cjoint.com/
et coller le raccourci proposé (clic droit) dans le message de réponse
Dans l’attente
Bonjour,
je vous joint le fichier en simplifié.
sur 100 lignes.
j'ai aussi raccourci la macro pour avoir uniquement l'essentiel
le bouton pour activer la macro se situe sur la feuille STAT$ TPS.
Les cases en verte permet de modifier les recherches
http://www.cjoint.com/c/ELjiFDHzjMC
je vous joint le fichier en simplifié.
sur 100 lignes.
j'ai aussi raccourci la macro pour avoir uniquement l'essentiel
le bouton pour activer la macro se situe sur la feuille STAT$ TPS.
Les cases en verte permet de modifier les recherches
http://www.cjoint.com/c/ELjiFDHzjMC
Bonjour
tien mon message est pas passer
ton tableau est pas vide dur
il faut jouer avec les dates
attention ses très long
A+
Maurice
tien mon message est pas passer
ton tableau est pas vide dur
il faut jouer avec les dates
Sub Supprime() Application.ScreenUpdating = False Nlig = Cells(Rows.Count, 1).End(xlUp).Row For L = Nlig To 3 Step -1 If Range("A" & L).Value2 = "" Then Rows(L).Delete Next MsgBox "Terminer" End Sub
attention ses très long
A+
Maurice
Génial merci mais effectivement c'est très long car la macro va faire ça sur plusieurs feuilles.
une idée!
Si je remplace l'emplacement "rien" par des "0".
cela peut être plus simple?
j'ai trouvé sur le net:
par contre je ne sais comment la faire partir de la 3eme ligne et non de la première car sur ma ligne 1, il y a mes formules de base.
une idée!
Si je remplace l'emplacement "rien" par des "0".
cela peut être plus simple?
j'ai trouvé sur le net:
Sub Sup_zero()
Dim i%
For i = Range("A20000").End(xlUp).Row To 1 Step -1
If Not InStr(1, LCase(Cells(i, 1).Value), "0") = 0 Then
Rows(i).Delete
End If
Next i
End Sub
par contre je ne sais comment la faire partir de la 3eme ligne et non de la première car sur ma ligne 1, il y a mes formules de base.
Si je dérange pas trop...
pour les essais j'ai ajouté une feuille "essai" pour ne pas effacer la feuille "recap" et tout recharger en cas d'erreur eou de nouveau test
il reste à masquer les zéros et mettre au format des dates heures (a toi de jouer)
100 lignes traitées en 4/100 de seconde
merci de me dire le temps pour 20 000lignes (j'ai dans la t^te une autre solution peut-^tre + rapide)
Michel
pour les essais j'ai ajouté une feuille "essai" pour ne pas effacer la feuille "recap" et tout recharger en cas d'erreur eou de nouveau test
il reste à masquer les zéros et mettre au format des dates heures (a toi de jouer)
100 lignes traitées en 4/100 de seconde
merci de me dire le temps pour 20 000lignes (j'ai dans la t^te une autre solution peut-^tre + rapide)
Option Explicit
'---------------------------------------------
Sub affiner()
Dim Derlig As Integer, T_brut, Nbre As Integer, T_fin
Dim Lig As Integer, Cptr As Integer, Col As Byte
Dim start As Single
'--------------------------------initialisations
Application.ScreenUpdating = False
start = Timer
With Sheets("RECAP QUAI TPS")
'mémorisation en RAM de recap quai
Derlig = .Columns("A").Find(what:="*", searchdirection:=xlPrevious).Row
T_brut = .Range("A3:AI" & Derlig)
'taille variable-tableau final
Nbre = Application.CountIf(.Columns("A"), ">" & 0)
ReDim T_fin(1 To Nbre, 1 To 35)
'--------------------------------traitement
For Lig = 1 To UBound(T_brut)
If T_brut(Lig, 1) <> "" Then
Cptr = Cptr + 1
'remplissage tableau fin
For Col = 1 To 35
T_fin(Cptr, Col) = T_brut(Lig, Col)
Next
'sortie si on a atteint le nombre de dates en colonne A
If Cptr = Nbre Then Exit For
End If
Next
'--------------------------restitution tableau affiné
'rendu essai à supprimer après validation de la procédure
With Sheets("essai")
.Range("A3").Resize(Nbre, 35) = T_fin
.Range("A3:AI" & Nbre + 3).Borders.Weight = xlThin
End With
' rendu final
'.Range("A3:AI" & Derlig).Clear
'.Range("A3").Resize(Nbre, 35) = T_fin
'.Range("A3:AI" & Nbre + 3).Borders.Weight = xlThin
End With
Application.ScreenUpdating = True
MsgBox "traitement effectué en: " & Timer - start & " sec."
End Sub
Michel