VBA : supprimer les lignes contenant des décimales

Aishina

XLDnaute Nouveau
Bonjour!
Je viens vers vous car je suis novice (très) en vba, mais que je souhaite faire une macro qui me ferait gagner beaucoup de temps, et je ne m'en sors pas...

Voilà le problème : je récupère des données enregistrées toutes les 0.002 secondes. Et comme j'enregistre pendant environ 2 minutes, j'obtiens des tableaux de plus de 80 000 lignes, ce que les graphiques excel ne savent pas gérer. De plus, j'ai besoin de comparer ces données avec un autre enregistrement qui lui n'enregistre qu'une fois par seconde.

J'ai donc deux colonnes, A qui contient le temps en secondes, et B qui contient des températures. Et je voudrais une macro qui supprime les lignes pour lesquelles la colonne A contient un chiffre décimal, soit quand A n'est pas une seconde "entière". (Je joins un petit exemple si besoin.)

Pour l'instant j'ai ce bout de code, mais il me renvoie une "erreur 13", je ne sais pas sur quelle partie...
Code:
Sub supprime_les_décimales()
Dim i As Long
Dim n As Long
n = 87025

For i = 2 To n
    If Cells(i, 1).Value - CInt(Cells(1, i).Value) > 0 Then
    Rows(i).EntireRow.Delete xlShiftUp
    Else
    End If
    
Next i
End Sub

Dans l'idéal je voudrais pouvoir l'utiliser sur tous mes enregistrements (plus d'une trentaine) donc j'aimerais éviter d'avoir à joindre le numéro de feuille qui est du type "525-12-160413100816" si possible (sinon tant pis, je ferais avec).

Une idée? :)
 

Pièces jointes

  • exemple.xlsx
    87.6 KB · Affichages: 52
  • exemple.xlsx
    87.6 KB · Affichages: 73

phlaurent55

Nous a quittés en 2020
Repose en paix
Re : VBA : supprimer les lignes contenant des décimales

Bonjour Aischina, et bienvenue sur le forum

pour la suppression, ce code
Code:
Sub Supprime()
Application.ScreenUpdating = False
    For i = Range("A" & Rows.Count).End(xlUp).Row To 2 Step -1
     If Cells(i, 1).Value <> CInt(Cells(i, 1).Value) Then Rows(i).EntireRow.Delete
    Next i
Application.ScreenUpdating = True
End Sub

à+
Philippe
 
Dernière édition:

phlaurent55

Nous a quittés en 2020
Repose en paix
Re : VBA : supprimer les lignes contenant des décimales

Re,

et pour que le code soit actif pour toutes les feuilles du classeur
Code:
Sub Supprime()
Application.ScreenUpdating = False
For j = 1 To Sheets.Count
Sheets(j).Select
    For i = Range("A" & Rows.Count).End(xlUp).Row To 2 Step -1
     If Cells(i, 1).Value <> CInt(Cells(i, 1).Value) Then Rows(i).EntireRow.Delete
    Next i
Next j
Application.ScreenUpdating = True
End Sub
à+
Philippe
 

Aishina

XLDnaute Nouveau
Re : VBA : supprimer les lignes contenant des décimales

J'ai testé sur une première acquisition courte (environ 6000 lignes), ça marche niquel, par contre quand je passe à une plus grandes (les fameuses 90 000 lignes), je fais planter excel visiblement...
Ou alors ça vient du screen uploading? Il charge, charge, charge mais ne finit jamais.
En tout cas merci de m'aider :)
 
Dernière modification par un modérateur:

Efgé

XLDnaute Barbatruc
Re : VBA : supprimer les lignes contenant des décimales

Bonjour à tous
J'en étais là:
VB:
Sub supp()
Dim I&, J&, X&, Col&
Dim Tdata As Variant, Rng As Range, Sh As Worksheet
Col = 2 'Nombre de colonnes du tableau
For Each Sh In ThisWorkbook.Worksheets
    X = 0
    With Sh
        Set Rng = .Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(3)(1, Col))
    End With
    Tdata = Rng
    For I = 2 To UBound(Tdata, 1)
        If Tdata(I, 1) = CInt(Tdata(I, 1)) Then
            X = X + 1
            For J = 1 To UBound(Tdata, 2)
                Tdata(X, J) = Tdata(I, J)
            Next J
        End If
    Next I
    With Rng
        .ClearContents
        If X > 0 Then .Resize(X, UBound(Tdata, 2)) = Tdata
    End With
Next Sh
        
End Sub
Ciordialement
 

Aishina

XLDnaute Nouveau
Re : VBA : supprimer les lignes contenant des décimales

Peut-être que j'avais simplement oublié de modifier quelque chose, je débute vraiment, donc ça peut venir d'une erreur de ma part...
En tout cas la seconde solution "tableau" fonctionne très bien, même sur les tableur plus grand!
Merci beaucoup :D
 

Efgé

XLDnaute Barbatruc
Re : VBA : supprimer les lignes contenant des décimales

RE
C'est le numéro de la ligne du tabeau VBA.
Celui ci commence déja en ligne 2 de la feuille.
VB:
Set Rng = .Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(3)(1, Col))
avec
VB:
.Cells(2, 1)
Cellule(ligne 2, Colonne 1)
Donc for i = 2 to fait commencer les vérifications en ligne 3 de la feuille.
Cordialement
 

Aishina

XLDnaute Nouveau
Re : VBA : supprimer les lignes contenant des décimales

@Efgé :
Effectivement, après vérification mes valeurs commençaient à 2s! J'ai modifié la ligne et je commence bien à 0 comme d'origine.
Je vais garder cette option du coup.

Merci à tous :)
 

Discussions similaires

Réponses
5
Affichages
166
Réponses
7
Affichages
319

Statistiques des forums

Discussions
312 084
Messages
2 085 194
Membres
102 811
dernier inscrit
caroline29260