Je viens vous demander de l'aide directement par ici en vous avouant ne pas avant cherché avant ni dans le forum ni ailleurs sur le web, tout simplement car je ne sais quoi ni où chercher.
Je rencontre un problème ( ce n'est pas un bug) avec une fonction créée (sur un fichier Excel qui doit rester tout le temps ouvert) qui s'exécute "aussi" lorsque j'exécute une macro, même si cette dernière se trouve sur un autre fichier...
Voici la fonction créée dans un module :
VB:
Option Explicit
Function SOMMECOULEUR(cellules As Range)
Application.Volatile
Dim total As Double
Dim cellule As Range
For Each cellule In cellules
If Application.Caller.Interior.Color = cellule.Interior.Color Then
total = total + cellule
End If
Next
SOMMECOULEUR = total
End Function
Si je créée une macro X et que je la teste (avecF8), à un moment dans une de mes lignes d'exécution, je me retrouve dans le module où se trouve le code ci-dessus. Etant donné qu'il y a un "Loop" celle-ci tourne à l'infini (autant de fois que j'appuierai sur F8).
Mais si j'appuie sur F5, ma Macro X fini par s'exécuter "normalement"
Merci d'avance à la personne qui voudra bien et saura m'apporter une aide.
PS: Pour info, le code ci dessus m'aide à faire des sommes selon la couleur des cellules d'une feuille Excel.
Je viens vous demander de l'aide directement par ici en vous avouant ne pas avant cherché avant ni dans le forum ni ailleurs sur le web, tout simplement car je ne sais quoi ni où chercher.
Je rencontre un problème ( ce n'est pas un bug) avec une fonction créée (sur un fichier Excel qui doit rester tout le temps ouvert) qui s'exécute "aussi" lorsque j'exécute une macro, même si cette dernière se trouve sur un autre fichier...
Voici la fonction créée dans un module :
VB:
Option Explicit
Function SOMMECOULEUR(cellules As Range)
Application.Volatile
Dim total As Double
Dim cellule As Range
For Each cellule In cellules
If Application.Caller.Interior.Color = cellule.Interior.Color Then
total = total + cellule
End If
Next
SOMMECOULEUR = total
End Function
Si je créée une macro X et que je la teste (avecF8), à un moment dans une de mes lignes d'exécution, je me retrouve dans le module où se trouve le code ci-dessus. Etant donné qu'il y a un "Loop" celle-ci tourne à l'infini (autant de fois que j'appuierai sur F8).
Mais si j'appuie sur F5, ma Macro X fini par s'exécuter "normalement"
Merci d'avance à la personne qui voudra bien et saura m'apporter une aide.
PS: Pour info, le code ci dessus m'aide à faire des sommes selon la couleur des cellules d'une feuille Excel.
Tout d'abord, merci de prendre le temps de m'aider.
Je ne comprends pas trop ta question, mais vais essayer de te répondre.
La fonction (ci-dessus) est enregistrée dans un Module qui intervient automatiquement dans chaque onglet du fichier où la fonction SOMMECOULEUR est appelée (Celle-ci fonctionne correctement, selon mon besoin). Ce fichier, reste ouvert tout le temps.
Quand je parle de Macro X, je veux dire par là qu'il s'agit de n'importe quelle macro se trouvant dans n'importe quel fichier, qui s'active le plus souvent par le biais "classique" : exécution de la macro X en affectant cette macro à un bouton (par exemple).
La Macro X va également s'exécuter sans problèmes.
Mon soucis se présente lorsque je suis en pleine création d'une nouvelle macro, et que j'utilise la touche F8 pour les besoins de tests (exécution étape par étape). Eh bien là, il arrive toujours un moment où je suis renvoyé vers ma fonction SOMMECOULEUR (qui est donc sur le fameux fichier qui doit rester toujours ouvert) et là le "loop" tourne à l'infini. C'est frustrant pour les tests.
J'espère que cette description complète mieux mon premier post, et merci encore de ton aide.
[Pour infos]
Pour que ta fonction SOMMECOULEUR soit disponible dans tous tes classeurs, tu peux la stocker dans le classeur de macros personnelles (nommé Perso.xlsb)
[Pour infos]
Pour que ta fonction SOMMECOULEUR soit disponible dans tous tes classeurs, tu peux la stocker dans le classeur de macros personnelles (nommé Perso.xlsb)
Bonjour Staple,
Merci de ton retour.
Je vois et je crois que je n'ai pas été assez dans les détails dans mes explications... Désolé.
La fonction SOMECOULEUR fonctionne sur un classeur et je n'ai besoin qu'il ne fonctionne QUE pour ce classeur.
Et mon soucis est là justement, c'est qu'il s'active aussi lorsque j'exécute une quelconque Macro à partir d'un autre classeur.
Bonjour,
Une proposition : définir la fonction comme Private puis, dans le fichier l'appeler avec Application.Run.
Ainsi, elle ne sera pas "vue" par les autres classeurs.
VB:
Private Function SOMMECOULEUR(cellules As Range)
Application.Volatile
Dim total As Double
Dim cellule As Range
For Each cellule In cellules
If Application.Caller.Interior.Color = cellule.Interior.Color Then
total = total + cellule
End If
Next
SOMMECOULEUR = total
End Function
puis, lors de chaque appel à la fonction SOMMECOULEUR
Bonjour,
Une proposition : définir la fonction comme Private puis, dans le fichier l'appeler avec Application.Run.
Ainsi, elle ne sera pas "vue" par les autres classeurs.
VB:
Private Function SOMMECOULEUR(cellules As Range)
Application.Volatile
Dim total As Double
Dim cellule As Range
For Each cellule In cellules
If Application.Caller.Interior.Color = cellule.Interior.Color Then
total = total + cellule
End If
Next
SOMMECOULEUR = total
End Function
puis, lors de chaque appel à la fonction SOMMECOULEUR
Merci Gégé,
Je ne suis pas trop calé non plus en VB alors quelques questions me viennent:
- Est-ce que je retire le "Option Explicit" ?
- Où dois-je saisir le code : Application.Run ?
MC
Merci Gégé,
Je ne suis pas trop calé non plus en VB alors quelques questions me viennent:
- Est-ce que je retire le "Option Explicit" ?
- Où dois-je saisir le code : Application.Run ?
MC
Je crois que j'ai compris
Je vais tester, et si je ne reviens pas c'est que tout est bon !
Merci infiniment encore une fois à tous ceux qui sont intervenus