Comparaison entre valeurs

Bonjour,

j'ai crée une application de calcul, son principe est simple , voici son programme

Private Sub CommandButton_valider_Click()

'calcul de perte de charge dues aux changements de sections

For i = 7 To 55

         If Cells(i + 1, 3) = "" Then
         Cells(i, 16) = ""
        
           ElseIf Cells(i, 7) = "" Then
           Cells(i, 16) = ""
           
           ElseIf Cells(i + 1, 7) = "" Then
           Cells(i, 16) = ""
           
           
           
           Else
                 If Cells(i, 7) = Cells(i + 1, 7) Then
                 Cells(i, 16) = 0
                 
                 Else
                 
                 If Cells(i, 7) < Cells(i + 1, 7) Then
                 ro = Cells(i, 11)
                 q1 = Cells(i, 9) / 3600000
                 v1 = (4 * q1) / (3.14 * ((Cells(i, 7) * 0.001) ^ 2))
                 [/download/telecharger-34078674-k1 k1] = (1 - ((Cells(i, 7) / Cells(i + 1, 7)) ^ 2)) ^ 2
                 
                 Else
                 ro = Cells(i + 1, 11)
                 q1 = Cells(i + 1, 9) / 3600000
                 v1 = (4 * q1) / (3.14 * ((Cells(i + 1, 7) * 0.001) ^ 2))
                 k1 = 0.5 * (1 - ((Cells(i + 1, 7) / Cells(i, 7)) ^ 2))
                End If
                
                 Cells(i, 16) = k1 * ro * (v1 ^ 2) * 0.5 * 0.001
                 
                 
                End If
                P_line_sing_total = Range("P7") + Range("P8") + Range("P9") + Range("P10") + Range("P11") + Range("P12") + Range("P13") + Range("P14") + Range("P15") + Range("P16") + Range("P17") + Range("P18") + Range("P19") + Range("P20") + Range("P21") + Range("P22") + Range("P23") + Range("P24") + Range("P25") + Range("P26") + Range("P27") + Range("P28") + Range("P29") + Range("P30") + Range("P31") + Range("P32") + Range("P33") + Range("P34") + Range("P35") + Range("P36") + Range("P37") + Range("P38") + Range("P39") + Range("P40") + Range("P41") + Range("P42") + Range("P43") + Range("P44") + Range("P45") + Range("P46") + Range("P47") + Range("P48") + Range("P49") + Range("P50") + Range("P51")
                P_elar_retr_totale = Range("o7") + Range("o8") + Range("o9") + Range("o10") + Range("o11") + Range("o12") + Range("o13") + Range("o14") + Range("o15") + Range("o16") + Range("o17") + Range("o18") + Range("o19") + Range("o20") + Range("o21") + Range("o22") + Range("o23") + Range("o24") + Range("o25") + Range("o26") + Range("o27") + Range("o28") + Range("o29") + Range("o30") + Range("o31") + Range("o32") + Range("o33") + Range("o34") + Range("o35") + Range("o36") + Range("o37") + Range("o38") + Range("o39") + Range("o40") + Range("o41") + Range("o42") + Range("o43") + Range("o44") + Range("o45") + Range("o46") + Range("o47") + Range("o48") + Range("o49") + Range("o50") + Range("o51")

               End If
               If Cells(i, 3) = "reservoir" Then
                 ro = Cells(i + 1, 11)
                 q1 = Cells(i + 1, 9) / 3600000
                 v1 = (4 * q1) / (3.14 * ((Cells(i + 1, 7) * 0.001) ^ 2))
                 k1 = 0.5
                 Cells(i, 16) = k1 * ro * (v1 ^ 2) * 0.5 * 0.001
                 
              End If
              P_line_sing_total = Range("P7") + Range("P8") + Range("P9") + Range("P10") + Range("P11") + Range("P12") + Range("P13") + Range("P14") + Range("P15") + Range("P16") + Range("P17") + Range("P18") + Range("P19") + Range("P20") + Range("P21") + Range("P22") + Range("P23") + Range("P24") + Range("P25") + Range("P26") + Range("P27") + Range("P28") + Range("P29") + Range("P30") + Range("P31") + Range("P32") + Range("P33") + Range("P34") + Range("P35") + Range("P36") + Range("P37") + Range("P38") + Range("P39") + Range("P40") + Range("P41") + Range("P42") + Range("P43") + Range("P44") + Range("P45") + Range("P46") + Range("P47") + Range("P48") + Range("P49") + Range("P50") + Range("P51")
              P_elar_retr_totale = Range("o7") + Range("o8") + Range("o9") + Range("o10") + Range("o11") + Range("o12") + Range("o13") + Range("o14") + Range("o15") + Range("o16") + Range("o17") + Range("o18") + Range("o19") + Range("o20") + Range("o21") + Range("o22") + Range("o23") + Range("o24") + Range("o25") + Range("o26") + Range("o27") + Range("o28") + Range("o29") + Range("o30") + Range("o31") + Range("o32") + Range("o33") + Range("o34") + Range("o35") + Range("o36") + Range("o37") + Range("o38") + Range("o39") + Range("o40") + Range("o41") + Range("o42") + Range("o43") + Range("o44") + Range("o45") + Range("o46") + Range("o47") + Range("o48") + Range("o49") + Range("o50") + Range("o51")
              
              Range("u2") = P_line_sing_total + P_elar_retr_totale
             Next
             
             


End Sub

c calcul tre bien mais le probleme c dans ce code : 

Else
                 If Cells(i, 7) = Cells(i + 1, 7) Then
                 Cells(i, 16) = 0
                 
                 Else
                 
                 If Cells(i, 7) < Cells(i + 1, 7) Then
                 ro = Cells(i, 11)
                 q1 = Cells(i, 9) / 3600000
                 v1 = (4 * q1) / (3.14 * ((Cells(i, 7) * 0.001) ^ 2))
                 k1 = (1 - ((Cells(i, 7) / Cells(i + 1, 7)) ^ 2)) ^ 2
                 
                 Else
                 ro = Cells(i + 1, 11)
                 q1 = Cells(i + 1, 9) / 3600000
                 v1 = (4 * q1) / (3.14 * ((Cells(i + 1, 7) * 0.001) ^ 2))
                 k1 = 0.5 * (1 - ((Cells(i + 1, 7) / Cells(i, 7)) ^ 2))
                End If
                
                 Cells(i, 16) = k1 * ro * (v1 ^ 2) * 0.5 * 0.001
                 
                 
                End If


par exemple on dans cells(i,7) = 8 et cells(i+1,7)= 9 , lapplication calcul tres bien
mais des que cells(i,7) = 8 ET cells(i+1,7) prend la valeur =10 ou superieure l'application ne calcul pas correctement

diapre le programme puisque cells(i,7) = 8 ET cells(i+1,7)=10
alors cells(i,7) < cells(i+1,7)
donc elle doit executer le premier cas
If Cells(i, 7) < Cells(i + 1, 7) Then
                 ro = Cells(i, 11)
                 q1 = Cells(i, 9) / 3600000
                 v1 = (4 * q1) / (3.14 * ((Cells(i, 7) * 0.001) ^ 2))
                 k1 = (1 - ((Cells(i, 7) / Cells(i + 1, 7)) ^ 2)) ^ 2
sauf que dans ce cas elle execute le 2 eme cas 
Else
                 ro = Cells(i + 1, 11)
                 q1 = Cells(i + 1, 9) / 3600000
                 v1 = (4 * q1) / (3.14 * ((Cells(i + 1, 7) * 0.001) ^ 2))
                 k1 = 0.5 * (1 - ((Cells(i + 1, 7) / Cells(i, 7)) ^ 2))
                End If
                
                 Cells(i, 16) = k1 * ro * (v1 ^ 2) * 0.5 * 0.001


je le rappele celle fait juste pour cells(i+1,7) = ou > 10

merci de me repondre

EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.

4 réponses

  1. Bonjour blalaa, bonjour le forum,

    Un mélange de Else et de ElseIf abracadabrantesque... Essaie comme ça :
    Private Sub CommandButton_valider_Click()
    
    'calcul de perte de charge dues aux changements de sections
    
    For i = 7 To 55
        If Cells(i + 1, 3) = "" Then Cells(i, 16) = ""
        If Cells(i, 7) = "" Then Cells(i, 16) = ""
        If Cells(i + 1, 7) = "" Then Cells(i, 16) = ""
        If Cells(i, 7) = Cells(i + 1, 7) Then Cells(i, 16) = 0
        If Cells(i, 7) < Cells(i + 1, 7) Then
            ro = Cells(i, 11)
            q1 = Cells(i, 9) / 3600000
            v1 = (4 * q1) / (3.14 * ((Cells(i, 7) * 0.001) ^ 2))
            k1 = (1 - ((Cells(i, 7) / Cells(i + 1, 7)) ^ 2)) ^ 2
        Else
            ro = Cells(i + 1, 11)
            q1 = Cells(i + 1, 9) / 3600000
            v1 = (4 * q1) / (3.14 * ((Cells(i + 1, 7) * 0.001) ^ 2))
            k1 = 0.5 * (1 - ((Cells(i + 1, 7) / Cells(i, 7)) ^ 2))
        End If
        Cells(i, 16) = k1 * ro * (v1 ^ 2) * 0.5 * 0.001
        P_line_sing_total = Range("P7") + Range("P8") + Range("P9") + Range("P10") + Range("P11") + Range("P12") + Range("P13") + Range("P14") + Range("P15") + Range("P16") + Range("P17") + Range("P18") + Range("P19") + Range("P20") + Range("P21") + Range("P22") + Range("P23") + Range("P24") + Range("P25") + Range("P26") + Range("P27") + Range("P28") + Range("P29") + Range("P30") + Range("P31") + Range("P32") + Range("P33") + Range("P34") + Range("P35") + Range("P36") + Range("P37") + Range("P38") + Range("P39") + Range("P40") + Range("P41") + Range("P42") + Range("P43") + Range("P44") + Range("P45") + Range("P46") + Range("P47") + Range("P48") + Range("P49") + Range("P50") + Range("P51")
        P_elar_retr_totale = Range("o7") + Range("o8") + Range("o9") + Range("o10") + Range("o11") + Range("o12") + Range("o13") + Range("o14") + Range("o15") + Range("o16") + Range("o17") + Range("o18") + Range("o19") + Range("o20") + Range("o21") + Range("o22") + Range("o23") + Range("o24") + Range("o25") + Range("o26") + Range("o27") + Range("o28") + Range("o29") + Range("o30") + Range("o31") + Range("o32") + Range("o33") + Range("o34") + Range("o35") + Range("o36") + Range("o37") + Range("o38") + Range("o39") + Range("o40") + Range("o41") + Range("o42") + Range("o43") + Range("o44") + Range("o45") + Range("o46") + Range("o47") + Range("o48") + Range("o49") + Range("o50") + Range("o51")
        If Cells(i, 3) = "reservoir" Then
            ro = Cells(i + 1, 11)
            q1 = Cells(i + 1, 9) / 3600000
            v1 = (4 * q1) / (3.14 * ((Cells(i + 1, 7) * 0.001) ^ 2))
            k1 = 0.5
            Cells(i, 16) = k1 * ro * (v1 ^ 2) * 0.5 * 0.001
        End If
        P_line_sing_total = Range("P7") + Range("P8") + Range("P9") + Range("P10") + Range("P11") + Range("P12") + Range("P13") + Range("P14") + Range("P15") + Range("P16") + Range("P17") + Range("P18") + Range("P19") + Range("P20") + Range("P21") + Range("P22") + Range("P23") + Range("P24") + Range("P25") + Range("P26") + Range("P27") + Range("P28") + Range("P29") + Range("P30") + Range("P31") + Range("P32") + Range("P33") + Range("P34") + Range("P35") + Range("P36") + Range("P37") + Range("P38") + Range("P39") + Range("P40") + Range("P41") + Range("P42") + Range("P43") + Range("P44") + Range("P45") + Range("P46") + Range("P47") + Range("P48") + Range("P49") + Range("P50") + Range("P51")
        P_elar_retr_totale = Range("o7") + Range("o8") + Range("o9") + Range("o10") + Range("o11") + Range("o12") + Range("o13") + Range("o14") + Range("o15") + Range("o16") + Range("o17") + Range("o18") + Range("o19") + Range("o20") + Range("o21") + Range("o22") + Range("o23") + Range("o24") + Range("o25") + Range("o26") + Range("o27") + Range("o28") + Range("o29") + Range("o30") + Range("o31") + Range("o32") + Range("o33") + Range("o34") + Range("o35") + Range("o36") + Range("o37") + Range("o38") + Range("o39") + Range("o40") + Range("o41") + Range("o42") + Range("o43") + Range("o44") + Range("o45") + Range("o46") + Range("o47") + Range("o48") + Range("o49") + Range("o50") + Range("o51")
        Range("u2") = P_line_sing_total + P_elar_retr_totale
    Next
    End Sub

    1. bonjour

      merci pour ta reponse
      je viens de l'essayer et ca marche mm pas

      il detecte un probleme a :
      If Cells(i, 7) < Cells(i + 1, 7) Then
              ro = Cells(i, 11)
              q1 = Cells(i, 9) / 3600000 ???????????????????????????????????? ici 
              v1 = (4 * q1) / (3.14 * ((Cells(i, 7) * 0.001) ^ 2))
              k1 = (1 - ((Cells(i, 7) / Cells(i + 1, 7)) ^ 2)) ^ 2
  2. Re,

    Quel est le message d'erreur ?
    Quelle est la valeur de Cells(I, 9) quand ça plante ?
    1. au fait ca simule pas
      voici lerreur qui saffiche

      erreur d’exécution '13'
      incompatibilité du type

      pour la valeur cells(i,9) = 0,0000778

      sachant que la cells(i,9) est vide
      mais jai fait un programme pour ca
      If Cells(i, 3) = "reservoir" Then
      ro = Cells(i + 1, 11)
      q1 = Cells(i + 1, 9) / 3600000
      v1 = (4 * q1) / (3.14 * ((Cells(i + 1, 7) * 0.001) ^ 2))
      k1 = 0.5
      Cells(i, 16) = k1 * ro * (v1 ^ 2) * 0.5 * 0.001
      End If

      je crois pour changer ce que tu veux toi il faut tenir compte de ca aussi
    2. ce que jai fait est juste mais je ne comprend pas pour quoi quand ca depasse la valeur 10 le programme fonctionne MAL
  3. Je ne comprends pas. Quand ça plante :
    - Cells(I, 9) = 0,0000778 ?
    - Cells(I, 9) est vide ?

    Difficile de t'aider davantage sans fichier. Regarde du coté de : https://www.cjoint.com ou d'un quelconque autre hébergeur de fichier...
    1. cells(i,9) est vide
      mais doit prendre la valeur de 0,0000778

      en fait quand c le reservoir qui est dans la premier position, cells(i,9)=0 donc la valeur de q1 doit prendre cells(i+1,9)
      et la valeur de cells(i+1,9) = 0,0000778
      VOILA le tout
    2. le programme que jai mis ca fonctionne tres bien
      mais des que cells(i,7) ou cells(i+1,7) egale ou depasse la valeur 10 le programme fonctionne mal
      je ne comprend pas pour quoi ca le fait que >10 ????
      peut etre c dans le reglage et pas dans la programation ??
  4. Re,

    Peut-être avec :
    q1 = IIf(Cells(i, 9).Value=0, 0.0000778 / 3600000, Cells(i, 9) / 3600000)

    1. RE
      merci pour ta reponse
      c amarche tjrs pas

      mais jai trouve la solution

      au lieu que cells(i,7)=8 elle doit prendre 08
      le probleme c que le programme quand il compare 8 à 10 il calcul mal
      amors quand il compare 08 à 10 ca calcul tres bien
      je ne sais pas pour quoi

      peut etre tas une explication
      merci