Simplifier if... or...or...or

Bonjour,

Je voudrais savoir s'il est possible de simplifier ce code, dans le cas ou j'aurais 2000 conditions dans mon if, ce serait pratique de ne pas devoir tout taper.

Voici mon code :

Sub test()
For i = 100 To 9 Step -1
    If Sheets(1).Cells(2, i).Value <> Sheets(2).Range("D4").Value And Sheets(1).Cells(2, i).Value <> Sheets(2).Range("D4").Value + 1 _
        And Sheets(1).Cells(2, i - 1).Value <> Sheets(2).Range("D4").Value And Sheets(1).Cells(2, i - 1).Value <> Sheets(2).Range("D4").Value + 1 _
        And Sheets(1).Cells(2, i - 2).Value <> Sheets(2).Range("D4").Value And Sheets(1).Cells(2, i - 2).Value <> Sheets(2).Range("D4").Value + 1 _
        And Sheets(1).Cells(2, i - 3).Value <> Sheets(2).Range("D4").Value And Sheets(1).Cells(2, i - 3).Value <> Sheets(2).Range("D4").Value + 1 _
        And Sheets(1).Cells(2, i - 4).Value <> Sheets(2).Range("D4").Value And Sheets(1).Cells(2, i - 4).Value <> Sheets(2).Range("D4").Value + 1 _
        And Sheets(1).Cells(2, i - 5).Value <> Sheets(2).Range("D4").Value And Sheets(1).Cells(2, i - 5).Value <> Sheets(2).Range("D4").Value + 1 _
        And Sheets(1).Cells(2, i - 6).Value <> Sheets(2).Range("D4").Value And Sheets(1).Cells(2, i - 6).Value <> Sheets(2).Range("D4").Value + 1 Then
        Sheets(1).Cells(2, i).EntireColumn.Delete shift:=xlUp
    End If
Next i
End Sub

Ce qu'il fait : pour chaque cellules de la colonne 9 à 100 de la feuille 1, si la cellule de la ligne 2 de la colonne concerné ainsi que celles de la ligne 2 des 6 colonnes précédentes ne sont pas égales à la cellule D4 de la feuille 2 ou à cette même cellule +1 alors on supprime la colonne concernés

j'aimerais donc savoir s'il est possible d'indiquer en une ligne de code : si la cellule ... et les 6 précédentes sont différentes de ... alors blablabla.

Si qqun peut m'aider ca serait super sympa

Cela fonctionne-t-il pour toi ?

Sub test()
Dim i As Integer, j As Integer, ok As Boolean

For i = 100 To 9 Step -1
    ok = True
    For j = 0 To 6
        If Sheets(1).Cells(2, i - j).Value = Sheets(2).Range("D4").Value _
        Or Sheets(1).Cells(2, i - j).Value = Sheets(2).Range("D4").Value + 1 Then
            ok = False
            Exit For
        End If
    Next j
    If ok = True Then Sheets(1).Cells(2, i).EntireColumn.Delete shift:=xlUp
Next i

End Sub

Bonjour,

Presque pareil que Limace Hurlante, mais quelques petites différences tout de même !

Sub test()
    Dim a, b, i%, j%
    a = Worksheets(2).Range("D4")
    b = a + 1
    With Worksheets(1)
        For i = 100 To 9 Step -1
            For j = 0 To 6
                If .Cells(2, i - j) = a Or .Cells(2, i - j) = b Then Exit For
            Next j
            If j > 6 Then .Columns(i).Delete
        Next i
    End With
End Sub

Cordialement.

edit : NON ! pas pareil, la condition est interprétée différemment.... ?

C'est moi qui l'ai prise à l'envers, c'est rectifié (je crois )

Merci beaucoup à vous deux, ça m'aide !

Néanmoins j'utilise quelques fois ce genre de solution mais j'ai parfois des imbrications interminables de for.. if... for...if...

Peut être n'existe-t-il pas de solution à mon problème mais en tout cas il y a de petites choses qui m'aident auxquelles je n'avais pas pensé dans votre code, merci beaucoup.

Je laisse le sujet ouvert encore un peu au cas ou qqun aurait d'autres idées que les votres.

MFerrand a écrit :

Bonjour,

Presque pareil que Limace Hurlante, mais quelques petites différences tout de même !

nt.... ?

Hurlantre.....pas Hurlante !

Bonjour Mferrand,

En effet ta solution est plus jolie.

En revanche si la condition n'est pas respectée alors que j = 6, est_ce que ça fonctionne ?

ne faudrait-t-il pas mettre

If j <= 7 Then .Columns(i).Delete

Hurlantre.....pas Hurlante !

Oh !

Limace Hurlantre a écrit :

Bonjour Mferrand,

En effet ta solution est plus jolie.

En revanche si la condition n'est pas respectée alors que j = 6, est_ce que ça fonctionne ?

ne faudrait-t-il pas mettre

If j <= 7 Then .Columns(i).Delete

Tu me fais douter... mais je ne pense pas ! je me suis aligné sur ta formulation de condition après avoir vu que je l'interprétais à l'envers, et donc comme toi, si on interrompt la boucle j on ne supprime pas, et sit on va au bout on supprime. Et si on est allé au bout, j=7.

Et si on est allé au bout, j=7.

Ah oui ! Au temps pour moi !! Pardon !

Bonjour,

mais j'ai parfois des imbrications interminables de for.. if... for...if...

Pour simplifier cette partie il faudrait plus d'explication.

Est-ce que tu compares toujours avec une série de valeurs fixes, de différences constantes, d'appartenance à un encadrement etc.

Le principe étant de mettre ou de calculer ces valeurs dans un tableau par une boucle, une autre boucle faisant la comparaison.

eric

Bonjour,

Mon problème varie suivant les macros, il me faudrait trop longtemps pour tout expliquer et chaque cas est différent, je vais donc m'en tenir la pour l'instant, peut être que j'y reviendrai dans un futur sujet !

Merci quand même de ton aide !

Rechercher des sujets similaires à "simplifier"