Affecter macro à toutes les feuilles d'Excel

Bonjour à tous,

J'ai une macro qui me permet de compter le nombre de cellules colorées, il faudrait que cette macro fonctionne pour chaque feuille de mon classeur excel.

Voici le code VBA

Function SomCool(Zne As Range, Couleur As String)

Application.Volatile True

Select Case Couleur

Case "jaune"

Couleur = 6

Case ""

Couleur = -4142

End Select

For Each cell In Zne

If cell.Interior.ColorIndex = Couleur Then cvSomme = cvSomme + 1

Next

SomCool = cvSomme

End Function

J'ai mis ce code dans un module lié à une feuille.

Merci d'avance pour vos suggestions

Bonjour,

Il faut mettre une fonction personnalisée dans une module standard pour pouoir l'utiliser.

NB- Versions 2007 et postérieures : l'utilisation de Color serait plus indiquée, les couleurs ne sont plus limitées à 56...

Salut,

Je suis pas très forte en macro, si on peut me détailler ce que je dois mettre

merci

Bonjour,

Quelques précisions pour te fixer les idées :

• Jusqu'à la version 2003, Excel ne pouvait afficher que les 56 couleurs de la palette intégrée à l'application, on utilisait donc préférentiellement ColorIndex pour les définir, et si l'on souhaitait des couleurs non présentes dans la palette, il fallait modifier la palette pour les obtenir...

A partir de la version 2007, toutes les couleurs (définies selon le système RGB) deviennent affichables dans Excel, l'usage de Color pour les définir devient pleinement opérationnel pour en bénéficier...

En utilisant Color, on définit une couleur au moyen d'une valeur de type Long. De façon pratique, on obtient cette valeur par la fonction RGB(r, v, b) [r, v et b étant la valeur (de 0 à 255) des composantes rouge, vert et bleu de chaque couleur selon le système additif, la boîte de dialogue Couleurs fournit ces valeurs lorsqu'on compose ou édite une couleur, et il suffit de les noter pour les couleurs que l'on souhaite, ce qui rend pratique l'utilisation de la fonction RGB].

Outre RGB, on dispose toujours de constantes VBA pour les 8 couleurs de base, telles vbRed ou vbYellow..., qui sont facilement interprétables (plus qu'un nombre représentant la couleur), et demeurent utilisables.

S'agissant de ColorIndex, 2 valeurs demeurent, pour lesquelles on dispose de constantes VBA : xlColorIndexAutomatic (choix de la couleur par défaut du système pour définir la couleur de police) et xlColorIndexNone (absence de coloration du fond d'une cellule, NB: pour ce dernier cas on peut également obtenir le résultat en affectant la valeur xlNone à Color).

Voilà quelques éléments de base pour s'y retrouver dans le système de couleurs...

• Il n'existe pas de fonction Excel pour réaliser des opérations en s'appuyant sur les couleurs. Ce pourquoi on élabore des fonctions personnalisées pour y pallier : on cible selon les besoin la couleur de fond de cellule ou la couleur de police, et on effectue des opérations selon couleur de somme de valeurs ou dénombrement.

A cet égard, ta fonction dont le libellé indiquerait que tu fais une somme de valeurs, fait en réalité un dénombrement ! Il faudrait donc que tu précises ce que tu veux obtenir...

Pour opérer selon couleur, on a 3 principales méthodes : l'indiquer à partir d'un texte prédéfini que dans le code on traduira par une valeur de couleur, indiquer une cellule témoin pour indiquer la couleur utilisée, ou définir la couleur recherchée par la cellule dans laquelle on placera la fonction. Diverses combinaisons selon les objectifs recherchés aboutissent à un grand nombre de solution personnalisées pour s'adapter au mieux au résultat recherché.

C'est donc la définition de tes besoins qui importe d'abord : il y aura toujours une solution possible pour les satisfaire...

Pour répondre aussi à une question qui survient fréquemment, ces calculs à partir de couleurs excluent les couleurs qui résulteraient de mises en forme conditionnelle.

Dans le cas de couleurs MFC, on travaille à partir des conditions... Il est possible de détecter les couleurs MFC, mais impossible d'intégrer cette détection dans des fonctions personnalisées (cela est dû à une interdiction posée par Microsoft, que l'on contournera alors par d'autres méthodes...)

• Pour préciser ce qu'est une fonction personnalisée, il s'agit d'un procédure VBA de type Function (une macro donc...) destinée à être utilisée comme fonction de feuille de calcul dans Excel, ce qui fait sa particularité.

Ce pourquoi en début de code, à la suite des déclarations de variables, on place une ligne de commande :

Application.Volatile (la fonction sera recalculée lors des recalculs automatiques) ou Application.Volatile False (la fonction ne sera pas recalculée lors des recalculs). Cette commande n'a d'effet que lors de l'utilisation en fonction de feuille de calcul.

Et l'utilisation dans Excel s'opère comme pour les fonctions natives d'Excel...

Dernier point, le code de la fonction doit être placé dans un module standard (à l'instar de toutes les macros ordinaires). Un module standard est public par défaut, le code qui s'y trouve demeure donc en permanence accessible. Les modules d'objets (feuilles, classeur) sont des modules privés, non accessibles directement de l'extérieur du module... Et il convient de réserver leur utilisation pour procédures évènementielles de l'objet et aux procédures annexes éventuelles qui y sont exclusivement liées.

J'espère que ces quelques précision auront éclairé un peu ta problématique. Il s'agit donc pour toi de définir ton objectif précisément, et dans quel contexte tu opères en l'illustrant par un fichier modèle.

Et on pourra alors ajuster ton code aux besoins exprimés (en l'écrivant aussi un peu plus proprement et avec la précision requise).

Cordialement.

D'accord, cela m'a un peu plus éclairé, merci de vos explications

En faite ce que j'aimerais obtenir est la création d'un planning pour des salariés, j'ai donc commencé par faire une feuille pour le planning au mois, pour le planning à la semaine et une feuille pour le planning du jours, pour pouvoir calculer le nombre d'heure qu'un salarié travaille par jour, par semaine et par mois. et comparer ces heures avec celle de son contrat, finalement j'aimerais via des couleurs appliquées sur des cellules, compter le nombre de jours (feuille planning mois et semaine) et le nombre d'heures (planning jours) qu'effectue un salarié.

Dans la feuille excel Planning jours les cellules A75:AH75 sont des essais de ma part qui ne sont pas à prendre en compte.

Je met le fichier ci-dessous.

Merci encore de votre aide.

22classeur2.xlsm (68.75 Ko)

Bonsoir,

On a changé totalement de sujet !

J'ai regardé un peu ton fichier... Là je crains de ne pas avoir assez de temps à y consacrer. La tâche est conséquente. Ce qu'on y voit n'est pas encore suffisant pour indiquer clairement ce à quoi tu veux aboutir, il y faudra d'autres explications.

Quelques constats rapides... Je m'interroges toujours sur la propension de nombre d'utilisateurs à éviter la 1re ligne et la 1re colonne d'une feuille pour commencer à flanquer des données au milieu... enfin !

Plus important : utilisant des tableaux Excel, il n'y a aucune raison à les préconstituer avec un grand nombre de lignes vides ! C'est au contraire une source de problèmes !

La particularité d'un tableau Excel est qu'il s'étend automatiquement, toute ligne inscrite en dessous est incorporée d'office au tableau, prend les formats du tableau, les formules s'étendent également quand il y en a, de même que les listes déroulantes éventuelles. Il n'y a donc aucun intérêt à le surdimensionner.

Excel le nomme automatiquement, ce nom correspond aux données (ligne d'en-tête exclue) et est utilisable en VBA à l'instar d'un nom de plage...

Ta feuille Source : la liste des salariés sera probablement utile, les autres mises en place ne le sont pas ! Elles ne font que suppléer une méconnaissance des possibilités offertes par VBA (et Excel aussi).

Nul besoin par exemple d'une liste interminable d'année pour en sélectionner un dans une liste ! Tu vas incrémenter une année après l'autre au fil du temps, un SpinButton remplira parfaitement cette fonction et permettra de circuler dans le temps dans les deux sens (dans la mesure où cela peut être nécessaire).

De même pour les mois, et la fonction MonthName en permettra l'affichage sous forme littérale...

Pour ce qui est du code enregistré, ce que j'en pense c'est qu'il est toujours bon pour la poubelle ! On ne peut faire quelque chose de bon avec, il faut le transformer intégralement mais il est alors plus simple d'écrire en VBA directement ! Ce qui suppose d'acquérir un minimum de technicité...

La première chose à faire est de définir le projet dans ses détails, la façon dont tu entends utiliser ce classeur... Ta mise en place de 3 tableaux : mois, semaine, jour, laisse penser que le tableau de base qui accueillera les informations saisies et le tableau jour, les autres récapitulant de façon plus synthétique les infos.

Mais à ce titre, il n'y a pas de différence de structure entre mois et semaine, qui sont organisés en jours. L'un est donc de trop !

D'autre part, il y a un certain nombre de jours dans une année... et je ne vois pas comment tu entends faire avec ton tableau jour, tu ne vas pas te contenter d'une journée mais si tu stockes une année sous la même forme ce sera vite un classeur lourd et difficilement gérable...

Je pense que tu as encore pas mal de boulot pour mettre au point ton projet et le réaliser.

Cordialement.

Rechercher des sujets similaires à "affecter macro toutes feuilles"