Formule vers code VBA

Bonjour le forum,

Est-il possible de transformer cette formule

SIERREUR(SI.CONDITIONS(E30=1;(D30*E30);E31="";(""));"")

en code VBA enfin de pouvoir l'appliquer sur toute une plage (exemple de F30:F200) ?

Cordialement,

Nat,

Surement mais je comprend pas trop ta ligne

C'est quoi ta condition, ta valeur si vrai et valeur si faux exactement ?

Bonjour, à essayer

Sub melch()

For Each c In Range("F30:F200") ' changer la plage ici
    If c.Offset(0, -1) = 1 Then
        c.Value = c.Offset(0, -2) * c.Offset(0, -1)
    ElseIf c.Offset(0, -1) = "" Then
        c.Value = ""
    End If

Next

End Sub

Surement mais je comprend pas trop ta ligne

C'est quoi ta condition, ta valeur si vrai et valeur si faux exactement ?

Salut Xmastree14,

En gros

Si dans ma colonne E il apparaît un chiffre alors il apparait le résultat de la colonne D * colonne E dans la colonne F s'il n'y a rien dans la colonne E, il n'apparait rien dans la colonne F. C'est plus clair ?

Bonjour, à essayer

Sub melch()

For Each c In Range("F30:F200") ' changer la plage ici
    If c.Offset(0, -1) = 1 Then
        c.Value = c.Offset(0, -2) * c.Offset(0, -1)
    ElseIf c.Offset(0, -1) = "" Then
        c.Value = ""
    End If

Next

End Sub

Coucou Melch,

Je vais aller essayer tout ca, merci à toi

Mieux

Sub formule()

For i = 30 To 200
    If Range("E" & i) <> "" Then
    Range("F" & i) = Range("D" & i).Value * Range("E" & i).Value
    Else
    Range("E" & i) = ""
Next i

End Sub

Ca ça devrait marcher, je suis juste pas sur que les produits en vba s'écrivent avec "*" mais la boucle devrait convenir

Je vous répond à tous les deux,

Dans les deux cas les codes fonctionnent mais il manque la variable c pour Melch et i pour Xmastree14

Comment ça il manque la variable ?

Elle est définie directement avec le For i ... to ... ce qui correspond à ton numéro de ligne ?

Comment ça il manque la variable ?

Elle est définie directement avec le For i ... to ... ce qui correspond à ton numéro de ligne ?

Message d'erreur "variable non définie" et il vise "i" donc ne faudrait-il pas rajouter un Dim i "quelque chose" ?

Ben non normalement y'a pas besoin...

Envoies ton code ?

Essayes quand même si tu veux,

Il faudrait rajouter :

Dim i as integer

au dessus du For i 30 to 200

Bonjour à tous,

@Xmastree14: il manque un

end if
Sub formule()

 Dim i As Integer

Application.ScreenUpdating = False

For i = 30 To 200
  If Range("E" & i) <> "" Then
     Range("F" & i) = Range("D" & i).Value * Range("E" & i).Value
  Else
     Range("E" & i) = ""
  End If
Next i

Application.ScreenUpdating = True

End Sub

Sinon la macro de melch fait très bien le job

Sub melch()

Dim c As Range

  For Each c In Range("F30:F200") ' changer la plage ici
    If c.Offset(0, -1) <> "" Then
        c.Value = c.Offset(0, -2) * c.Offset(0, -1)
    ElseIf c.Offset(0, -1) = "" Then
        c.Value = ""
    End If
  Next c
End Sub
2classeur1.xlsm (21.67 Ko)

Cordialement,

Bonjour, tu dois avoir la ligne suivante quelque part :

Option Explicit

Celle ligne force la déclaration des variables. Dans ce cas, avant le for il faut mettre la ligne suivante :

Dim c ' pour mon code
Dim i ' pour le code de Xmas

Merci à tous les codes fonctionnent tous très bien mais je suis obligé d'appuyer à chaque fois sur "Exécuter Sub" pour appliquer la formule car il ne le fait pas automatiquement quand mes colonnes "D" et "E" sont remplies.

Nat,

Re,

A partir du code de melch....

A placer dans le module de la feuille....

Spoiler
capture
Private Sub Worksheet_Change(ByVal Target As Range)

  Dim c As Range

 If Not Application.Intersect(Target, Range("D30:E200")) Is Nothing Then
  For Each c In Range("F30:F200") ' changer la plage ici
    If c.Offset(0, -1) <> "" Then
        c.Value = c.Offset(0, -2) * c.Offset(0, -1)
    ElseIf c.Offset(0, -1) = "" Then
        c.Value = ""
    End If
  Next c
 End If
End Sub
3classeur1.xlsm (20.38 Ko)

Cordialement,

A bah ce n'était pas demandé :

voilà, à mettre dans le code de la feuille :

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Count = 1 And Not Intersect(Target, Range("D30:E200")) Is Nothing Then
    ligne = Target.Row
    If Cells(ligne, 4) <> "" And Cells(ligne, 5) <> "" Then
        Cells(ligne, 6) = Cells(ligne, 4) * Cells(ligne, 5)
    Else
        Cells(ligne, 6) = ""
    End If
End If

End Sub

Edit : Xorsankukai plus rapide

A bah ce n'était pas demandé :

voilà, à mettre dans le code de la feuille :

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Count = 1 And Not Intersect(Target, Range("D30:E200")) Is Nothing Then
    ligne = Target.Row
    If Cells(ligne, 4) <> "" And Cells(ligne, 5) <> "" Then
        Cells(ligne, 6) = Cells(ligne, 4) * Cells(ligne, 5)
    Else
        Cells(ligne, 6) = ""
    End If
End If

End Sub

Edit : Xorsankukai plus rapide

Merci bien Melch,

Je vais essayer ça sinon j'avais trouvé une variante en l'intégrant directement sur un bouton qui se trouve sur une autre feuille.

Effectivement avec Updating c'est plus rapide.

Merci.

Ok,

Un grand merci à tous !

Ca marche nickel !!

Rechercher des sujets similaires à "formule code vba"