Problème de périmètre d'une fonction

  • Initiateur de la discussion Initiateur de la discussion Teocitron
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

T

Teocitron

Guest
Bonjour,

J'ai le code suivant dans un module :

Function FxCs(col1 As Integer, col2 As Integer, b As Integer)
Application.Volatile True
Dim i As Integer
Dim a As Integer
Dim c As Integer
c = 0
For i = col1 To col2 - 1
If Cells(b, i + 1).Value = Cells(b, i).Value _
And Cells(b, i).Value <> "" Then
a = a + 1
Else
a = 0
End If

If a = 4 Then
c = c + 1
a = 0
i = i + 1
End If
Next
If c <> 0 Then
GoTo sortie
End If
FxCs = 0
Exit Function
sortie: FxCs = c
End Function

Sub FxCs2()
Call FxCs(1, 18, 2)
End Sub

Ce code a pour objectif de compter le nombre de fois (sur une page ligne définie) au 5 valeurs sont consécutives.

J'appelle la fonctionne comme suit : = FxCs(3;33;LIGNE())
3;33 est ma plage :
3 = commence à compter à partir de la 3eme colonne en partant de la gauche
33 = commence à compter à partir de la 33eme colonne en partant de la gauche

Ce code fonctionne très bien pour mon 1er onglet, mais dès que je mets ma formule dans d'autres onglets de mon classeur Excel, les résultats retournés sont faux. J'ai l'impression que la fonction calcule sur tous les onglets 🙁(

Aussi, je voudrais que lorsque je l'appelle (ie : FxCs(3;33;LIGNE())) cela ne calcule que sur les cellules de l'onglet dans lequel la fonction est appelée. Ceci afin de pouvoir faire mes calculs onglet / onglet sans interrraction entre eux.

En remerciant d'avance tout ceux qui pourront m'aider.
 
Salut,

Passes en paramètre la feuille sur laquelle tu veux le résultat

Function FxCs(NomF$,col1 As Integer, col2 As Integer, b As Integer)
Application.Volatile True
Dim i As Integer
Dim a As Integer
Dim c As Integer
c = 0
For i = col1 To col2 - 1
with worksheets(NomF)
If .Cells(b, i + 1).Value = .Cells(b, i).Value _
And .Cells(b, i).Value <> "" Then
a = a + 1
Else

...

tu l'appelles ainsi FxCs("Feuil1";3;33;LIGNE())


A+++
 
Re,

désolé j'ai oublié de te mettre le end with

with worksheets(NomF)
If .Cells(b, i + 1).Value = .Cells(b, i).Value _
And .Cells(b, i).Value <> "" Then
a = a + 1
end with '<= ici

A+++

Il faut que tu changes aussi le passage de paramètre de Fxcs2 tant que tu y es.

A+++
 
Merci.

J'ai fait comme tu dis mais il me réponds "End With sans With" en surlignant le End With 🙁

Sous dessous le code entier correspondant :

Function FxCs(NomF$, col1 As Integer, col2 As Integer, b As Integer)
Application.Volatile True
Dim i As Integer
Dim a As Integer
Dim c As Integer
c = 0
For i = col1 To col2 - 1
With Worksheets(NomF)
If .Cells(b, i + 1).Value = .Cells(b, i).Value _
And .Cells(b, i).Value <> "" Then
a = a + 1
End With
Else

a = 0
End If

If a = 4 Then
c = c + 1
a = 0
i = i + 1
End If
Next
If c <> 0 Then
GoTo sortie
End If
FxCs = 0
Exit Function
sortie: FxCs = c
End Function

Sub FxCs2()
Call FxCs(NomF, 1, 18, 2)
End Sub

Merci
 
Re,

Arf je ne suis pas en forme le matin, je l'avais encore mal placé, cette fois j'ai même testé au cas où:

Function FxCs(NomF$, col1 As Integer, col2 As Integer, b As Integer)
Application.Volatile True
Dim i As Integer
Dim a As Integer
Dim c As Integer
c = 0
For i = col1 To col2 - 1
With Worksheets(NomF)
If .Cells(b, i + 1).Value = .Cells(b, i).Value _
And .Cells(b, i).Value <> "" Then
a = a + 1
Else
a = 0
End If
End With
If a = 4 Then
c = c + 1
a = 0
i = i + 1
End If
Next i
If c <> 0 Then
GoTo sortie
End If
FxCs = 0
Exit Function
sortie: FxCs = c
End Function

Sub FxCs2()
'Call ne retrounera aucun résultat dasn le cas d'une fonction, un message pour voir le résultat retourné
msgbox FxCs("Feuil1", 1, 18, 2)'Rappel il faut mettre le nom de la feuille
End Sub

A+++
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
5
Affichages
715
Réponses
4
Affichages
585
  • Question Question
Microsoft 365 Problème de date
Réponses
5
Affichages
269
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
1 K
Retour