Condition If dans une variable

Bonsoir

j'aimerais savoir si c'est possible de mettre une condition if dans une variable, exemple:

Dim MaVar As String
If Range("B2").value = "DouzeMois" then
MaVar="If Not IsEmpty(.Cells(j, 7))"
Else
MaVar="If Not IsEmpty(.Cells(j, 7)) And Month(.Cells(j, 1)) = Range("B2").value Then"
Endif

puis comment l'appeler dans une boucle Whuile loop.

merci par d'avance

bonsoir,

pour moi il manque de l'information...

@ bientôt

LouReeD

Bonsoir

voici une partie de mon code pour être plus clair

With Feuil2
        Do While Not IsEmpty(.Cells(j, 4))
                  If Not IsEmpty(.Cells(j, 7)) Then
                    xVal = Application.Match(.Cells(j, 7), xVect, 0)
                    Idx = (xVal * 3) - 1
                    xArr(i, 1) = .Cells(j, 4).Value
                    xArr(i, Idx) = .Cells(j, 8).Value
                    xArr(i, Idx + 1) = .Cells(j, 9).Value
                    xArr(i, Idx + 2) = .Cells(j, 6).Value
                    i = i + 1
           End If
               j = j + 1
        Loop
End With

j'aimerais que la condition if juste après le do while doit être mise dans la variable MaVar comme ceci

Dim MaVar As String
If Range("B2").value = "DouzeMois" then
MaVar="If Not IsEmpty(.Cells(j, 7))"
Else
MaVar="If Not IsEmpty(.Cells(j, 7)) And Month(.Cells(j, 1)) = Range("B2").value Then"
Endif

Est-ce que c'est clair ?

Je ne pense pas qu'il soit possible de mettre en variable un morceau de code afin de modifier un test.

Par contre il est possible de faire des tests multiple et ainsi se retrouver avec les différents cas de figure voulu.
Un essai de code :

With Feuil2
    Do While Not IsEmpty(.Cells(j, 4))
        If Range("B2").Value = "DouzeMois" And Not IsEmpty(.Cells(j, 7)) Then
            xVal = Application.Match(.Cells(j, 7), xVect, 0)
            Idx = (xVal * 3) - 1
            xArr(i, 1) = .Cells(j, 4).Value
            xArr(i, Idx) = .Cells(j, 8).Value
            xArr(i, Idx + 1) = .Cells(j, 9).Value
            xArr(i, Idx + 2) = .Cells(j, 6).Value
            i = i + 1
            End If
            j = j + 1
        ElseIf Not IsEmpty(.Cells(j, 7)) And Month(.Cells(j, 1)) = Range("B2").Value Then
            xVal = Application.Match(.Cells(j, 7), xVect, 0)
            Idx = (xVal * 3) - 1
            xArr(i, 1) = .Cells(j, 4).Value
            xArr(i, Idx) = .Cells(j, 8).Value
            xArr(i, Idx + 1) = .Cells(j, 9).Value
            xArr(i, Idx + 2) = .Cells(j, 6).Value
            i = i + 1
            End If
            j = j + 1
        End If
    Loop
End With

@ bientôt

LouReeD

Bonsoir à tous 🙂

Peut-être avec Evaluate.

klin89

Bonjour et merci à vous deux

enfin j'ai opté pour la réponse de LouReeD

Bonjour,

Comme sous-entendu par @LooReed, on peut vérifier des conditions. On peut mettre le résultat de ces conditions dans des variables qu'on appelle booléennes (VRAI/FAUX), mais il faut bien comprendre qu'un booléen n'a que 2 états possibles, vrai ou faux, et donc il ne peut pas etre utilisé pour plus de 2 cas. Or a priori vous voulez vérifier 3 conditions donc il faudrait à minima 2 variables booléennes.

Cependant, en faisant une petite analyse logique on peut un peu simplifier ce schmilblick.

Votre code :

Dim MaVar As String
If Range("B2").value = "DouzeMois" then
MaVar="If Not IsEmpty(.Cells(j, 7))"
Else
MaVar="If Not IsEmpty(.Cells(j, 7)) And Month(.Cells(j, 1)) = Range("B2").value Then"
Endif

Déjà dans les 2 cas vous voulez vérifier que .Cells(j,7) n'est pas vide. Puisque c'est vérifié dans les 2 cas c'est redondant, et ça devrait etre vérifié d'abord.
On aurait plutot :

Déjà dans les 2 cas vous voulez vérifier que .Cells(j,7) n'est pas vide. Puisque c'est vérifié dans les 2 cas c'est redondant, et ça devrait être vérifié d'abord. On n'a au final que 2 conditions : soit B2 est "DouzeMois", soit B2 est un numéro de mois. D'après le code de @LooReed vous effectuez le meme calcul dans les 2 cas, donc on peut simplifier ainsi :

 Dim MaCondition As Boolean

 If Not IsEmpty(.Cells(j, 7)) Then
  If (Range("B2").value = Month(.Cells(j, 1))) Or (Range("B2").value = "DouzeMois) Then
    MaCondition = True
  Else
    MaCondition = False
  End If
 End If

  With Feuil2
    Do While Not IsEmpty(.Cells(j, 4))
      If MaCondition Then
        xVal = Application.Match(.Cells(j, 7), xVect, 0)
        Idx = (xVal * 3) - 1
        xArr(i, 1) = .Cells(j, 4).Value
        xArr(i, Idx) = .Cells(j, 8).Value
        xArr(i, Idx + 1) = .Cells(j, 9).Value
        xArr(i, Idx + 2) = .Cells(j, 6).Value
        i = i + 1
      End If
      j = j + 1
    Loop
  End With

Bonjour tous le monde

merci merci beaucoup saboh12617

avec une variable booléen est une bonne solution je n'ai pas pensé à ça vraiment c'est bien merci

dorénavant je vais utilisé cette technique dans mes procedures.

Merci pour votre retour, bonne journée.

Rechercher des sujets similaires à "condition variable"