VBA compteur pour avoir un ratio

Résolu/Fermé
ratikuss Messages postés 2004 Date d'inscription vendredi 8 juin 2007 Statut Membre Dernière intervention 14 décembre 2016 - 30 avril 2010 à 10:34
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 30 avril 2010 à 11:41
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.

A voir également:

2 réponses

chossette9 Messages postés 4239 Date d'inscription lundi 20 avril 2009 Statut Contributeur Dernière intervention 12 septembre 2014 1 306
30 avril 2010 à 11:18
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
ratikuss Messages postés 2004 Date d'inscription vendredi 8 juin 2007 Statut Membre Dernière intervention 14 décembre 2016 262
30 avril 2010 à 11:27
=) 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
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
30 avril 2010 à 11:41
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
chossette9 Messages postés 4239 Date d'inscription lundi 20 avril 2009 Statut Contributeur Dernière intervention 12 septembre 2014 1 306
30 avril 2010 à 10:37
Bonjour,

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


donnera un meilleur résultat je pense.

Cordialement.
0
ratikuss Messages postés 2004 Date d'inscription vendredi 8 juin 2007 Statut Membre Dernière intervention 14 décembre 2016 262
30 avril 2010 à 10:40
non, toujours égal à zéro =/
0
ratikuss Messages postés 2004 Date d'inscription vendredi 8 juin 2007 Statut Membre Dernière intervention 14 décembre 2016 262
30 avril 2010 à 10:42
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
chossette9 Messages postés 4239 Date d'inscription lundi 20 avril 2009 Statut Contributeur Dernière intervention 12 septembre 2014 1 306
Modifié par chossette9 le 30/04/2010 à 10:49
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
ratikuss Messages postés 2004 Date d'inscription vendredi 8 juin 2007 Statut Membre Dernière intervention 14 décembre 2016 262
30 avril 2010 à 10:57
J'ai mis range.value aussi à toute, mais non marche toujours pas en effet.
0