Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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

  • Initiateur de la discussion Teocitron
  • Date de début
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.
 
Z

Zon

Guest
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+++
 
T

Teocitron

Guest
Merci pour ton aide.

Ma fonction plante maintenant, je joins le screenshot de l'erreur.

Merci

PS : en fait, c'est un ami qui m'avait donné cet fonction... moi je ne sais pas trop programmer (
 

Pièces jointes

  • Screenshot.zip
    11.8 KB · Affichages: 25
  • Screenshot.zip
    11.8 KB · Affichages: 25
  • Screenshot.zip
    11.8 KB · Affichages: 26
Z

Zon

Guest
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+++
 
T

Teocitron

Guest
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
 
Z

Zon

Guest
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+++
 

Discussions similaires

Réponses
19
Affichages
625
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…