Traduire la formule =SI ET en VBA

Bonjour bonjour,

Débutant en VBA je cherche simplement à coder cette formule :

F3 =SI(ET(K3="Etat";G3="non");"Libre";SI(OU(K3=0;K3="PV";K3="EVI");"Non libre"

J'ai essayé plusieurs combinaisons de boucles avec conditions For Each / If And / If Or mais je n'arrive à rien de concluant.

Si quelqu'un auvait la gentillesse de m'aiguiller vers un tuto simple ou un morceau de code commenté s'il vous plaît, ce serait chouette !

Bonjour,

Placer ce code dans la feuille désirée (en VBE) ...

Attention > c'est sensible à la casse ...

Un essai ...

Private Sub Worksheet_Change(ByVal Target As Range)

    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, Range("K3,G3")) Is Nothing Then

        'F3 =SI(ET(K3="Etat";G3="non");"Libre";SI(OU(K3=0;K3="PV";K3="EVI");"Non libre"

        If Range("K3") = "Etat" And Range("G3") = "non" Then
            Range("F3") = "Libre"
        ElseIf Range("K3") = 0 Or Range("K3") = "PV" Or Range("K3") = "EVI" Then
            Range("F3") = "Non libre"
        End If
    End If
End Sub

ric

Merci Ric, la deuxième partie du code me parle bien.

Cependant je ne comprend pas bien la première partie... Un petit commentaire sur ces lignes serait-il envisageable s'il-vous-plait ?

Private Sub Worksheet_Change(ByVal Target As Range)

    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, Range("K3,G3")) Is Nothing Then

Aussi, mais c'est de ma faute, la traduction de la formule s'applique bien à la cellule F3. Cependant, je cherche à ce qu'elle s'applique à l'ensemble de la colonne F. Donc en lisant l'ensemble des colonnes K et G. D'où l'idée d'une boucle For Each que j'avais...

Bonjour,

Target = cellule sélectionnée

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Count > 1 Then Exit Sub >> si plus d'une cellule sélectionnée, arrêter la macro

If Not Intersect(Target, Range("K3,G3")) Is Nothing Then >> si cellule sélectionnée (target) est K3 ou G3 > > continuer la macro

ric

Bonjour DamNation, ric, le forum,

Heu....il ne manquerait pas une condition dans la formule

F3 =SI(ET(K3="Etat";G3="non");"Libre";SI(OU(K3=0;K3="PV";K3="EVI");"Non libre"))

??

=SI(ET(K3="Etat";G3="non");"Libre";SI(OU(K3=0;K3="PV";K3="EVI");"Non libre";""))

On peut écrire la formule en F3 et la tirer jusqu'à la dernière ligne ?

Sub test()
 Dim derlig As Long
  With Sheets("Feuil1")
   derlig = .Range("E" & Rows.Count).End(xlUp).Row 'dernière ligne en colonne E
   .Range("F3").Formula = "=IF(AND(K3=""Etat"",G3=""non""),""Libre"",IF(OR(K3=0,K3=""PV"",K3=""EVI""),""Non libre"",""""))"
   .Range("F3:F" & derlig).FillDown
  End With
End Sub
9classeur1.xlsm (20.54 Ko)

Mais peut-être suis-je hors sujet, ??


Cordialement,

Bonjour xorsankukai, tu as vu juste, et vraiment merci beaucoup d'avoir pris le temps de faire un fichier et tout !

Alors le coup de la formule étirée fonctionne bien, je te remercie.

Par curiosité, est-ce que l’équivalent avec une boucle For fonctionnerait ? Un exemple ?

Re,

Merci pour ton retour,

Par curiosité, est-ce que l’équivalent avec une boucle For fonctionnerait ? Un exemple ?

A tester...

Option Compare Text

Sub test()
 Dim derlig As Long
  With Sheets("Feuil1")
   derlig = .Range("E" & Rows.Count).End(xlUp).Row 'dernière ligne en colonne E
    For i = 3 To derlig
      .Range("F" & i) = IIf(.Range("K" & i) = "Etat" And .Range("G" & i) = "non", "Libre", IIf(.Range("K" & i) = 0 Or .Range("K" & i) = "PV" Or .Range("K" & i) = "EVI", "Non libre", ""))
    Next i
  End With
End Sub
6classeur2.xlsm (20.49 Ko)

J'ai rajouté Option compare Text pour ne pas tenir compte de la casse...(Non,NON, non, Etat, ETAT, etat, etc....)

Cordialement,

Rechercher des sujets similaires à "traduire formule vba"