VBA Supprimer Ligne

Bonjours a tous, ceci est le premier post sur le forum, mais je pense venir plus souvent pour mieux comprendre le vba.

J'ai donc des fichiers excel à traiter chacun possédants environ 1 millier de lignes.

Dance ce genre.

Et moi il faut que je nettoie ce genre de tableaux. Il faut que je regarde les lignes ayant un rtmed proche environ 0,001 et pour celles étant dans cette intervalle, il faut que je compare la moyenne du reste des colonnes sur la droite et que je ne garde que celle ayant la plus grande moyenne.

Donc avec un collègue nous avons un peu travaillé sur une macro mais maintenant nous somme bloqués, donc actuellement j'ai ca :

Sub Tri()

Dim RtmedAct As Double
Dim RtmedSuiv As Double
Dim Interval As Double
Dim k As Integer
Dim Avg As Integer

Interval = 0.001

Sheets("diffreport").Select

Dim RTMED(600, 1) As Double
For Col = 2 To 600
    RTMED(Col, 0) = Range("C" & Col).Value
    RTMED(Col, 1) = Range("S" & Col).Value
Next Col

Dim Comp(600, 1) As Double
For Col = 2 To 600
    Comp(Col, 0) = 0
    Comp(Col, 1) = 0
Next Col

For i = 0 To 600

RtmedAct = RTMED(i, 0)
k = 1
    For j = 0 To 600

        RtmedSuiv = RTMED(j, 0)
        Comp(0, 0) = i

        If RtmedSuiv < (RtmedAct + Interval) And RtmedSuiv > (RtmedAct - Interval) Then

           Comp(k, 0) = j
           Comp(k, 1) = Range("S" & j + 2)
            k = k + 1
        End If

    Next j

    For j = 0 To k - 1

        Avg = Comp(0, 0)

        If Comp(j, 1) > Comp(Avg, 1) Then

            Avg = Comp(j, 0)

        End If

    Next j

    For j = 0 To k - 1
        If Comp(j, 0) <> Avg Then
            Dim S As Integer
            S = CInt(Comp(j, 0))
            Sheets(Worksheets.Count).Range(S & ":" & S).ClearContents

            'Rows("A" & S & ":ZZ" & S).ClearContents
            'Rows(S).ClearContents

           'Selection.Delete Shift:=xlUp

        End If

    Next j

    For l = 0 To k
        Comp(l, 0) = 0
        Comp(l, 1) = 0
    Next l

Next i

End Sub

Mais quand je lance j'ai un probleme sur cette ligne Sheets(Worksheets.Count).Range(S & ":" & S).ClearContents qui ne veux pas effacer les lignes. Je n'ai pas commenté le code mais je peux le faire si quelqu'un le souhaite. J'ai une erreur du type 1004 Erreur définie par l'application ou par l'objet.

J'ai appris le vba aujourd'hui sur le tas, soyez donc indulgents ! Merci d'avance !

Edit Dan : supprimé Besoin d'aide dans titre du sujet

Bonjour

En admettant que S vaut 14 ,tu marques (en simplifiant) efface la zone 14 ?????

Soit tu notes la ligne complète

Sheets(Worksheets.Count).Rows(S).Clearcontents

Soit une zone

Sheets(Worksheets.Count).Range("A" & s & ":ZZ" & S).Clearcontents

Un fichier serait plus utile si tu veux de l'aide

Merci pour cette réponse rapide, donc voici mon fichier pour regarder

La fonction pièce jointe ne fonctionne pas donc voici le lien ovh.

Mais dans les deux cas je n'arrive pas à faire fonctionner cette commande.

Bonsoir

J'ai essayé de comprendre ta logique : Pas sur d'y être arrivé

Voici comme je vois ce programme, j'y ai mis des commentaires pour que tu essaies de suivre ma logique

Si pas ça tu jettes tout

Birdroun Nettoyage V001.zip

Merci pour ta réponse. Je suis impréssioné par ce que tu as fait, c'est presque parfait.

La variable Avg sert a prendre la ligne de la moyenne la plus grande de l'ensemble des lignes qui sont dans l'intervalle.

Et ensuite il faut que je rajoute une boucle qui supprime les lignes vides.

Je regarde ton code pour essayer de tout comprendre mais dans l'ensemble c'est impréssionant ! Merci !

Je me suis peut etre mal exprimé. La variable Avg était pour pour prendre le numero de la ligne avec la moyenne la plus grande. Et ensuite on supprime les lignes autres que celle qui est dans Avg.

Bonsoir

Birdroun a écrit :

La variable Avg sert a prendre la ligne de la moyenne la plus grande de l'ensemble des lignes qui sont dans l'intervalle.

C'est ce que j'avais compris et que j'ai essayé de faire

Birdroun a écrit :

Et ensuite il faut que je rajoute une boucle qui supprime les lignes vides.

Dès que l'on compare 2 moyennes dans 2 lignes du groupe la moyenne la plus faible est éliminée

La ligne de la feuille Excel est effacée et la valeur dans le tableau RTMED est mis à 0

Mais quand je regarde les moyennes a la main, ce n'est pas la plus grande qui reste et je ne comprend pas d'ou cela vient.

Par exemple dans le cas de rtmed = 5.20885 la moyenne la plus grande correspond à 181670, soit la ligne avec un mzmed de 225,09 mais la macro me garde la ligne avec mzmed de 211,09. Mais dans pour d'autres lignes le script fonctionne bien.

En tout cas merci déjà pour tout ce que vous avez fait !

Bonjour

Tu fais bien de vérifier

Une erreur de variable J à la place de L

Remplaces la partie surlignée

          If RtmedSuiv < (RtmedAct + Interval) And RtmedSuiv > (RtmedAct - Interval) Then
          ' on note La ligne et sa moyenne
            Indice = Indice + 1
            Comp(Indice, 0) = L             ' Numéro de la ligne dans le tableau
            Comp(Indice, 1) = RTMED(L, 1)   ' Moyenne
          End If

Ce qui permet de voir que la meilleure moyenne est 3 520 371,79150639 à la ligne 8

Vérifies encore

Effectivement c'est parfait maintenant. Je vais essayer de bien mieux apprendre le vba sous excel, car quand on a beaucoup de données a traiter c'est juste parfait. En tout cas merci pour ce travail, j'aurais appris beaucoup et je vais essayer de trouver un bouquin et voir les tutos du site pour me perfectionner !

Merci beaucoup !

Rechercher des sujets similaires à "vba supprimer ligne"