1 pièce(s) jointe(s)
Syntaxe variables avec CountIf
Bonjour le forum,
Je viens solliciter votre aide.
Mon classeur Excel est organisé de la manière suivante:
- Colonne 1: Nom des tâches
- Colonne 2: Date de début
- Colonne 3: Date de fin
- Colonne 4 : Code permettant de différencier les différentes tâches.
Mon but c'est d'ajouter des valeurs aux colonnes 2 et 3 de mes tâches en fonction du code qu'elles contiennent (colonne 4).
Je suis donc parti sur un Userform dans lequel je définis dans un Textbox la valeur que je souhaite ajouter à mes colonnes. Ci-dessous mon code
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| Private Sub CommandButton3_Click() 'Bouton Valider
Dim S As Integer, derLig As Integer, i As Integer, f As Worksheet, a As Integer, b As Integer
'modif_duree
If TextBox1 = "" Then
Exit Sub
End If
Set f = Sheets("Feuil1")
With f
DerniereLigne = Feuil1.Range("A300").End(xlUp).Address
L = Range(DerniereLigne).Row
'Compte le nombre total de tâches avec le code Super
For i = 2 To L
S = WorksheetFunction.CountIf(.Range(.Cells(2, 4), .Cells(i, 4)), "Super")
Next i
'Ajout des valeurs
For i = 2 To L
'Condition uniquement pour la première ligne de Super
If S = 1 Then
.Cells(i, 3) = .Cells(i, 3) + ((1 / (S * 3)) * Val(TextBox1))
'Condition sur toutes les autres ligne de Super (de la 2èeme à la dernière)
ElseIf S > 1 Then
.Cells(i, 2) = .Cells(i, 2) + ((a - 1 / (S * 3)) * Val(TextBox1))
.Cells(i, 3) = .Cells(i, 3) + ((a / (S * 3)) * Val(TextBox1))
End If
Next i
End With
Set f = Nothing
TextBox1 = ""
repartition.Hide
End Sub |
Le principe est le suivant:
1 - Compter le nombre total de tâches (ou lignes) portant le code Super dans la colonne 4
2 - Appliquer une première condition Uniquement sur la première tâche avec le code Super
2 - Appliquer une deuxième condition sur toutes les autres lignes (de la 2 ème à la dernière) portant le code Super.
La partie du code suivante me permet de déterminer à l'aide de la fonction CountIf le nombre total de lignes avec le code Super:
Code:
1 2 3 4 5 6
| 'Compte le nombre total de tâches avec le code Super
For i = 2 To L
S = WorksheetFunction.CountIf(.Range(.Cells(2, 4), .Cells(i, 4)), "Super")
Next i |
Mon problème vient dans la suite du code. Je n'arrive pas à trouver la bonne syntaxe pour définir ma variable a ni à appliquer les conditions Uniquement sur la première ligne de Super dans un premier temps puis sur toutes les autres lignes de Super dans un deuxième temps dans la partie suivante
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| For i = 2 To L
'Condition uniquement pour la première ligne de Super
If S = 1 Then
.Cells(i, 3) = .Cells(i, 3) + ((1 / (S * 3)) * Val(TextBox1))
'Condition sur toutes les autres ligne de Super (de la 2èeme à la dernière)
ElseIf S > 1 Then
.Cells(i, 2) = .Cells(i, 2) + ((a - 1 / (S * 3)) * Val(TextBox1))
.Cells(i, 3) = .Cells(i, 3) + ((a / (S * 3)) * Val(TextBox1))
End If
Next i |
Je voudrais ajouter dans la colonne 3 de la première ligne portant le code "Super" la valeur suivante:
Code:
+ ((1 / (S * 3)) * Val(TextBox1))
Avec S = le nombre total de ligne portant le code Super
Puis sur toutes les autres lignes toujours avec le code Super en colonne 4 (de la 2 ème à la dernière ligne), ajouter la valeur suivante:
-Dans la colonne 2 :
Code:
+ ((a - 1 / (S * 3)) * Val(TextBox1))
avec a -1 = le numéro de ligne Super précédent. Si on est à la troisième ligne de Super, a-1 = 2
-Dans la colonne 3 :
Code:
+ ((a / (S * 3)) * Val(TextBox1))
avec a = le numéro de ligne Super actuel Si on est à la troisième ligne de Super, a =3
Toujours avec S = le nombre total de lignes de Super.
Pouvez-vous m'orienter dans ma démarche?
Je vous remercie d'avance pour votre aide :) !
Ci-joint mon classeur Excel.