Supprimer des lignes avec cellulles vides

Bonjour et bravo pour ce forum, j'ai tenté une petite recherche mais n'ai pas vraiment trouvé la bonne réponse, merci de me rediriger si ça a déjà été traité.

Je cherche un moyen de supprimer toutes les lignes d'un tableau comportant une cellule vide mais si possible sans code, non pas que je deteste le code mais en fait, je suis débutant et ne sais pas trop m'en servir. Je ne sais faire des macros qu'en enregistrant mes actions.

Voilà, si quelqu'un a une soluce simple, merci d'avance.

Alesque.

Bonjour au forum,

Tu sélectionne ton tableau, et tu fait un simple tri.

Données/Trier

amicalement

Claude.

Merci pour la réponse rapide.

J'ai peut être mal exprimé ma question.

J'ai déjà fait ce tri et toutes les lignes avec une cellule vide se retrouvent en fin de fichier.

Je cherche une commande a inserer dans ma macro pour les supprimer sachant que mon fichier change régulièrement. Si je le fais en manuel, je suis obligé de dire que je supprime de la ligne x à la fin, mais la ligne x change de N° à chaque fois.

re,

dans ta 1ère question, tu ne voulais pas de macro !!

envoie ton fichier avec les annotations de ce que tu souhaite.

Claude.

Bonjour,

Dans le même esprit que Dubois, utilise le filtre automatique que tu troiuves par Données / filtre / filtre auto et dans ton filtre sélectionne l'option "non vides".

A te relire

Dan

Il est possible que le filtre soit une bonne solution pour moi, pour exemple, je vous envoie le lien du fichier sur lequel je travaille en ce moment :

Sur ce fichier, et dans le but de faire un joli catalogue papier, je voudrais enregistrer une macro qui :

Copie sur plusieurs (deux seulement) sources,

supprime les colones : C D F H J K

Supprime les lignes avec la première cellule vide,

classe par E,

Supprime E

puis (et ça je sais pas encore faire) fasse un retour automatique sur les titres trop longs dans colone B

Comme je sais pas coder, je clique sur enregistrer Macro en ayant pris soin de prendre note de toutes mes opérations que j'exécute manuellement, je me fais un petit bouton sur ma feuille et le tour est joué

re,

Copie sur plusieurs (deux seulement) sources...

Que veux tu dire ?

Pour ce qui est de la macro c'est une bonne solution que de faire comme tu le décris. Ensuite place ta macro ici. On pourra l'améliorer.

A te relire

Dan

Nad-Dan a écrit :

re,

Copie sur plusieurs (deux seulement) sources...

Que veux tu dire ?

Pour ce qui est de la macro c'est une bonne solution que de faire comme tu le décris. Ensuite place ta macro ici. On pourra l'améliorer.

A te relire

Dan

Ok pour la macro, je vais la travailler demain et vous la soumettre.

Sinon, pour les "deux sources", je veux dire que ça vient de deux feuilles différentes. C'est un catalogue que j'ai mis sur internet et j'ai une macro qui transforme tout le fichier Excel en requète sql pour que ça soit facilement consultable par les visiteurs comme sur

Mais comme internet, ben ça convient pas à tout le monde, il faut que je sorte une édition papier de ce catalogue qui doit avoir 3 500 titres et plus de 10 000 lignes sur Excel...

Merci pour votre aide précieuse.

Re,

Ok. Pas de souci. J'attends ta macro demain.

Bonne soirée

Dan

C'est déjà un peu plus avancé, je voudrais maintenant sur le tableau cité plus haut :

Supprimer les lignes qui sont vide en A sachant que ça n'est pas toujours à partit de la ligne 14

Si possible, faire un retour à la ligne automatique des titres en colonne B

Ensuite, je pense ne plus avoir de problème pour exporter les données dans Word ou autre (si quelqu'un a une idée...) afin de lui donner une forme plus conviviale.

Je précise que le fichier total fait environ 10 000 lignes.

Bonjour

j'ai regardé ton code, mais c'est dommage que tu aies supprimé ton onglet original...

regarde le code un peu modifié

Il faut le mettre dans le fichier de destination

Il copiera l'onglet ("Feuil1") (nom à adapter) dans le fichier

puis suppression des lignes 1 à 4, des colonnes C, D, F, H, J et K

Suppression des lignes dont les cellules de la colonne A sont vides

Autorisation du retour à la ligne dans la colonne B, avec largeur de colonne à 50

Et enfin, largeur automatique des colonnes

Pour le tri, je n'ai pas compris pourquoi dans ton exemple, tu commençais en A5

Il faut également voir pour les titres

Regarde, et reviens pour plus de précision

Sub Catapapier()
    With Workbooks("Harpeseuleoupasseule.xls")
        .Sheets("Feuil1").Copy Before:=Sheets(1)
    End With
    Rows("1:4").Delete Shift:=xlUp
    Range("C:D,F:F,H:H,J:K").EntireColumn.Delete
    Columns("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
    With Columns("B:B")
        .WrapText = True
        .ColumnWidth = 50
    End With
    Cells.EntireColumn.AutoFit
End Sub

Merci, je vais essayer ça très vite.

je commence en A5 parceque y'a des lignes avec des titres et bouton de macro sur le fichier original qui n'ont pas d'interet dans celui là.

Dans le fichier original, j'ai une macro qui transforme ce fichier en requête SQL qui est composée comme suit.

Const colCompositeur = 1

Const colTitre = 2

Const colEditeur = 3

Const colCategory = 4

Const colType = 5

Const colFormation = 6

Const colArrangeur = 7

Const colSouscompositeurs = 2 ' same as titre

Const colImage = 8

Const colPrix = 9

Const colEdition = 10 ' c'est tres plaisant

Const colRef = 11

Const colStock = 12

Const maxRows = 15000

Const firstInputRow = 5

Sub grenouille()

Dim outputRow As Integer

outputRow = 2

crevettes = writeEditeur(1, 3, outputRow)

Debug.Print "Bravo chef, tu as bouffé"; crevettes; "crevettes"

outputRow = outputRow + crevettes

crevettes2 = writeEditeur(2, 3, outputRow)

Debug.Print "Bravo chef, tu as bouffé"; crevettes2; "crevettes"

Debug.Print "Bravo chef, tu as bouffé"; crevettes + crevettes2; "crevettes"

End Sub

Function writeEditeur(inputWorksheet As Integer, outputWorksheet As Integer, firstOutputRow As Integer) As Integer

Debug.Print "Bonjour"

Worksheets(outputWorksheet).Rows.Cells(5, 8).Value = "Oui, chef"

' clear the output area

For i = firstOutputRow To maxRows

For j = 1 To 7

Worksheets(outputWorksheet).Rows.Cells(i, j).Clear

Next j

Next i

Dim inputRowNumber As Integer, outputRowNumber As Integer

outputRowNumber = firstOutputRow

numberOfCrevettesMangées = 0

Dim category As String

Dim compositeur As String, titre As String, arranger As String

Dim souscompositeur As String

For inputRowNumber = firstInputRow To maxRows

compositeur$ = Worksheets(inputWorksheet).Rows.Cells(inputRowNumber, colCompositeur).Value

If Len(compositeur$) > 0 Then

Worksheets(outputWorksheet).Rows.Cells(outputRowNumber, 1).Value = Worksheets(inputWorksheet).Rows.Cells(inputRowNumber, colEdition).Value

Worksheets(outputWorksheet).Rows.Cells(outputRowNumber, 2).Value = Worksheets(inputWorksheet).Rows.Cells(inputRowNumber, colCompositeur).Value

Worksheets(outputWorksheet).Rows.Cells(outputRowNumber, 3).Value = Worksheets(inputWorksheet).Rows.Cells(inputRowNumber, colTitre).Value

Worksheets(outputWorksheet).Rows.Cells(outputRowNumber, 4).Value = Worksheets(inputWorksheet).Rows.Cells(inputRowNumber, colFormation).Value

Worksheets(outputWorksheet).Rows.Cells(outputRowNumber, 5).Value = Worksheets(inputWorksheet).Rows.Cells(inputRowNumber, colArrangeur).Value

Worksheets(outputWorksheet).Rows.Cells(outputRowNumber, 6).Value = Worksheets(inputWorksheet).Rows.Cells(inputRowNumber, colRef).Value

Worksheets(outputWorksheet).Rows.Cells(outputRowNumber, 7).Value = Worksheets(inputWorksheet).Rows.Cells(inputRowNumber, colStock).Value

outputRowNumber = outputRowNumber + 1

numberOfCrevettesMangées = numberOfCrevettesMangées + 1

End If

Next

Debug.Print "J'ai mangé"; (outputRowNumber - 2); "crevettes"

Worksheets(outputWorksheet).Rows.Cells(5, 8).Value = "J'ai mangé " + CStr(outputRowNumber - 2) + " crevettes"

writeEditeur = numberOfCrevettesMangées

End Function

Sub writeSQL(sourceWorksheet As Integer, filename As String)

Worksheets(sourceWorksheet).Rows.Cells(2, 4).Value = "Oui, chef, on va écrire un joli sql"

Open filename For Output As #1

' Print #1, "INSERT INTO `partitions` (`numero`, `compositeur`, `titre`, `editeur`, `type`, `formation`, `epuise`, `image`, `path`, `arrangeur`, `sous_compositeurs_titres`, `prix`)"

' Print #1, " VALUES"

rowsWritten = 0

For i = firstInputRow To maxRows

field1$ = Trim$(Worksheets(sourceWorksheet).Rows.Cells(i, 1).Value) ' compositeur

field2$ = Trim$(Worksheets(sourceWorksheet).Rows.Cells(i, 2).Value) ' titre ou sous-compositeur

If field1$ = "" And field2$ <> "" Then ' this is a continuation of a previous entry

' remove the asterisk

If InStr(field2$, "*") = 1 Then field2$ = Right(field2$, Len(field2$) - 1)

' souscompositeur$ = souscompositeur$ + "<br />\r\n" + field2$

If souscompositeur$ = "" Then

souscompositeur$ = field2$

Else

souscompositeur$ = souscompositeur$ + "<br>" + field2$

End If

Else ' this is a new entry

' write out the previous entry

If compositeur$ <> "" Then ' exclude first (uninitialised) row

rowsWritten = rowsWritten + 1

'terminator$ = ","

'If field1$ = "" Then terminator$ = ";" ' last drink of the day

terminator$ = ";"

souscompositeur$ = Replace(souscompositeur$, "'", "\'")

' Print #1, "INSERT INTO `partitions` (`numero`, `compositeur`, `titre`, `editeur`, `type`, `formation`, `epuise`, `image`, `path`, `arrangeur`, `sous_compositeurs_titres`, `prix`)"

Print #1, "INSERT INTO `partitions` (`compositeur`, `titre`, `editeur`, `type`, `formation`, `epuise`, `image`, `path`, `arrangeur`, `sous_compositeurs_titres`, `prix`)"

Print #1, " VALUES"

' Print #1, "("; rowsWritten; ", '"; compositeur$; "', '"; titre$; "', '"; editeur$; "', "; type_$; ", '"; formation$; "', 0, '', '', '"; arrangeur$; "', '"; souscompositeur$; "', 0)"; terminator$

Print #1, "('"; compositeur$; "', '"; titre$; "', '"; editeur$; "', "; type_$; ", '"; formation$; "', 0, '"; Image$; "', '', '"; arrangeur$; "', '"; souscompositeur$; "', "; prix$; ")"; terminator$

End If

' gather information on the current entry

compositeur$ = Trim$(Worksheets(sourceWorksheet).Rows.Cells(i, colCompositeur).Value)

compositeur$ = Replace(compositeur$, "'", "\'")

titre$ = Trim$(Worksheets(sourceWorksheet).Rows.Cells(i, colTitre).Value)

titre$ = Replace(titre$, "'", "\'")

editeur$ = Trim$(Worksheets(sourceWorksheet).Rows.Cells(i, colEditeur).Value)

editeur$ = Replace(editeur$, "'", "\'")

categorie$ = Trim$(Worksheets(sourceWorksheet).Rows.Cells(i, colCategory).Value)

categorie$ = Replace(categorie$, "'", "\'")

type_$ = Trim$(Worksheets(sourceWorksheet).Rows.Cells(i, colType).Value)

formation$ = Trim$(Worksheets(sourceWorksheet).Rows.Cells(i, colFormation).Value)

formation$ = Replace(formation$, "'", "\'")

arrangeur$ = Trim$(Worksheets(sourceWorksheet).Rows.Cells(i, colArrangeur).Value)

arrangeur$ = Replace(arrangeur$, "'", "\'")

Image$ = Trim$(Worksheets(sourceWorksheet).Rows.Cells(i, colImage).Value)

Image$ = Replace(Image$, "'", "\'")

prix$ = Trim$(Worksheets(sourceWorksheet).Rows.Cells(i, colPrix).Value)

prix$ = Replace(prix$, ",", ".")

If Len(prix$) = 0 Then prix$ = "0"

souscompositeur$ = "" 'Trim$(Worksheets(sourceWorksheet).Rows.Cells(i, colSouscompositeurs).Value)

End If

Next i

Close #1

Debug.Print "Oh chef j'ai écrit"; rowsWritten; "lignes"

Worksheets(sourceWorksheet).Rows.Cells(2, 4).Value = "Chef j'ai écrit " + CStr(rowsWritten) + " lignes dans " + filename

End Sub

Function getCategoryNum(ByVal category As String) As Integer

' 0. harpe a pedales

If category = "Harpe Seule" Then

getCategoryNum = 0

' 1. harpe celtique

ElseIf category = "" Then

getCategoryNum = 1

' 2. ensemble de harpes

ElseIf category = "Plusieurs Harpes ou harpe(s)& piano(s)" Or category = "DEUX HARPES" Or category = "TROIS , QUATRE ... HARPES" Then

getCategoryNum = 2

' 3. duos

ElseIf category = "Flûte & Harpe" Or category = "Violon & Harpe" Or category = "Voix & harpe" Then

getCategoryNum = 3

' 4. trios

ElseIf category = "Trios & Quatuors" Then ' pas bien!

getCategoryNum = 3

' 5. quatuor

ElseIf category = "Alto,Violoncelle ou C.Basse &Harpe" Then

getCategoryNum = 4

' 6. quintettes

ElseIf category = "" Then

getCategoryNum = 5

' 7. ensembles

ElseIf category = "Vents & Harpe" Or category = "Divers Instruments & harpe" Or category = "Quintettes & Sextuors" Or category = "INSTRUMENTS A VENT ET HARPE OU CLAVECIN OU PIANO" Or category = "INSTRUMENTS A CORDES ET HARPE OU CLAVECIN OU PIANO" Or category = "PERCUSSIONS ET HARPE OU CLAVECIN OU PIANO" Then

getCategoryNum = 6

' 8 . methode

ElseIf category = "" Then

getCategoryNum = 7

' 9. concerto

ElseIf category = "Grandes Formations & Concertos" Or category = "PETITE ET GRANDE FORMATION" Then ' pas bien

getCategoryNum = 8

ElseIf category = "" Then

getCategoryNum = 9

Else

getCategoryNum = -1

End If

End Function

Y'a-t-il un moyen de faire aussi un retour à la ligne auto pour les textes trop longs (avec insertion de <br> ?

Re-,

je ne parlais pas du nombre de crevettes que le chef a mangées......

Si mes souvenirs sont bons, dans le premier fichier que tu avais joint, les données étaient "brut" de fonderie.....

Maintenant, le code que tu as fourni.....

Oui effectivement c'est le code pour le premier fichier, rien a voir avec le deuxième seulement si je pouvais inserer un retour à la ligne automatique, ça serait pratique mais bon c'est pas super important et avec le premier code que tu m'as suggeré, j'arriverais à adapter ça...

Pour les crevettes, un peu de fantaisie dans les codes, ça fait pas de mal hein ? En vrai, celui qui m'a aidé pour ce code m'avais donné le choix entre ça ou des escargots, je trouvais plus digestes les crevettes.

Re-

si tu essaies mon code, tu verras que les retours à la ligne sont automatiques dans la colonne B

Mets ce code dans un fichier vierge, assures-toi que le fichier source est ouvert

"Harpeseuleoupasseule.xls"

et fais un essai, et reviens pour les bugs qui pourraient survenir

PS : Attention au nom de l'onglet, ici appelé Feuil1

.Sheets("Feuil1").Copy Before:=Sheets(1) 

Salut Alesque,

Je ne t'avais pas oublié mais comme Felix a proposé quelque chose, inutile de mettre une solution identique.

A+ sur d'autres fils

Dan

Rechercher des sujets similaires à "supprimer lignes cellulles vides"