VBA compteur pour avoir un ratio

Résolu
ratikuss Messages postés 56 Date d'inscription   Statut Membre Dernière intervention   -  
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour à tous,

sur une feuille excel je dispose sur la colonne U des valeurs comme Préventif, Curatif, travaux neuf etc...

Je voudrais faire le ratio Curatif/Préventif , donc je me dirige vers le vba.

J'ai écris ceci mais il me retourne une valeur nulle

Sub Calcul_Ratio()

'declaration des variables
Dim x As Integer
Dim preventif As Integer
Dim curatif As Integer
Dim ratio As Currency
'fin declaration des variables


'on cherche la derniere cellule de la colonne U
Range("U65536").End(xlUp).Offset(1, 0).Select
x = ActiveCell.Row - 1
'fin
    
For i = 1 To x
        
    If Range("u" & x) = "Préventif" Then
        preventif = preventif + 1
    End If
    
    If Range("u" & x) = "Curatif" Then
        curatif = curatif + 1
    End If
    
Next i
    
   
   Range("Q7") = curatif / preventif
   
   
End Sub


Après divers tests, je pense que le soucis vient de l'incrémentation dans mes conditions.

Merci de votre aide.

2 réponses

  1. chossette9 Messages postés 6855 Date d'inscription   Statut Contributeur Dernière intervention   1 313
     
    Mais quel boulet je suis !!

    La simple erreur vient du fait de mettre
    Range("u" & x)
    au lieu de
    Range("u" & i)
    , tout simplement !!
    1
    1. ratikuss Messages postés 56 Date d'inscription   Statut Membre Dernière intervention   262
       
      =) on est deux boulets lol
      Merci beaucoup !
      j'ai perdu une matiné de boulot à cause de ça , grâce à toi je perdrais pas ma journée.
      Encore merci !
      0
    2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      Bonjour,

      Bien compliquées ces boucles et il n'est pas tenu compte du cas "aucun préventif (DIV/0)...

      derlig = Range("U65536").End(xlUp).Row
      Set zone = Range("U1:U" & derlig)
      
      nbre_prev = Application.CountIf(zone, "préventif")
      
      If nbre_prev > 0 Then
          Range("Q7") = Application.CountIf(zone, "curatif") / nbre_prev
      Else
          MsgBox " aucun préventif ", vbExclamation
          
      End If


      si cette macro vous intéresse, je vous laisse le soin des déclarations...

      nota:
      Value est la propriété par défaut de range; dans la plupart des cas, il n'est pas nécessaire de l'écrire
      0
  2. chossette9 Messages postés 6855 Date d'inscription   Statut Contributeur Dernière intervention   1 313
     
    Bonjour,

     Range("Q7").Value = curatif / preventif


    donnera un meilleur résultat je pense.

    Cordialement.
    0
    1. ratikuss Messages postés 56 Date d'inscription   Statut Membre Dernière intervention   262
       
      non, toujours égal à zéro =/
      0
    2. ratikuss Messages postés 56 Date d'inscription   Statut Membre Dernière intervention   262
       
      Si je met à la fin de mon code
         Range("Q5") = curatif
         Range("q6") = preventif

      il me retourne 0 pour curatif et 29 pour préventif (? c'est bizarre c'est la valeur de mon x)
      0
    3. chossette9 Messages postés 6855 Date d'inscription   Statut Contributeur Dernière intervention   1 313
       
      C'est le même principe sur les autres "Range", il faut écrire "Range.Value" sinon ça ne fonctionne pas.
      Edit : ça ne marche pas
      0
    4. ratikuss Messages postés 56 Date d'inscription   Statut Membre Dernière intervention   262
       
      J'ai mis range.value aussi à toute, mais non marche toujours pas en effet.
      0