begin process at 2012 02 17 01:50:04
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Visual Basic 6

 > 

Langages dérivés

 > 

VBA

 > 

Problème avec formule IF VBA excel


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Problème avec formule IF VBA excel

samedi 5 avril 2008 à 00:32:07 | Problème avec formule IF VBA excel

avyrex1926

Membre Club
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
samedi 5 avril 2008 à 04:09:29 | Re : Problème avec formule IF VBA excel

MPi

Réponse acceptée !
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

samedi 5 avril 2008 à 04:12:13 | Re : Problème avec formule IF VBA excel

avyrex1926

Membre Club
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
   
   
  
samedi 5 avril 2008 à 14:41:01 | Re : Problème avec formule IF VBA excel

MPi

Réponse acceptée !
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  <<and the winner is !!!

1er test (voir ton code...)

2e test (avec Select Case, mais aurait pu être des If...ElseIf...)
Sub Test2()
    Dim lgLig As Long
    Dim Durée As Single
   
    Durée = Timer
  
    For lgLig = 12 To Range("D" & Cells.Rows.Count).End(xlUp).Row
        Select Case Range("D" & lgLig)
            Case Is >= 0.96
                Range("J" & lgLig) = "SUP"
            Case Is >= 0.93
                Range("J" & lgLig) = "93à95"
            Case Is >= 0.9
                Range("J" & lgLig) = "90à92"
            Case Is >= 0
                Range("J" & lgLig) = "INF"
        End Select
    Next lgLig
   
    MsgBox Format(Timer - Durée, "0.00") & " secondes"
End Sub

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"

De plus, il y a plus de conditions dans la formule que dans le code...

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI

samedi 5 avril 2008 à 16:51:15 | Re : Problème avec formule IF VBA excel

avyrex1926

Membre Club
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"



Cette discussion est classée dans : cells, formule, sheets, if, opid


Répondre à ce message

Sujets en rapport avec ce message

Problème code pour modifier une ligne dans excel [ par eastpeople ] Bonjour,J'ai un problème sur ce code :Private Sub OK_Click()If choix_act = "" Then    erreur = MsgBox("Veuillez choisir une activité à modifier", vbOK boucle et collage sur pages différentes [ par jodeciters ] Bonjour,à la suite d'une boucle imbriquée du type de celle-ci:If Sheets("menu2").Cells(Ligmenu, 3).Value "" Then        If Sheets("menu2").Cells(Ligm Valeur des textbox selon 2 combobox [ par avyrex1926 ] Bonjour, J'ai un probleme avec une macro. Si j'entre une valeur dans mon ComboBox2 (liste de ma colonne B), il me donne des choix pour mon ComboBox3 vb excel insertion d'une formule dans une cellule [ par prochristos ] pouvez vous me dire ou cela cloche ? il s'agit d'inserer une formule de calcul dans une feuille excel dans laquelle i et j sont des variables entière incombatibilité de type [ par nitho ] Salut les gars j'ai une erreur je trouve pas :( [code=vb] oqp = Sheets(1).UsedRange.Address v = Split(oqp, "$") dernier = CInt(v(UBound(v))) tab_1 = Lien hypertexte dans listbox [ par bigben42 ] Bonjour, j'ai fait une userform sur laquelle se trouve une listbox qui se remplis de la manière suivante : [code=vb]For Each Cell In Sheets("Matrice") Formule Excel [ par mimalo13 ] Bonjour à tous, Je souhaiterais créer une formule VBA dans Excel qui ressemblerait à ceci. Malheureusement, n'étant expert en la matière, cette formu macro vba excel [ par sigma17 ] salut à tous,voici un code qui me permet de faire des tris dans une feuille et de récupérer les résultats pour les poster dans des cellules précises d pb formule sous excel [ par chefsun49 ] Bonjour, je ne suis pas devellopeur mais j'ai créés une formule dans excel le voici Private Sub Worksheet_Change(ByVal Target As Excel.Range) Dim nu Filtre sur colonne et copie [ par sellaction ] Bonjour, Débutant dans le domaine, je m'attelle à mettre en place une macro permettant de filtrer une cellule (AI1) et récupérer les valeurs des cel


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,139 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales