Effacer lignes non numériques

Bonjour à tous les juillettistes

Ca fait trois plombes que je galère sur cette macro, qui est sensé supprimer les lignes qui ne sont pas numériques, c'est à dire donc les code ASCII n'est pas compris entre 47 et 56.

Mon programme efface toujours la 1ère ligne.

Quelqu'un peut-il me donner la bonne syntaxe dans mon code.

Merci d'avance

Novicevba45

https://www.excel-pratique.com/~files/doc2/Efface_lignes_numeriques_.xls

Edit Dan : modifié titre du sujet

Bonsoir,

Essaie ce code :

Sub test()
'Macro dan pour novicevba45 - XL pratique le 09/07/09
'http://www.excel-pratique.com/forum/viewtopic.php?t=12308
Dim i As Integer, dlg As Integer
dlg = ActiveSheet.Range("A65536").End(xlUp).Row
For i = 1 To dlg
'For Each cel In Range("A1:A" & dlg)
If Not IsNumeric(Range("A" & i)) Then
Rows(i).Delete
i = i - 1
End If
Next
End Sub

Amicalement

Dan

Bonsoir à tous,

Salut Dan

Sub SuprLigneTexte()
'Par Claude pour "novicevba45" le 9 juillet 09
    Dim Lg&, Plg
    Lg = Range("A65536").End(xlUp).Row
    Set Plg = Range("a1:a" & Lg).SpecialCells(xlTextValues, 2)
    Plg.EntireRow.Delete
End Sub

Bonne soirée

Claude.

re,

effectivement Claude, cela devrait aller plus vite ce code là.

Je mettrais toutefois :

Dim lg as integer (plutôt que &, c'est moins clair ces signes là...)

Dim Plg as range ( dim Plg est en variant dans ton code)

A bientôt

Dan

re,Dan,

Il faut ajouter un On Error Resume Next

au cas ou il n'y a pas de texte

Sub EffaceLigne()
'Par Claude pour "novicevba45" le 9 juillet 09
Dim Lg As Long, Plg As Range
    Lg = Range("A65536").End(xlUp).Row
On Error Resume Next
    Set Plg = Range("a1:a" & Lg).SpecialCells(xlTextValues, 2)
    Plg.EntireRow.Delete
On Error GoTo 0
End Sub

Je mets Lg as Long, ne connaissant pas le fichier réel

Tu as quelque chose contre les raccourcis des variables ? çà ralenti ?

Je prends toujours bonne note de tes remarques, merci Dan

à+.....Claude.

Bonsoir,

juste pour apporter mon (petit) avis...

Mettre les raccourcis de déclaration ne sert qu'au rédacteur...

Mais jamais à la clarté d'un code....

Montrer qu'on maitrise Excel, en usant (ou abusant) de ses possibilités, c'est bien...

Rendre un code indigeste, par excès de %, $, &........

Bref, n'apporte rien....

Mais je voulais juste le dire....

re,

Tu as quelque chose contre les raccourcis des variables ? çà ralenti ?

Non claude, cela ne ralentit pas.

Mais mêmes commentaires que Cousinhub.

Le "On Error GoTo 0 " ne sert pas ici puisque cela est suivi de END SUB (fin de macro)

Amicalement

Dan

bonjours à tous

Je vous remercie pour vos solutions bien meilleurs que ma proposition (on voie que vous êtes des pro).

toutefois il y a un petit probléme.

Quand les 2 premières lignes sont non-numériques, le programme efface "TOUT"

je vous joins le programme Original (listing du boulot) pour que vous puissiez faire le test.

Encore merci d'avance

https://www.excel-pratique.com/~files/doc2/Efface_lignes_inutiles_1_.xls

Bonjour,

Normal ! tu as remis ton ancien code

Claude.

édit: tu as raison, je cherche la raison

Reédit: tu n'as que tu texte dans ta colonne, normal qu'il efface tout !

Re,

Normal, puisque ton dernier post reprend un fichier qui n'a rien à voir avec le premier.

Tous les codes proposés ont été faits sur base de to premier fichier.

Amicalement

Dan

Edit : L'assistant DONNEES / CONVERTIR devrait te donner ce que tu veux obtenir. donc sans code. vois ce fil pour explications --> https://forum.excel-pratique.com/viewtopic.php?t=11520

Bonsoir à tous,

novicevba45, Je ne réponds pas aux messages privés,

d'ailleurs le problème reste le même, toute la colonne A est en texte,

donc les macros suppriment toutes les lignes.

Si j'ai bien compris,

il faudrait d'abord extraire les N° du début de phrase,

c'est une autre macro que je ne sais pas faire !

Amicalement

Claude.

Bonjour à tous,

J'ai quand même essayé, un panaché code Dan et Claude.

Sub ess()
Dim Lg As Long, i As Long, Cel As Range
Lg = Range("A65536").End(xlUp).Row
    Application.ScreenUpdating = False
Columns(2).Insert
    For Each Cel In Range("A1:A" & Lg)
        Cel.Offset(0, 1).FormulaR1C1 = "=LEFT(RC[-1],3) * 1"
        Cel.Offset(0, 1) = Cel.Offset(0, 1)
    Next Cel
    For i = 1 To Lg
        If Not IsNumeric(Range("b" & i)) Then
            Rows(i).Delete
            i = i - 1
        End If
    Next
Columns(2).Delete
End Sub

pas réussi à imbriquer les 2 boucles

Amicalement

Claude.

Salut à tous

Merci de votre réponse SUPER ça Marche.

De plus, vos deux méthodes m'ont permis de trouver une autre solutions par moi-même

la voici :

Sub Efface_lignes_Inutiles()

lign = 1

coln = 1

While Cells(lign, coln) <> ""

If Asc(Mid(Cells(lign, coln), 1, 1)) > 47 And _

Asc(Mid(Cells(lign, coln), 1, 1)) < 58 Then

Else

ActiveCell.EntireRow.Select

Rows(lign).Delete

lign = lign - 1

End If

lign = lign + 1

Wend

End Sub

Encore Merci, vous êtes des "Pros" super syma

Novicevba45

Rechercher des sujets similaires à "effacer lignes numeriques"