Bonjour,
Voici ton 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
|
Sub rentabilité()
Dim rdt As Double
Dim k As Long
Dim j As Long
Dim i As Long
Dim count As Long
Dim cells As Variant
k = Sheets.count
rdt = 0
count = 2
cells = 0
For i = 2 To k
Sheets(i).Activate
For Each cells In columns(8)
If cells.Value = "" Then
count = count + 1
End If
Next cells
Range("I2").Value = count
For j = 1 To Range("Recap!I2").Value
If Range("E" & j).Value <> 0 Then
rdt = CDbl((Range("E" & j + 2).Value - Range("E" & j + 1).Value) / Range("E" & j + 1).Value)
Else
rdt = 0
End If
Range("H" & j + 2).Value = rdt
Next j
Next i
End Sub |
1. Nom réservé :
Come on te l'a déjà dit précédemment, Cells est un nom réservé en VBA. Tu ne peux pas l'utiliser comme nom de variables. Dorénavant, dans la suite de mon message, je remplacerai tous tes "Cells" par "cel".
2. Déclaration des variables et objets : http://silkyroad.developpez.com/VBA/LesVariables/
Tu veux faire une boucle sur des cellules :
For Each cel In columns(8)
mais tu ne déclares pas cel en tant que cellule. Il y a un type d'objet pour les cellules : Range
cel est une cellule et plus loin tu écris or 0 est un entier. Dans la "vraie vie", c'est comme si tu disais, "je pose la banane égale à 0", ça ne veut rien dire 
Petite remarque au passage : tu n'as pas besoin "d'intialiser" une variable avant une boucle, si c'est ce que tu voulais faire avec cel = 0.
D'autre part, d'après ce que je comprends de ton code, tu n'as pas besoin non plus d'initialiser ta variable rdt.
3. Select et Activate
Evite au maximum d'utiliser Select et Activate. Précise-le plutôt à chaque fois que tu veux travailler dans une feuille en particulier. Tu peux utiliser le bloc With...End With, si tu dois travailler longtemps sur la même feuille.
N'écris pas
1 2
| Sheets(i).Activate
Range("A1").Value = "toto" |
Mais
1 2 3 4 5
| Sheets(i).Range("A1").Value = "toto"
'ou
With Sheets(i)
.Range("A1").Value = "toto"
End With |
4. Boucle for sur une colonne
For Each cel In columns(8)
Veux-tu vraiment faire une boucle sur toutes les cellules d'une colonne? Et pour regarder si elles sont vides? Connais-tu la fonction NB.SI en Excel? Tu peux trouver l'équivalent en VBA, avec : Application.CountIf
5. Feuilles sélectionnées
Ton code :
1 2
| Range("I2").Value = count
For j = 1 To Range("Recap!I2").Value |
Est-ce que, par hasard, tu veux que dans la cellule I2 de la feuille Recap, il y ait la valeur "count"? Si c'est le cas : fais attention à la feuille Active, tu n'écris pas count dans la feuille Recap ici, mais dans la feuille Sheets(i) que tu as activée plus haut.
Mais, pourquoi passes-tu par une cellule? Pourquoi n'utilises-tu pas count directement dans ta boucle For?
Partager