Fonction utilisant une autre feuille
Bonjour,
Le post que voici est le seul que j'aie trouvé mettant le doigt sur mon problème. J'ai appliqué l'idée de tangjuncn, mais ça ne fonctionne toujours pas.
Sur la feuille "Occupations" j'ai un planning à parcourir ligne par ligne (nb variables de lignes, colonnes fixes).
Sur la feuille "Chantiers", j'aimerais insérer des calculs style RECHERCHE().
Vu que je dois combiner RECHERCHE(), SI(), SOMME() et planning dynamique, le VBA me paraît plus efficace.
Dans un module, je place le code d'un bouton situé sur la feuille "Chantiers" (là où les valeurs calculées doivent apparaître):
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| Sub BtnMAJNbHommes_Clic()
Dim No As Integer
Dim Cat As String
Dim MaPlage As Range
Dim Cellule As Range
Set MaPlage = Worksheets("Chantiers").Range("F2:J52")
For Each Cellule In MaPlage
No = Cells(Cellule.Row, 1)
Cat = Cells(1, Cellule.Column)
Cellule.Value = NbOuvriersDansCatParChantier(No, Cat)
Next Cellule
End Sub |
Dans un autre module, je précise la fonction utilisée plus haut:
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
| Function NbOuvriersDansCatParChantier(NoChantier As Integer, Categorie As String) As Integer
Dim compterOuvriers As Integer
Dim i As Integer
Dim cell As Range
Dim LigneOuvrier As Range
compterOuvriers = 0
Set LigneOuvrier = Nothing
For i = 3 To 40
Set LigneOuvrier = Worksheets("Occupations").Range(Cells(i, 1), Cells(i, 370))
If LigneOuvrier(1, 1).Value = "x" And LigneOuvrier(1, 2) = Categorie Then
For Each cell In LigneOuvrier.Cells
If cell.Value = NoChantier Then
compterOuvriers = 1 + compterOuvriers
End If
Next cell
End If
Set LigneOuvrier = Nothing
Next i
NbOuvriersDansCatParChantier = compterOuvriers
End Function |
La fonction NbOuvriersDansCatParChantier fonctionne très bien dans la feuille "Occupations", mais pas dans les autres feuilles, même en prenant des constantes comme arguments plutôt que des références de cellules.
Où est mon erreur ?
Merci d'avance de votre aide.
PS: Excel 2007
Fonction faisant intervenir plusieurs feuilles
Merci Krovax pour ta réponse.
Ben je pense que le fond du problème était le même que celui d'Evariste, mais il est vrai que le réflexe est de lire le code par exemple dès le début, donc j'y veillerai la prochaine fois.
J'ai partiellement résolu le problème en changeant la dernière boucle, comme tu le conseillais:
Code:
1 2 3 4 5 6 7 8 9 10
| For i = 3 To 40
If Sheets("Occupations").Cells(i, 1).Value = "x" And Sheets("Occupations").Cells(i, 2) = Categorie Then
For Each cell In Range(Sheets("Occupations").Cells(i, 1), Sheets("Occupations").Cells(i, 370))
If cell.Value = NoChantier Then
compterOuvriers = 1 + compterOuvriers
End If
Next cell
End If
Set LigneOuvrier = Nothing
Next i |
Ca fonctionne, mais c'est très lent (utilisation des 2 processeurs etc), mais ça, c'est un autre problème.