Nombre de valeurs dans des cellules fusionnées
Fermé
Dixtit
Messages postés
16
Date d'inscription
mercredi 27 septembre 2017
Statut
Membre
Dernière intervention
12 mai 2022
-
27 sept. 2017 à 16:54
gérard - 1 oct. 2017 à 18:36
gérard - 1 oct. 2017 à 18:36
A voir également:
- Nombre de valeurs dans des cellules fusionnées
- Formule excel pour additionner plusieurs cellules - Guide
- Verrouiller des cellules excel - Guide
- Aller à la ligne dans une cellule excel - Guide
- Le nombre de tentatives de déverrouillage incorrectes est trop élevé samsung ✓ - Forum Samsung
- Dans ce fichier, réalisez le graphique xy (nuage de points ou dispersion), avec les x en abscisse. dans le graphique, les points dessinent un nombre. lequel ? - Forum Bureautique
7 réponses
yg_be
Messages postés
23363
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
2 décembre 2024
Ambassadeur
1 556
27 sept. 2017 à 17:48
27 sept. 2017 à 17:48
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
Dixtit
Messages postés
16
Date d'inscription
mercredi 27 septembre 2017
Statut
Membre
Dernière intervention
12 mai 2022
28 sept. 2017 à 09:01
28 sept. 2017 à 09:01
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
Dixtit
Messages postés
16
Date d'inscription
mercredi 27 septembre 2017
Statut
Membre
Dernière intervention
12 mai 2022
28 sept. 2017 à 14:48
28 sept. 2017 à 14:48
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 !
Dixtit
Messages postés
16
Date d'inscription
mercredi 27 septembre 2017
Statut
Membre
Dernière intervention
12 mai 2022
>
gérard
28 sept. 2017 à 14:48
28 sept. 2017 à 14:48
Et merci !!!!
gérard
>
Dixtit
Messages postés
16
Date d'inscription
mercredi 27 septembre 2017
Statut
Membre
Dernière intervention
12 mai 2022
28 sept. 2017 à 15:20
28 sept. 2017 à 15:20
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.
Dixtit
Messages postés
16
Date d'inscription
mercredi 27 septembre 2017
Statut
Membre
Dernière intervention
12 mai 2022
>
gérard
28 sept. 2017 à 15:26
28 sept. 2017 à 15:26
Question (peut-être bête, voir sûrement) comment tu sais quel nombre correspond à quelle couleur ?
Encore mille merci du temps passé !
Encore mille merci du temps passé !
yg_be
Messages postés
23363
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
2 décembre 2024
Ambassadeur
1 556
28 sept. 2017 à 10:59
28 sept. 2017 à 10:59
il me semble que cela fonctionne bien:
=cptFusion(4:4) retourne bien la valeur 10.
=cptFusion(4:4) retourne bien la valeur 10.
Dixtit
Messages postés
16
Date d'inscription
mercredi 27 septembre 2017
Statut
Membre
Dernière intervention
12 mai 2022
28 sept. 2017 à 13:13
28 sept. 2017 à 13:13
Oui mais cela ne fait pas la distinction entre RTT-CP.
Je veux qu'il additionne les cellules (fusionnées ou non) selon ce qu'elles contiennent.
Je veux qu'il additionne les cellules (fusionnées ou non) selon ce qu'elles contiennent.
yg_be
Messages postés
23363
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
2 décembre 2024
1 556
>
Dixtit
Messages postés
16
Date d'inscription
mercredi 27 septembre 2017
Statut
Membre
Dernière intervention
12 mai 2022
28 sept. 2017 à 14:41
28 sept. 2017 à 14:41
peut-être souhaites-tu simplement une fonction que tu pourrais appeler ainsi:
=cptFusion($B3:$AM3;"RTT")?
Dixtit
Messages postés
16
Date d'inscription
mercredi 27 septembre 2017
Statut
Membre
Dernière intervention
12 mai 2022
>
yg_be
Messages postés
23363
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
2 décembre 2024
28 sept. 2017 à 14:48
28 sept. 2017 à 14:48
J'ai essayé mais je n'y suis pas encore arrivé ! Je lâche pas...
Merci
Merci
yg_be
Messages postés
23363
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
2 décembre 2024
1 556
>
Dixtit
Messages postés
16
Date d'inscription
mercredi 27 septembre 2017
Statut
Membre
Dernière intervention
12 mai 2022
28 sept. 2017 à 15:02
28 sept. 2017 à 15:02
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
23363
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
2 décembre 2024
Ambassadeur
1 556
28 sept. 2017 à 15:14
28 sept. 2017 à 15:14
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
Dixtit
Messages postés
16
Date d'inscription
mercredi 27 septembre 2017
Statut
Membre
Dernière intervention
12 mai 2022
28 sept. 2017 à 15:27
28 sept. 2017 à 15:27
J'avoue être novice de VBA !
Mais du coup je ne vois pas où tu spécifie la valeur recherchée ?
Merci encore
Mais du coup je ne vois pas où tu spécifie la valeur recherchée ?
Merci encore
yg_be
Messages postés
23363
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
2 décembre 2024
1 556
>
Dixtit
Messages postés
16
Date d'inscription
mercredi 27 septembre 2017
Statut
Membre
Dernière intervention
12 mai 2022
28 sept. 2017 à 18:57
28 sept. 2017 à 18:57
par exemple, en AR2, tu mets:
=cptfusion2($B2:$AM2;AR$1)
yg_be
Messages postés
23363
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
2 décembre 2024
Ambassadeur
1 556
Modifié le 28 sept. 2017 à 19:49
Modifié le 28 sept. 2017 à 19:49
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.
Dixtit
Messages postés
16
Date d'inscription
mercredi 27 septembre 2017
Statut
Membre
Dernière intervention
12 mai 2022
29 sept. 2017 à 15:39
29 sept. 2017 à 15:39
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 ?
gérard
>
Dixtit
Messages postés
16
Date d'inscription
mercredi 27 septembre 2017
Statut
Membre
Dernière intervention
12 mai 2022
Modifié le 29 sept. 2017 à 16:56
Modifié le 29 sept. 2017 à 16:56
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).