Supprimer ligne si somme = 1

Bonjour à tous,

mon fichier possède plusieurs milliers de lignes, sur certaines une erreur est présente: la ligne est vide sauf en AH.

j'aimerais supprimer les lignes avec un 1 dans AH et vide à côté. c'est à dire faire un test du style:

si la somme des cellules sur la ligne égale 1 alors la supprimer

merci

oza

21exemple.zip (36.53 Ko)

Bonjour,

Sur une ligne "bonne", les colonnes AG et AI peuvent-elles être vide ? Sinon plutôt que de t'embêter à faire la somme sur tout une ligne, il te suffit de tester tes deux colonnes et si AH = 1 et les deux autres = "" alors on efface la ligne.

Ce qui donnerait un truc du genre :

Sub Test()

Dim i As Long

i = 1

Do While Range("AH" & i) <> ""
    If Range("AG" & i) = "" And Range("AI" & i) = "" Then
        Rows(i).EntireRow.Delete
        i = i - 1
    End If
    i = i + 1
Loop

End Sub

Après si t'es colonnes peuvent être vide, il te suffit de remplacer les colonnes de test par celles qui auront forcement une valeur sur un enregistrement valide.

Cordialement.

Bonjour Zirak,

merci pour ta réponse malheureusement quand j'exécute la macro rien ne se passe..

Cordialement

oza

Re, cela marche très bien chez moi

Ton fichier joins avec cette macro et un bouton associé pour exemple.

50exemple.zip (37.83 Ko)

si en AG, AH et AI j'ai des formules cela peut il poser problème dans l'exécution de la macro?

ton bouton est un contrôle de formulaire n'est ce pas?

Oui le bouton est un contrôle de formulaire, mais cela marche aussi avec un bouton de contrôle Active X, cela ne change rien, ou même sans bouton il suffit de l'associer à un autre évènement.

Sur AH non, car de toutes façons la macro parcours ton fichier tant que AH n'est pas vide, histoire d'alle jusqu'à la dernière ligne (sauf si tes formules vont jusqu'à la toute dernière ligne du fichier ?).

pour AG et AI, eh bien comme je l'ai dis dans le message précédent :

soit tu les remplaces par des colonnes qui sont totalement vide lors d'un enregistrement raté

soit au lieu de tester si les cellules sont vides, tu peux tester si elles sont à la valeur indiqué par ta formule lors d'un enregistrement raté.

Mais dans ce cas la, même si le pourcentage de chance que ca arrive est infini-décimale, si jamais un jour tes formules pour une ligne juste te donne les mêmes valeurs que lors d'un enregistrement raté, tu risques d'effacer ta ligne, mais bon, pour avoir 2 formules qui tombent pile poil sur les deux résultats à éviter sur la même ligne, y'a peu de chance que cela arrive, mais dans le doute, j'emploirais la 1ère solution pour ma part, et je testerais des cellules sans formules.

Bonjour à tous,

@Zirak

Pourquoi mettre le code dans le code de la Feuil1 Le mieux ici est de le mettre dans un module.

Sinon, une solution plus optimisée à tester :

Sub SuppLignCrit()
    Dim derlign As Long

    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    derlign = Cells.Find("*", , , , xlByRows, xlPrevious).Row

    Columns("a:a").Insert
    With Range("a2:a" & derlign)
        .FormulaR1C1 = "=IF(COUNT(RC2:RC35)=1,1,0)"
        .Value = .Value
        .CurrentRegion.Sort [a2], 1, Header:=1
        .Replace "1", "", 2
        On Error Resume Next
        .SpecialCells(xlCellTypeBlanks).EntireRow.Delete
        .EntireColumn.Delete
    End With
    Application.Calculation = xlCalculationAutomatic
End Sub

C'est mon petit coté flemmard parfois, surtout dans un fichier qui n'est pas celui définitif, vu que je fais tout ça pendant mon temps de travail, j'avoue que souvent, pour gagner du temps => click droit , visualiser le code et je test lol

C'est sur que cela prend 30s de plus à ajouter un module mais bon, au final le code fonctionne quand même.

Après c'est vrai que ce n'est pas le plus pédagogique pour les autres.

Rechercher des sujets similaires à "supprimer ligne somme"