Nombre de valeurs dans des cellules fusionnées
Dixtit
Messages postés
16
Date d'inscription
Statut
Membre
Dernière intervention
-
gérard -
gérard -
Bonjour,
Je cherche à savoir s'il est possible de compter les cellules fusionnées selon ce qu'elles contiennent ?
Je vous joins un fichier, ce sera peut-être plus explicite !!! En vert c'est ce que j'aimerais obtenir.
http://www.cjoint.com/c/GIBo1sHCUYG
Merci d'avance,
Je cherche à savoir s'il est possible de compter les cellules fusionnées selon ce qu'elles contiennent ?
Je vous joins un fichier, ce sera peut-être plus explicite !!! En vert c'est ce que j'aimerais obtenir.
http://www.cjoint.com/c/GIBo1sHCUYG
Merci d'avance,
A voir également:
- Nombre de valeurs dans des cellules fusionnées
- Verrouiller des cellules excel - Guide
- Nombre de jours entre deux dates excel - Guide
- Formule excel pour additionner plusieurs cellules - Guide
- Nombre facile - Télécharger - Outils professionnels
- Faites afficher avec un fond coloré les cellules qui contiennent une valeur comprise entre 250 et 350. quel nombre est dessiné en surbrillance ? ✓ - Forum Excel
7 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonsoir, quel programme permet d'ouvrir le fichier que tu as joint?
Bonjour Dixtit,
Fichier Excel 2007 : https://mon-partage.fr/f/IyV8C3N7/
Si besoin, tu peux me demander une adaptation.
Merci de me dire si ça te convient.
Cordialement
Fichier Excel 2007 : https://mon-partage.fr/f/IyV8C3N7/
Si besoin, tu peux me demander une adaptation.
Merci de me dire si ça te convient.
Cordialement
Bonjour,
yg_be : c'est un fichier excel avec macro
gérard : merci beaucoup. J'essaye de comprendre : tu vas chercher le nombre de cellule selon leurs couleurs ?
yg_be : c'est un fichier excel avec macro
gérard : merci beaucoup. J'essaye de comprendre : tu vas chercher le nombre de cellule selon leurs couleurs ?
Bonjour Dixtit,
Oui, c'est bien ça : c'est le nombre de cellules selon les couleurs ;
j'ai mis dans le code tous les commentaires utiles ; Alt F11 pour
voir la fonction NbCells(), puis Alt F11 pour revenir sur Excel.
Tous les commentaires sont après la ligne « Option Explicit » et
avant la ligne « Function NbCells(...) As Byte » (ils sont en vert).
Je ne vais pas réécrire ces commentaires mais si besoin, tu peux
me demander plus d'infos.
-------------------------------------------
Pour que cette méthode marche comme il faut, tu dois seulement
utiliser les mêmes couleurs que jusqu'à présent, ce pour chaque
type RECUP, RTT, ou CP ; la fonction est appelée avec 1, 2 ou 3
selon ces 3 cas (précédé du n° de ligne) pour cette raison :
C'est plus simple que de transmettre directement le n° couleur,
et si tu changes de couleur par la suite, tu devras changer les
codes couleurs dans le code de la fonction, sans avoir besoin
de changer les formules de la feuille.
-------------------------------------------
J'avais vu le problème que tu as rencontré avec cptFusion(),
c'est pourquoi je n'ai pas utilisé cette fonction ; je l'ai donc
supprimée du module de mon fichier Excel.
Cordialement
J'ai vu après tes commentaires !
Par contre cela ne s'actualise pas, ca te fais pareil ?
Je suis un peu exigeante, mais il n'est pas possible de plutôt paramétrer des contenus "RTT", "CA"... plutôt que des couleurs ?
J'ai allégé le fichier vu que j'ai environ 10 codes différents pour plus de 2000 personnes !
Par contre cela ne s'actualise pas, ca te fais pareil ?
Je suis un peu exigeante, mais il n'est pas possible de plutôt paramétrer des contenus "RTT", "CA"... plutôt que des couleurs ?
J'ai allégé le fichier vu que j'ai environ 10 codes différents pour plus de 2000 personnes !
Je n'ai pas fait selon les contenus RECUP, RTT, ou CP car ce contenu n'est que
dans la 1ère cellule d'un groupe de cellules fusionnées.
Comme tu as 10 codes différents, tu auras un n° de 1 à 10 pour chaque code,
auquel il faudra associer le code couleur correspondant ; dans le code VBA,
il y a ces 2 lignes :
If n = 0 Or n > 3 Then Exit Function couleur = Choose(n, 12, 6, 38)
mettre à la place :
If n = 0 Or n > 10 Then Exit Function couleur = Choose(n, 12, 6, 38, x, x, x, x, x, x, x)
Après 38, à la place des 7 x, met le code couleur correspondant à
la couleur que tu as choisie pour les 7 autres types de contenu.
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
il me semble que cela fonctionne bien:
=cptFusion(4:4) retourne bien la valeur 10.
=cptFusion(4:4) retourne bien la valeur 10.
suggestion:
comme tu peux le voir, cela utilise le fait que la première cellule fusionnée contient la valeur, les autres ne contenant rien.
Function cptFusion2(plage As Range, valeur As String) As Long Dim c As Range Dim i As Range Dim compterfusion As Boolean Set i = Intersect(plage, plage.Parent.UsedRange) Application.Volatile For Each c In i If c.MergeCells Then If c.Value = valeur Then cptFusion2 = cptFusion2 + 1 compterfusion = True ElseIf c.Value = Empty Then If compterfusion Then cptFusion2 = cptFusion2 + 1 End If Else compterfusion = False End If Else If c.Value = valeur Then cptFusion2 = cptFusion2 + 1 End If End If Next c End Function
comme tu peux le voir, cela utilise le fait que la première cellule fusionnée contient la valeur, les autres ne contenant rien.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
ou ceci, peut-être un peu plus clair:
Function cptFusion2(plage As Range, valeur As String) As Long Dim c As Range Dim i As Range Dim compterfusion As Boolean Set i = Intersect(plage, plage.Parent.UsedRange) Application.Volatile For Each c In i If c.Value = valeur Then cptFusion2 = cptFusion2 + 1 If c.MergeCells Then compterfusion = True End If ElseIf c.MergeCells And (c.Value = Empty) And compterfusion Then cptFusion2 = cptFusion2 + 1 Else compterfusion = False End If Next c End Function
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
mes propositions ne fonctionnent pas correctement si tu as des cellules vides fusionnées.
ceci sera meilleur:
ceci sera meilleur:
Function cptFusion2(plage As Range, valeur As String) As Long Dim c As Range cptFusion2 = 0 Application.Volatile For Each c In Intersect(plage, plage.Parent.UsedRange) If c.MergeCells Then If c.MergeArea.Cells(1, 1).Value = valeur Then cptFusion2 = cptFusion2 + 1 End If Else If c.Value = valeur Then cptFusion2 = cptFusion2 + 1 End If End If Next c End Function
Bonjour Dixtit,
Fichier Excel n° 1 : https://mon-partage.fr/f/ngTLRf8c/
Fichier Excel n° 2 : https://mon-partage.fr/f/HE3acaD0/
Tu connais déjà le fichier 1 ; j'ai juste amélioré les commentaires
du code VBA, mais regarde-les quand même (Alt F11) ; tout le
reste est identique.
Le fichier 2 est nouveau : c'est une autre façon de faire où tu dois
transmettre le n° de ligne et le code couleur ; dans un sens, c'est
plus facile, mais si tu dois changer de couleur ensuite, tu devras
modifier la fonction puis l'étirer vers le bas sur toute la colonne ;
c'est donc moins souple => je t'ai d'abord proposé l'autre façon,
mais choisis celle que tu préfères.
----------------------------------------
Rappel : avec la 1ère méthode, en cas de changement de couleur,
l'appel des fonctions n'a pas besoin d'être modifié : laisse tel que
car c'est seulement 2 lignes du code VBA qui doivent être mises
à jour (j'ai déjà indiqué lesquelles auparavant).
----------------------------------------
Même avec ce que j'ai écris, lis quand même mon message précédent :
https://forums.commentcamarche.net/forum/affich-34893977-nombre-de-valeurs-dans-des-cellules-fusionnees#18
À te lire pour avoir ton avis.
Fichier Excel n° 1 : https://mon-partage.fr/f/ngTLRf8c/
Fichier Excel n° 2 : https://mon-partage.fr/f/HE3acaD0/
Tu connais déjà le fichier 1 ; j'ai juste amélioré les commentaires
du code VBA, mais regarde-les quand même (Alt F11) ; tout le
reste est identique.
Le fichier 2 est nouveau : c'est une autre façon de faire où tu dois
transmettre le n° de ligne et le code couleur ; dans un sens, c'est
plus facile, mais si tu dois changer de couleur ensuite, tu devras
modifier la fonction puis l'étirer vers le bas sur toute la colonne ;
c'est donc moins souple => je t'ai d'abord proposé l'autre façon,
mais choisis celle que tu préfères.
----------------------------------------
Rappel : avec la 1ère méthode, en cas de changement de couleur,
l'appel des fonctions n'a pas besoin d'être modifié : laisse tel que
car c'est seulement 2 lignes du code VBA qui doivent être mises
à jour (j'ai déjà indiqué lesquelles auparavant).
----------------------------------------
Même avec ce que j'ai écris, lis quand même mon message précédent :
https://forums.commentcamarche.net/forum/affich-34893977-nombre-de-valeurs-dans-des-cellules-fusionnees#18
À te lire pour avoir ton avis.
On s'y perdrait presque !!!
J'ai lu tous tes messages et vu tout tes fichiers !
J'ai bien coché en automatique le mode du classeur, cela vient peut-être du fichier qui est très lourd : 2130 lignes et plus de 200 colonnes.
Quoiqu'il en soit, afin de tester ton fichier n°2 je voulais comprendre ; les numéros de couleur n'apparaissent dans le code qu'en tant que commentaires ?
J'ai lu tous tes messages et vu tout tes fichiers !
J'ai bien coché en automatique le mode du classeur, cela vient peut-être du fichier qui est très lourd : 2130 lignes et plus de 200 colonnes.
Quoiqu'il en soit, afin de tester ton fichier n°2 je voulais comprendre ; les numéros de couleur n'apparaissent dans le code qu'en tant que commentaires ?
Dans le fichier 2, le numéro de couleur est transmis en 2ème paramètre lors de
l'appel de la fonction (c'est-à-dire par la formule de la feuille) ; exemple en AP2 :
=NbCells(LIGNE();38) => dans le code VBA, ce n° de couleur est : codX
⚠ Dans mes 2 fichiers, les colonnes jours vont de B à AM => dans le code VBA :
For col = 2 To 39 ; ces 2 nombres en gras sont à adapter dans ton vrai fichier !
Petite rectification pour ce que j'avais écris précédemment : si tu as une couleur
hors palette, tu n'es pas obligée d'utiliser la fonction RGB(), mais il faudra quand
même utiliser .Interior.Color au lieu de .Interior.ColorIndex
Le problème du calcul automatique est plus gênant car en fait, ce n'est pas selon
un changement de valeur de cellule mais selon une couleur de remplissage ;
je vais essayer de trouver une solution à ça, mais ce serait plus facile si tu joins
ton fichier Excel sans données confidentielles via mon-partage.fr => dans le
classeur joint, mets uniquement la 1ère feuille (celle avec le Planning).
À te lire pour la suite.
Ajout : regarde aussi ce fichier : https://mon-partage.fr/f/y6seCLpi/
Pour la plage AN2:AP4 il n'y a plus de formules ; fais comme d'habitude :
fusionne les cellules à colorer, applique la couleur de remplissage ;
sélectionne une cellule jour sur la même ligne => mise à jour des stats
de la ligne (colonnes AN à AP de la même ligne).
Alt F11 pour voir le code VBA, puis revenir sur Excel
⚠ J'ai supprimé Module1 qui contenait la fonction NbCells() car j'ai utilisé
une méthode différente : le code que tu vois est celui de Feuil1 ; de plus,
tu peux voir qu'au lieu de .Interior.ColorIndex, j'ai utilisé .Interior.Color
⚠ N'oublie pas que la mise à jour des stats de la ligne se fait seulement
si tu sélectionnes une autre cellule jour de cette ligne (colonnes B à AM).