Microsoft 365 Ma fonction VBA s'exécute avec toutes mes Macros

MACx

XLDnaute Occasionnel
Bonjour à vous,

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.
 

Gégé-45550

XLDnaute Accro
Bonjour à vous,

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.
Bonjour,
il manque un info :
- comment (par quelle macro) et à quel moment cette fonction est-elle appelée ?
Cordialement,
 

MACx

XLDnaute Occasionnel
Bonjour,
il manque un info :
- comment (par quelle macro) et à quel moment cette fonction est-elle appelée ?
Cordialement,
Bonjour Gégé,

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.
 

MACx

XLDnaute Occasionnel
Bonjour @MACx, @Gégé-45550 , le fil

[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)

Voir explications ici (par exemple)

Cela évitera peut-être la survenue du problème décrit.
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.
 

Gégé-45550

XLDnaute Accro
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
VB:
Application.Run "SOMMECOULEUR"
Cordialement,
 

MACx

XLDnaute Occasionnel
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
VB:
Application.Run "SOMMECOULEUR"
Cordialement,
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
 

Gégé-45550

XLDnaute Accro
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
re
  • Le Option Explicit n'a rien à voir, il permet juste de garantir que, dans tout le code, l'ensemble des variables utilisées sont bien déclarées.
  • Partout dans le code où il est fait appel à la fonction "SOMMECOULEUR". Par exemple, si une ligne de code contient
VB:
x=toto + SOMMECOULEUR
on la remplacera par
Code:
toto + Application.run "SOMMECOULEUR"
Cordialement,
 

MACx

XLDnaute Occasionnel
re
  • Le Option Explicit n'a rien à voir, il permet juste de garantir que, dans tout le code, l'ensemble des variables utilisées sont bien déclarées.
  • Partout dans le code où il est fait appel à la fonction "SOMMECOULEUR". Par exemple, si une ligne de code contient
VB:
x=toto + SOMMECOULEUR
on la remplacera par
Code:
toto + Application.run "SOMMECOULEUR"
Cordialement,
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 😜
 

Discussions similaires

Réponses
1
Affichages
122
Réponses
0
Affichages
83