Macro avec 2 conditions pour calculer les congés

Bonjour à tous,

Je suis tout juste novice en Macros VBA sur Excel et j'avoue que je suis totalement perdu !

J'ai récupéré la macro d'un collègue qui fonctionne très bien. Elle permet de faire la somme des cellules qui sont de la même couleur que la cellule référence. Les cellules colorées correspondent aux jours de congé des personnes correspondantes.

Exemple:

screenshot1

Cependant je dois rajouter des conditions à cette fonction.

Je voudrais que la fonction continue de compter le nombre de cellules colorées (soit le nombre de jour de congé) mais qu'elle n'extrait que le nombre de cellules de l'équipe b par exemple (colonne E ci-dessus).

Je sollicite donc de l'aide sur le fichier joint, la fonction est la suivante:

Function ColorFunction(rColor As Range, rRange As Range, Optional SUM As Boolean) Dim rCell As Range Dim lCol As Long Dim vResult lCol = rColor.Interior.ColorIndex If SUM = True Then For Each rCell In rRange If rCell.Interior.ColorIndex = lCol Then vResult = WorksheetFunction.SUM(rCell, vResult) End If Next rCell Else For Each rCell In rRange If rCell.Interior.ColorIndex = lCol Then vResult = 1 + vResult End If Next rCell End If ColorFunction = vResult End Function

Merci d'avance,

Olivier

Bonjour,

Ci-joint un exemple dans la cellule H27 ...

En espèrant que cela t'aide

Re,

La macro modifée avec l'ajout de la nouvelle condition de l'équipe ... et ...pour plus de lisibilité ...

Function ColorFunction(rColor As Range, rRange As Range, sTeam As String, Optional SUM As Boolean)
' ajout de variable sTeam : "A","B","C"
' exemple d'utilisation : =colorfunction($D27;H5:H24;"B";FAUX)

Dim rCell As Range
Dim lCol As Long
Dim vResult
lCol = rColor.Interior.ColorIndex

Application.Volatile
    If SUM = True Then
      For Each rCell In rRange
          If rCell.Interior.ColorIndex = lCol And UCase(Cells(rCell.Row, 5)) = UCase(sTeam) Then
              vResult = WorksheetFunction.SUM(rCell, vResult)
          End If
      Next rCell
    Else
      For Each rCell In rRange
          If rCell.Interior.ColorIndex = lCol And UCase(Cells(rCell.Row, 5)) = UCase(sTeam) Then
              vResult = 1 + vResult
          End If
      Next rCell
    End If
ColorFunction = vResult
End Function

En espèrant que cela t'aide

Bonjour James007,

Merci beaucoup pour ta macro, elle fonctionne parfaitement

Merci aussi pour ton deuxième message, je venais de préparer un gros pavé mais plus besoin grâce à la ligne de code "Application.Volatile"

J'ai des petites questions à te poser pour ma culture personnelle et une petite requête d'optimisation à apporter à la macro.

Petite optimisation à apporter:

J'aimerai avoir la somme des cellules calculées dans un autre onglet nommé par ex. Feuil1. La feuille originale se nomme 2019.

Je peux juste faire un "= H27" par exemple dans l'onglet suivant mais j'aimerai éviter si possible cette étape de report.

Voici mes questions:

  • Peux-tu m'expliquer l'utilisation de UCase ?
  • Peux tu m'expliquer aussi pourquoi il y a cette condition dans la fonction : Optional SUM As Boolean ?
  • Quel est l'intérêt d'ajouter un petit "r" ou "s" devant Color, Range et Team dans la fonction ?

En espérant avoir été assez clair et précis.

Merci encore pour ton temps et ton aide.

Cordialement

Olivier

Re,

Content que tout fonctionne ...

Pour répondre à tes deux questions :

1. As-tu essayé d'utiliser ta fonction personnalisée depuis une autre feuille ?

Si oui, quel résultat as-tu obtenu ?

2. UCase ne sert qu'à passer en lettres capitales la lettre identifiante de l'équipe ... car souvent les utilisateurs peu attentifs utiliseront dans la feuille des lettres minuscules ... et deux secondes plus tard des majuscules dans la formule ...

ou bien ... le contraire ... avec UCase ... ces éventuels désagréments sont évités ...

Hello,

Merci pour ton explication pour Ucase

Je viens d'essayer mais cela ne fonctionne pas. Je pense que j'écris mal la référence du "rRange"

Voici ce que j'écris ma exemple:

=colorfunction($D27;'2019'!H5:H24;"PhysChem QC";FAUX)

J'avais mis à jour mon précédent message et je te copie-colle mais 2 questions supplémentaires.

  • Peux tu m'expliquer aussi pourquoi il y a cette condition dans la fonction : Optional SUM As Boolean ?
  • Quel est l'intérêt d'ajouter un petit "r" ou "s" devant Color, Range et Team dans la fonction ?

Merci encore

Re,

Prenons les choses pas à pas ... et ...dans le bon sens ..

Je comprends que tu as ' hérité ' de cette macro ...

Avant toute chose ...Il faudrait l'adapter à ta façon de vouloir l'utiliser ...

Peux-tu expliquer comment tu l'utilises .. et joindre un fichier test ..

Re,

Tu pourras trouver en fichier joint une version quasi finale de la feuille excel que je voudrai utiliser. Avec la présence du 2nd onglet.

Ce que je cherche à savoir/calculer c'est le nombre de personnes en congés et le nombre qui travaille chaque jour de l'année afin de pouvoir estimer la charge de travail.

Je ne sais pas si ça pose problème au niveau des formules mais chez moi j'utilise excel en FR et au boulot il est en EN.

L'équipe que je cherche à connaître exactement les jour de congs/travaillés est nommé PhysChem QC.

Ce que je souhaite c'est que lorsque quelqu'un pose un jour de congés (en rouge) ou un jour de déplacement (en jaune), je voudrai que le tableau récapitulatif soit automatiquement mise à jour et ainsi reflète exactement les capacité futures.

En comptant le nombre de cellules blanches, qui corresponds au nombre de personnes travaillant chaque jour je suis capable de calculer les capacités de mon équipe.

Maintenant je te remercie pour ta patience

Bonjour,

Merci pour le fichier et pour les explications ...

Ci-joint ton fichier test

En espèrant que cela t'aide

12test-oliver45.xlsm (365.86 Ko)

Bonjour,

Merci beaucoup pour ton aide et ton efficacité

La nouvelle formule fonctionne à merveille.

Dernière petite question après cela je clôturerai le sujet,

La partie "cours VBA" du Forum est très instructive et intéressante mais quel autre support me conseilles-tu afin d'apprendre à utiliser et pour mieux comprends VBA ? J'ai vu qu'il y avait un libre "VBA pour les nuls"...

Bonne journée

Olivier

Re-Bonjour,

Content que tout fonctionne ...

Merci pour tes remerciements

Si tu suis le cours VBA de Sébastien ... tu vas te constituer une base très solide ...

Ensuite, à mon humble avis, il faut te frotter à la réalité ... et utiliser chaque prétexte dans ton boulot comme une opportunité pour apprendre ...

A titre d'exemple ... tu viens de très bien le faire avec la fonction personnalisée dont tu avais ' hérité ' ...

Rechercher des sujets similaires à "macro conditions calculer conges"