Problème avec formule IF VBA excel

[Résolu]
Signaler
Messages postés
360
Date d'inscription
dimanche 3 décembre 2006
Statut
Membre
Dernière intervention
3 janvier 2012
-
Messages postés
360
Date d'inscription
dimanche 3 décembre 2006
Statut
Membre
Dernière intervention
3 janvier 2012
-
Bonjour à tous,

J'aurais besoin d'aide pour inserer cette formule excel que j'ai fais dans un script VBA.

Voici la formule: =SI(D12<0.899,"INF",SI(D12>0.96,"SUP",SI(D12<=0.899,"90à92",SI(D12<0.9299,"90à92",SI(D12<=0.93,"92à9
5",SI(D12<=0.959,"92à95","")))))).

Je voudrais l'inserer dans le script:

Dim i As Integer, DerL As Integer, r As Integer, Opid As String


DerL = Sheets(2).Cells(Rows.Count, 3).End(xlUp).Row


For i = 2 To DerL

Opid = Sheets(2).Cells(i, 3).Text

Set C = Sheets(1).Range("A:A").Find(what:=Opid, lookat:=xlWhole)

If Not C Is Nothing Then

r = C.Row

Sheets(2).Cells(i, 5) = Sheets(1).Cells(r, 2)

Sheets(2).Cells(i, 6) = Sheets(1).Cells(r, 3)
Sheets(2).Cells(i, 10) = LA VALEUR DE LA FOURMULE PLUS HAUT

Sheets(2).Cells(i, 12) = Sheets(1).Cells(r, 4)

Else

'MsgBox Opid & " n'existe pas dans la feuille Employés"

End If

Next i


MsgBox "Terminé"

End Sub

Comment faire svp?

Merci de votre aide

4 réponses

Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
Voici comment tu pourrais inscrire la formule dans la cellule:

Sheets(2).Cells(i, 10).Formula =  "IF(D12<0.899,"INF",IF(D12>0.96,"SUP",IF(D12<=0.899,"90à92",IF(D12<0.9299,"90à92",SI(D12<=0.93,"92à9
5",IF(D12<=0.959,"92à95",""))))))"

En utilisant Formula plutôt que FormulaLocal, le programme pourra rouler sur des machines configurées en français ou en anglais. Il faut, par contre, coder la formule en anglais.

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
Messages postés
3877
Date d'inscription
mardi 19 mars 2002
Statut
Membre
Dernière intervention
23 août 2018
19
J'ai fait 3 tests:
le premier avec 4 boucles comme tu l'écris   : 7 à 7.5 secondes
le deuxième avec une seule boucle et un Select Case mieux ordonné   : 5.5 à 6 sec.
le troisième avec la formule   : 0.05 à 0.15 sec  <ICI
Messages postés
360
Date d'inscription
dimanche 3 décembre 2006
Statut
Membre
Dernière intervention
3 janvier 2012
3
Je sais pas si ça serais plus rapide de la façon du ta l'a fais ou bien de cette façon ci:

Dim lgLig As Long
   
    For lgLig = 12 To Range("D" & Cells.Rows.Count).End(xlUp).Row
        If Range("D" & lgLig) >= 0 Then
            Range("J" & lgLig) = "INF"
        End If
    Next lgLig
   
   
    For lgLig = 12 To Range("D" & Cells.Rows.Count).End(xlUp).Row
        If Range("D" & lgLig) >= 0.9 Then
            Range("J" & lgLig) = "90à92"
        End If
    Next lgLig
   
   
    For lgLig = 12 To Range("D" & Cells.Rows.Count).End(xlUp).Row
        If Range("D" & lgLig) >= 0.93 Then
            Range("J" & lgLig) = "93à95"
        End If
    Next lgLig
   
   
     For lgLig = 12 To Range("D" & Cells.Rows.Count).End(xlUp).Row
        If Range("D" & lgLig) >= 0.96 Then
            Range("J" & lgLig) = "SUP"
        End If
    Next lgLig
   
   
  
Messages postés
360
Date d'inscription
dimanche 3 décembre 2006
Statut
Membre
Dernière intervention
3 janvier 2012
3
Merci MPi, bonne différence en temps, c'est vrai 

J'y vais avec

3e test
    Dim nbLignes As Long
    Dim Durée As Single
   
    Durée = Timer
   
    nbLignes = Cells(Rows.Count, "D").End(xlUp).Row
   
   
Range("J1:J" & nbLignes).Formula =
"=IF(D12<0.899,""INF"",IF(D12>0.96,""SUP"",IF(D12<=0.899,""90à92"",IF(D12<0.9299,""90à92"",IF(D12<=0.93,""92à9
5"",IF(D12<=0.959,""92à95"",""""))))))"
    MsgBox Format(Timer - Durée, "0.00") & " secondes"