Simplification de code

Bonjour à tous,

J'ai une petite question pour un code.

j'ai créé le code ci-dessous, et sur la partie "y=30 or y=32 or y=34 or y=36", est-ce qu'il existe une simplication car je dois aller jusque y=300 en sautant une colonne entre deux à chaque fois.

Avez-vous une solution ?

For y = 30 To 300
If y = 30 Or y = 32 Or y=34 Or y=36 Then
If WB.Cells(x, y) <> 0 Then
For j = Range("Tableau_jus").Row To Range("Tableau_jus").Row + 8 If WT.Cells(j, 1) = "" Then
WT.Cells(j, 1) = WB.Cells(4, y) WT.Cells(j, 3) = WB.Cells(x, y)
Exit For
End If
Next
End If
End If

Merci !

Cleiiim

Bonjour,

Un indice si vous voulez essayer de chercher par vous même. Cherchez le renvoi du reste d'une division par 2 égal à 0 via la fonction mod. Si le reste est égal à 0 alors le chiffre est pair, sinon il est impaire.

Donc il faut juste ajouter une condition sur y via le modulo, tester s'il renvoie 0, et le tour de passe passe est joué.

Je reste à dispo si vous avez besoin de plus d'aide.

Cdlt,

Merci pour ce retour

Je vais essayer ceci :)

Bonjour à tous les deux.

Autre piste encore plus simple : For y = 30 to 300 step 2

Pour le reste, je te laisse travailler.

Bonjour Optimix,

Solution on ne peut plus simple en effet, j'ai été bien trop loin ! J'avoue que le Step 2 est top. A voir s'il y a tout de même un traitement différentiel pour les nombres impaires.

Merci pour l'idée !

Cdlt,

Bonjour à tous les deux,

Alors j'ai opté pour le Step 2, nombre pair ou impair n'a pas d'importance pour mon fichier.

Par contre je n'ai pas réussi à regrouper les 2 boucles étant donné qu'après un "To" on ne peut rien ajouter.

Merci

For y = 71 To 86 Step 2
            If WB.Cells(x, y) <> 0 Then
                        For j = Range("Tableau_jus").Row To Range("Tableau_jus").Row + 8
                        If WT.Cells(j, 1) = "" Then
                            WT.Cells(j, 1) = WB.Cells(8, y)
                            WT.Cells(j, 3) = WB.Cells(x, y)
                        Exit For
                        End If
                        Next
            End If
        Next

        For y = 89 To 1211 Step 2
                If WB.Cells(x, y) <> 0 Then
                        For j = Range("Tableau_jus").Row To Range("Tableau_jus").Row + 8
                        If WT.Cells(j, 1) = "" Then
                            WT.Cells(j, 1) = WB.Cells(8, y)
                            WT.Cells(j, 3) = WB.Cells(x, y)
                        Exit For
                        End If
                        Next
                End If
        Next

Pour info, la boucle simple Macro2 donne exactement le même résultat que la double boucle Macro 1. Deux en un

Option Explicit

Sub Macro1()
    Dim y As Long

    For y = 71 To 86 Step 2
        Cells(y - 70, 1) = y - 70
    Next

    For y = 89 To 1211 Step 2
        Cells(y - 70, 1) = y - 70
    Next
End Sub

Sub Macro2()
    Dim y As Long

    For y = 71 To 1211 Step 2
        If y <> 87 Then Cells(y - 70, 2) = y - 70
    Next
End Sub

Effectivement, vu comme ça :)

J'ai donc ma boucle 2 en 1 qui fonctionne parfaitement !

For y = 71 To 1211 Step 2
            If WB.Cells(x, y) <> 0 Then
            If y <> 87 And y <> 88 Then
                        For j = Range("Tableau_jus").Row To Range("Tableau_jus").Row + 8
                        If WT.Cells(j, 1) = "" Then
                            WT.Cells(j, 1) = WB.Cells(8, y)
                            WT.Cells(j, 3) = WB.Cells(x, y)
                        Exit For
                        End If
                        Next
            End If
            End If
        Next

Merci !

Rechercher des sujets similaires à "simplification code"