Limiter une fonction perso CountColor en colonne B selon l'année présente en A
8 réponses
Jarobasearobase
Excel 2003
Bonjour à tous
Pour une fonction perso CountCcolor agissant en col B, comment la limiter selon l'année existant en
A12:Ax (calendrier au format jjj jj mm aaaa) qui est comparée à A9 (au format aaaa), s'il vous plait?
La fonction =CountColor($B$11:$B$1830;A1) compte les cellules de même fond que celles de références
situées de A1 à A8 et fonctionne parfaitement.
'************
Function CountColor(range_data As Range, criteria As Range) As Long
Dim datax As Range
Dim xcolor As Long
xcolor = criteria.Interior.ColorIndex
For Each datax In range_data
If datax.Interior.ColorIndex = xcolor Then
CountColor = CountColor + 1
End If
Next datax
End Function
'************
J'ai essayé, bien sûr sans résultats :
' If Not Intersect(Target, range_data) Is Nothing Then
' If Target.Offset(-1, 0).Value = "A9".Value Then
et
' If DateDiff("yyyy", range_data, [A9]) = 0 Then
et bien d'autres bidouillages ...
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
MichD
Bonjour, Essaie comme ceci : Dans une cellule de la feuille de calcul, tu saisis la formule de cette manière : B1:B10 -> la plage de cellule D3 -> la cellule contenant la cellule de comparaison =CountSameYear(B1:B10;D3) Cette fonction doit être mise dans un MODULE STANDARD. '-------------------------- Function CountSameYear(range_data As Range, criteria As Range) As Long Dim datax As Range, S As Long For Each datax In range_data If Year(datax) = Year(criteria) Then S = S + 1 End If Next datax CountSameYear = S End Function '-------------------------- MichD
Bonjour,
Essaie comme ceci :
Dans une cellule de la feuille de calcul, tu saisis la formule de cette
manière :
B1:B10 -> la plage de cellule
D3 -> la cellule contenant la cellule de comparaison
=CountSameYear(B1:B10;D3)
Cette fonction doit être mise dans un MODULE STANDARD.
'--------------------------
Function CountSameYear(range_data As Range, criteria As Range) As Long
Dim datax As Range, S As Long
For Each datax In range_data
If Year(datax) = Year(criteria) Then
S = S + 1
End If
Next datax
CountSameYear = S
End Function
'--------------------------
Bonjour, Essaie comme ceci : Dans une cellule de la feuille de calcul, tu saisis la formule de cette manière : B1:B10 -> la plage de cellule D3 -> la cellule contenant la cellule de comparaison =CountSameYear(B1:B10;D3) Cette fonction doit être mise dans un MODULE STANDARD. '-------------------------- Function CountSameYear(range_data As Range, criteria As Range) As Long Dim datax As Range, S As Long For Each datax In range_data If Year(datax) = Year(criteria) Then S = S + 1 End If Next datax CountSameYear = S End Function '-------------------------- MichD
Jarobasearobase
Bonjour MichD Merci pour le code. il me donne bien le nbre de jours correspondant à l'année notée en A9. Mais en dessous à partir de A11, c'est un calendrier complet de plusieurs années. Je cherche à compter les cellules en colonne B dont la date en A correspond à l'année en A9. Comment associer les 2 codes, le code CountColor et le code CountSameYear : '--------------------------- Function CountColor(range_data As Range, criteria As Range) As Long Dim datax As Range Dim xcolor As Long, S As Long xcolor = criteria.Interior.ColorIndex For Each datax In range_data If Year(datax) = Year(criteria) Then 'si la date en A est de l'année en A9 If datax.Interior.ColorIndex = xcolor Then 'alors seulement je totalise les cellules CountColor = CountColor + 1 'de même fond End If End If Next datax End Function '--------------------------- Fonction appliquée '=CountColor($B$11:$B$1830;A1) Merci J@@ Le 14/01/2019 à 01:38, MichD a écrit :
Bonjour, Essaie comme ceci : Dans une cellule de la feuille de calcul, tu saisis la formule de cette manière : B1:B10 -> la plage de cellule D3 -> la cellule contenant la cellule de comparaison =CountSameYear(B1:B10;D3) Cette fonction doit être mise dans un MODULE STANDARD. '-------------------------- Function CountSameYear(range_data As Range, criteria As Range) As Long Dim datax As Range, S As Long For Each datax In range_data If Year(datax) = Year(criteria) Then S = S + 1 End If Next datax CountSameYear = S End Function '-------------------------- MichD
Bonjour MichD
Merci pour le code. il me donne bien le nbre de jours correspondant à l'année notée en A9.
Mais en dessous à partir de A11, c'est un calendrier complet de plusieurs années.
Je cherche à compter les cellules en colonne B dont la date en A correspond à l'année en A9.
Comment associer les 2 codes, le code CountColor et le code CountSameYear :
'---------------------------
Function CountColor(range_data As Range, criteria As Range) As Long
Dim datax As Range
Dim xcolor As Long, S As Long
xcolor = criteria.Interior.ColorIndex
For Each datax In range_data
If Year(datax) = Year(criteria) Then 'si la date en A est de l'année en A9
If datax.Interior.ColorIndex = xcolor Then 'alors seulement je totalise les cellules
CountColor = CountColor + 1 'de même fond
End If
End If
Next datax
End Function
'---------------------------
Fonction appliquée '=CountColor($B$11:$B$1830;A1)
Merci
J@@
Le 14/01/2019 à 01:38, MichD a écrit :
Bonjour,
Essaie comme ceci :
Dans une cellule de la feuille de calcul, tu saisis la formule de cette manière :
B1:B10 -> la plage de cellule
D3 -> la cellule contenant la cellule de comparaison
=CountSameYear(B1:B10;D3)
Cette fonction doit être mise dans un MODULE STANDARD.
'--------------------------
Function CountSameYear(range_data As Range, criteria As Range) As Long
Dim datax As Range, S As Long
For Each datax In range_data
If Year(datax) = Year(criteria) Then
S = S + 1
End If
Next datax
CountSameYear = S
End Function
'--------------------------
Bonjour MichD Merci pour le code. il me donne bien le nbre de jours correspondant à l'année notée en A9. Mais en dessous à partir de A11, c'est un calendrier complet de plusieurs années. Je cherche à compter les cellules en colonne B dont la date en A correspond à l'année en A9. Comment associer les 2 codes, le code CountColor et le code CountSameYear : '--------------------------- Function CountColor(range_data As Range, criteria As Range) As Long Dim datax As Range Dim xcolor As Long, S As Long xcolor = criteria.Interior.ColorIndex For Each datax In range_data If Year(datax) = Year(criteria) Then 'si la date en A est de l'année en A9 If datax.Interior.ColorIndex = xcolor Then 'alors seulement je totalise les cellules CountColor = CountColor + 1 'de même fond End If End If Next datax End Function '--------------------------- Fonction appliquée '=CountColor($B$11:$B$1830;A1) Merci J@@ Le 14/01/2019 à 01:38, MichD a écrit :
Bonjour, Essaie comme ceci : Dans une cellule de la feuille de calcul, tu saisis la formule de cette manière : B1:B10 -> la plage de cellule D3 -> la cellule contenant la cellule de comparaison =CountSameYear(B1:B10;D3) Cette fonction doit être mise dans un MODULE STANDARD. '-------------------------- Function CountSameYear(range_data As Range, criteria As Range) As Long Dim datax As Range, S As Long For Each datax In range_data If Year(datax) = Year(criteria) Then S = S + 1 End If Next datax CountSameYear = S End Function '-------------------------- MichD
MichD
Dans la cellule tu écris : =CountSameYear_Et_Couleur(A1:A9;C4;D1) A1:A9 -> Plage de cellules C4 -> cellule contenant une date (année) D1 -> cellule contenant la couleur de comparaison '----------------------------- Function CountSameYear_Et_Couleur(range_data As Range, _ CritAn As Range, CritCoul As Range) As Long Dim datax As Range, S As Long For Each datax In range_data If Year(datax) = Year(CritAn) Then If datax.Interior.Color = CritCoul.Interior.Color Then S = S + 1 End If End If Next datax CountSameYear_Et_Couleur = S End Function '----------------------------- MichD
Dans la cellule tu écris :
=CountSameYear_Et_Couleur(A1:A9;C4;D1)
A1:A9 -> Plage de cellules
C4 -> cellule contenant une date (année)
D1 -> cellule contenant la couleur de comparaison
'-----------------------------
Function CountSameYear_Et_Couleur(range_data As Range, _
CritAn As Range, CritCoul As Range) As Long
Dim datax As Range, S As Long
For Each datax In range_data
If Year(datax) = Year(CritAn) Then
If datax.Interior.Color = CritCoul.Interior.Color Then
S = S + 1
End If
End If
Next datax
CountSameYear_Et_Couleur = S
End Function
Dans la cellule tu écris : =CountSameYear_Et_Couleur(A1:A9;C4;D1) A1:A9 -> Plage de cellules C4 -> cellule contenant une date (année) D1 -> cellule contenant la couleur de comparaison '----------------------------- Function CountSameYear_Et_Couleur(range_data As Range, _ CritAn As Range, CritCoul As Range) As Long Dim datax As Range, S As Long For Each datax In range_data If Year(datax) = Year(CritAn) Then If datax.Interior.Color = CritCoul.Interior.Color Then S = S + 1 End If End If Next datax CountSameYear_Et_Couleur = S End Function '----------------------------- MichD
Jarobasearobase
Bonjour Denis Merci. 2 points : - la fonction ne s'exécute pas automatiquement : il faut entrer dedans et cliquer entrée. Que faire? - comment modifier le code car le champ date est bien A1:A9 (pour reprendre ton exemple),mais les couleurs sont "saisies" en B1:B9 (c'est à dire que celui qui saisit ne touche pas à la colonne "calendrier", il ne modifie que celle en face, la B1:B9. Merci pour tes lumières (et ta patience). Bien cordialement J@@ - Le 14/01/2019 à 16:11, MichD a écrit :
Dans la cellule tu écris : =CountSameYear_Et_Couleur(A1:A9;C4;D1) A1:A9 -> Plage de cellules C4 -> cellule contenant une date (année) D1 -> cellule contenant la couleur de comparaison '----------------------------- Function CountSameYear_Et_Couleur(range_data As Range, _ CritAn As Range, CritCoul As Range) As Long Dim datax As Range, S As Long For Each datax In range_data If Year(datax) = Year(CritAn) Then If datax.Interior.Color = CritCoul.Interior.Color Then S = S + 1 End If End If Next datax CountSameYear_Et_Couleur = S End Function '----------------------------- MichD
Bonjour Denis
Merci.
2 points :
- la fonction ne s'exécute pas automatiquement : il faut entrer dedans et cliquer entrée. Que faire?
- comment modifier le code car le champ date est bien A1:A9 (pour reprendre ton exemple),mais les
couleurs sont "saisies" en B1:B9 (c'est à dire que celui qui saisit ne touche pas à la colonne
"calendrier", il ne modifie que celle en face, la B1:B9.
Merci pour tes lumières (et ta patience).
Bien cordialement
J@@
-
Le 14/01/2019 à 16:11, MichD a écrit :
Dans la cellule tu écris :
=CountSameYear_Et_Couleur(A1:A9;C4;D1)
A1:A9 -> Plage de cellules
C4 -> cellule contenant une date (année)
D1 -> cellule contenant la couleur de comparaison
'-----------------------------
Function CountSameYear_Et_Couleur(range_data As Range, _
CritAn As Range, CritCoul As Range) As Long
Dim datax As Range, S As Long
For Each datax In range_data
If Year(datax) = Year(CritAn) Then
If datax.Interior.Color = CritCoul.Interior.Color Then
S = S + 1
End If
End If
Next datax
CountSameYear_Et_Couleur = S
End Function
Bonjour Denis Merci. 2 points : - la fonction ne s'exécute pas automatiquement : il faut entrer dedans et cliquer entrée. Que faire? - comment modifier le code car le champ date est bien A1:A9 (pour reprendre ton exemple),mais les couleurs sont "saisies" en B1:B9 (c'est à dire que celui qui saisit ne touche pas à la colonne "calendrier", il ne modifie que celle en face, la B1:B9. Merci pour tes lumières (et ta patience). Bien cordialement J@@ - Le 14/01/2019 à 16:11, MichD a écrit :
Dans la cellule tu écris : =CountSameYear_Et_Couleur(A1:A9;C4;D1) A1:A9 -> Plage de cellules C4 -> cellule contenant une date (année) D1 -> cellule contenant la couleur de comparaison '----------------------------- Function CountSameYear_Et_Couleur(range_data As Range, _ CritAn As Range, CritCoul As Range) As Long Dim datax As Range, S As Long For Each datax In range_data If Year(datax) = Year(CritAn) Then If datax.Interior.Color = CritCoul.Interior.Color Then S = S + 1 End If End If Next datax CountSameYear_Et_Couleur = S End Function '----------------------------- MichD
MichD
J'ai simplement ajouté à la fonction : Application.Volatile La fonction réagit non pas au formatage d'une cellule, mais dès que tu modifies le contenu d'une cellule peu importe laquelle, la fonction s'exécute. '----------------------------- Function CountSameYear_Et_Couleur(range_data As Range, _ CritAn As Range, CritCoul As Range) As Long Application.Volatile Dim datax As Range, S As Long For Each datax In range_data If Year(datax) = Year(CritAn) Then If datax.Interior.Color = CritCoul.Interior.Color Then S = S + 1 End If End If Next datax CountSameYear_Et_Couleur = S End Function '----------------------------- MichD
J'ai simplement ajouté à la fonction : Application.Volatile
La fonction réagit non pas au formatage d'une cellule, mais dès que tu
modifies le contenu d'une cellule peu importe laquelle, la fonction
s'exécute.
'-----------------------------
Function CountSameYear_Et_Couleur(range_data As Range, _
CritAn As Range, CritCoul As Range) As Long
Application.Volatile
Dim datax As Range, S As Long
For Each datax In range_data
If Year(datax) = Year(CritAn) Then
If datax.Interior.Color = CritCoul.Interior.Color Then
S = S + 1
End If
End If
Next datax
CountSameYear_Et_Couleur = S
End Function
J'ai simplement ajouté à la fonction : Application.Volatile La fonction réagit non pas au formatage d'une cellule, mais dès que tu modifies le contenu d'une cellule peu importe laquelle, la fonction s'exécute. '----------------------------- Function CountSameYear_Et_Couleur(range_data As Range, _ CritAn As Range, CritCoul As Range) As Long Application.Volatile Dim datax As Range, S As Long For Each datax In range_data If Year(datax) = Year(CritAn) Then If datax.Interior.Color = CritCoul.Interior.Color Then S = S + 1 End If End If Next datax CountSameYear_Et_Couleur = S End Function '----------------------------- MichD
Jarobasearobase
Excellent. Merci (j'avais oublié ce volatile) Sinon vois-tu comment modifier le code car si le champ date est bien A1:A9 (pour reprendre ton exemple), les couleurs sont "saisies" en B1:B9 (c'est à dire que celui qui saisit n'accède pas à la colonne "calendrier", il ne modifie que celle en face, la B1:B9 ? Merci encore de te pencher sur ce point. J@@ Le 14/01/2019 à 17:26, MichD a écrit :
J'ai simplement ajouté à la fonction : Application.Volatile La fonction réagit non pas au formatage d'une cellule, mais dès que tu modifies le contenu d'une cellule peu importe laquelle, la fonction s'exécute. '----------------------------- Function CountSameYear_Et_Couleur(range_data As Range, _ CritAn As Range, CritCoul As Range) As Long Application.Volatile Dim datax As Range, S As Long For Each datax In range_data If Year(datax) = Year(CritAn) Then If datax.Interior.Color = CritCoul.Interior.Color Then S = S + 1 End If End If Next datax CountSameYear_Et_Couleur = S End Function '----------------------------- MichD
Excellent. Merci (j'avais oublié ce volatile)
Sinon vois-tu comment modifier le code car si le champ date est bien A1:A9 (pour reprendre ton
exemple), les couleurs sont "saisies" en B1:B9 (c'est à dire que celui qui saisit n'accède pas à la
colonne "calendrier", il ne modifie que celle en face, la B1:B9 ?
Merci encore de te pencher sur ce point.
J@@
Le 14/01/2019 à 17:26, MichD a écrit :
J'ai simplement ajouté à la fonction : Application.Volatile
La fonction réagit non pas au formatage d'une cellule, mais dès que tu modifies le contenu d'une
cellule peu importe laquelle, la fonction s'exécute.
'-----------------------------
Function CountSameYear_Et_Couleur(range_data As Range, _
CritAn As Range, CritCoul As Range) As Long
Application.Volatile
Dim datax As Range, S As Long
For Each datax In range_data
If Year(datax) = Year(CritAn) Then
If datax.Interior.Color = CritCoul.Interior.Color Then
S = S + 1
End If
End If
Next datax
CountSameYear_Et_Couleur = S
End Function
Excellent. Merci (j'avais oublié ce volatile) Sinon vois-tu comment modifier le code car si le champ date est bien A1:A9 (pour reprendre ton exemple), les couleurs sont "saisies" en B1:B9 (c'est à dire que celui qui saisit n'accède pas à la colonne "calendrier", il ne modifie que celle en face, la B1:B9 ? Merci encore de te pencher sur ce point. J@@ Le 14/01/2019 à 17:26, MichD a écrit :
J'ai simplement ajouté à la fonction : Application.Volatile La fonction réagit non pas au formatage d'une cellule, mais dès que tu modifies le contenu d'une cellule peu importe laquelle, la fonction s'exécute. '----------------------------- Function CountSameYear_Et_Couleur(range_data As Range, _ CritAn As Range, CritCoul As Range) As Long Application.Volatile Dim datax As Range, S As Long For Each datax In range_data If Year(datax) = Year(CritAn) Then If datax.Interior.Color = CritCoul.Interior.Color Then S = S + 1 End If End If Next datax CountSameYear_Et_Couleur = S End Function '----------------------------- MichD
MichD
Sinon vois-tu comment modifier le code car si le champ date est bien A1:A9 (pour reprendre ton exemple), les couleurs sont "saisies" en B1:B9 (c'est à dire que celui qui saisit n'accède pas à la colonne "calendrier", il ne modifie que celle en face, la B1:B9 ?
Bonjour, Ce que tu demandes, c'est vite vu! Il n'y a aucun moyen dans Excel de détecter la modification d'un format de cellule. Par conséquent, il n'y a aucun moyen d'écrire une fonction qui se met à jour automatiquement suite à une modification d'un format de cellule. "Application.Volatile" permet de mettre à jour une fonction automatiquement à chaque fois qu'une cellule est mise en mode "édition" soit par un double-clic ou par l'appui sur la touche F2. MichD
Sinon vois-tu comment modifier le code car si le champ date est bien
A1:A9 (pour reprendre ton exemple), les couleurs sont "saisies" en B1:B9
(c'est à dire que celui qui saisit n'accède pas à la colonne
"calendrier", il ne modifie que celle en face, la B1:B9 ?
Bonjour,
Ce que tu demandes, c'est vite vu!
Il n'y a aucun moyen dans Excel de détecter la modification d'un format
de cellule. Par conséquent, il n'y a aucun moyen d'écrire une fonction
qui se met à jour automatiquement suite à une modification d'un format
de cellule.
"Application.Volatile" permet de mettre à jour une fonction
automatiquement à chaque fois qu'une cellule est mise en mode "édition"
soit par un double-clic ou par l'appui sur la touche F2.
Sinon vois-tu comment modifier le code car si le champ date est bien A1:A9 (pour reprendre ton exemple), les couleurs sont "saisies" en B1:B9 (c'est à dire que celui qui saisit n'accède pas à la colonne "calendrier", il ne modifie que celle en face, la B1:B9 ?
Bonjour, Ce que tu demandes, c'est vite vu! Il n'y a aucun moyen dans Excel de détecter la modification d'un format de cellule. Par conséquent, il n'y a aucun moyen d'écrire une fonction qui se met à jour automatiquement suite à une modification d'un format de cellule. "Application.Volatile" permet de mettre à jour une fonction automatiquement à chaque fois qu'une cellule est mise en mode "édition" soit par un double-clic ou par l'appui sur la touche F2. MichD
Jarobasearobase
Bonjour Entendu. Merci pour ton aide. Bonne journée. Cordialement J@@ Le 15/01/2019 à 01:13, MichD a écrit :
Sinon vois-tu comment modifier le code car si le champ date est bien A1:A9 (pour reprendre ton exemple), les couleurs sont "saisies" en B1:B9 (c'est à dire que celui qui saisit n'accède pas à la colonne "calendrier", il ne modifie que celle en face, la B1:B9 ?
Bonjour, Ce que tu demandes, c'est vite vu! Il n'y a aucun moyen dans Excel de détecter la modification d'un format de cellule. Par conséquent, il n'y a aucun moyen d'écrire une fonction qui se met à jour automatiquement suite à une modification d'un format de cellule. "Application.Volatile" permet de mettre à jour une fonction automatiquement à chaque fois qu'une cellule est mise en mode "édition" soit par un double-clic ou par l'appui sur la touche F2. MichD
Bonjour
Entendu.
Merci pour ton aide.
Bonne journée.
Cordialement
J@@
Le 15/01/2019 à 01:13, MichD a écrit :
Sinon vois-tu comment modifier le code car si le champ date est bien A1:A9 (pour reprendre ton
exemple), les couleurs sont "saisies" en B1:B9 (c'est à dire que celui qui saisit n'accède pas à
la colonne "calendrier", il ne modifie que celle en face, la B1:B9 ?
Bonjour,
Ce que tu demandes, c'est vite vu!
Il n'y a aucun moyen dans Excel de détecter la modification d'un format de cellule. Par conséquent,
il n'y a aucun moyen d'écrire une fonction qui se met à jour automatiquement suite à une
modification d'un format de cellule.
"Application.Volatile" permet de mettre à jour une fonction automatiquement à chaque fois qu'une
cellule est mise en mode "édition" soit par un double-clic ou par l'appui sur la touche F2.
Bonjour Entendu. Merci pour ton aide. Bonne journée. Cordialement J@@ Le 15/01/2019 à 01:13, MichD a écrit :
Sinon vois-tu comment modifier le code car si le champ date est bien A1:A9 (pour reprendre ton exemple), les couleurs sont "saisies" en B1:B9 (c'est à dire que celui qui saisit n'accède pas à la colonne "calendrier", il ne modifie que celle en face, la B1:B9 ?
Bonjour, Ce que tu demandes, c'est vite vu! Il n'y a aucun moyen dans Excel de détecter la modification d'un format de cellule. Par conséquent, il n'y a aucun moyen d'écrire une fonction qui se met à jour automatiquement suite à une modification d'un format de cellule. "Application.Volatile" permet de mettre à jour une fonction automatiquement à chaque fois qu'une cellule est mise en mode "édition" soit par un double-clic ou par l'appui sur la touche F2. MichD