VBA : colorier cellules fusionnées en fonction activecell

Résolu
Remi2236 Messages postés 86 Date d'inscription   Statut Membre Dernière intervention   -  
Remi2236 Messages postés 86 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

1) J'ai un tableau sur lequel j'ai, en colonne B, le nom de mes personnels et vu que j'ai beaucoup de personnels, j'ai mis en place un code pour que le nom du personnel se colore en vert quand je clique sur une cellule correspondant à sa ligne.

Exemple : Robert est inscrit en B1, quand je clique sur une des cellules sur la ligne 1 (C1, D1, E1, ...,etc) cela colore la cellule B1 en vert.

J'ai voulu mettre sur mon tableau 2 lignes par personnel et j'ai cherché pour que cela fonctionne sur des cellules fusionnées mais cela marche pour une ligne et non pour l'autre.

Exemple : j'ai fusionné la cellule B1 et B2 et inscrit Robert dedans, quand je clique sur une cellule de la ligne 1, ça me colore ma cellule fusionnée B1:B2, mais si je clique sur une cellule de la ligne 2, cela ne fait rien.
Je vous mets un bout de code comme pour l'exemple :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Application.Intersect(Target, Range("C1:NC2")) Is Nothing Then
Range("B1:B2").Cells(1).Interior.ColorIndex = xlColorIndexNone
Cells(Target.Row, "B").Interior.Color = RGB(0, 255, 0)
End If
End sub

Auriez-vous une solution ?

2) Dernière chose, j'ai essayé de faire ce code pour chaque personnel, et avec le code que j'ai mis, les cellules restent colorées quand je clique sur un autre personnel, sauf si je clique sur une cellule d'une ligne où rien ne se passe.

Exemple : j'ai fusionné la cellule B1:B2 et inscrit Robert dedans, j'ai fusionné la cellule B3:B4 et inscrit André dedans. Quand je clique sur une cellule de la ligne 1, cela colore la cellule fusionnée B1:B2, si je clique sur une cellule de la ligne 3, cela colore la cellule fusionnée B3:B4 mais la cellule fusionnée B1:B2 reste colorée. Mais si je clique sur une cellule de la ligne 2, la cellule fusionnée B1:B2 perd sa couleur.
Je vous mets le code que j'ai fait calqué à cet exemple :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Application.Intersect(Target, Range("C1:NC2")) Is Nothing Then
Range("B1:B2").Cells(1).Interior.ColorIndex = xlColorIndexNone
Cells(Target.Row, "B").Interior.Color = RGB(0, 255, 0)
End If
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Application.Intersect(Target, Range("C3:NC4")) Is Nothing Then
Range("B3:B4").Cells(1).Interior.ColorIndex = xlColorIndexNone
Cells(Target.Row, "B").Interior.Color = RGB(0, 255, 0)
End If
End sub

Auriez-vous une solution à ce problème ?

En vous remerciant d'avance ! Et désolé du pavé, je souhaitais être le plus exhaustif possible.

Cdlt,

Rémi

31 réponses

f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
Bonjour,

Fichier modifie pour inversion +/- dates et si vous cliquer sur l'adresse colonne jour en A2: defilement pour attendre la colonne du jour, clique une deuxieme fois vous ramene en colonne C

https://www.cjoint.com/c/LCioCJmCRzf
1
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
bonjour,
pour le premier point, as-tu essayé de mettre
1
à la place de
Target.Row
?
0
cs_Le Pivert Messages postés 7904 Date d'inscription   Statut Contributeur Dernière intervention   729
 
Bonjour,

comme ceci:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim DerniereLigneUtilisee As Long
DerniereLigneUtilisee = Cells(Rows.Count, 2).End(xlUp).Row 'où X est le numéro de la colonne donnée
If Not Application.Intersect(Target, Range("C1:NC" & DerniereLigneUtilisee)) Is Nothing Then
Range("B1:B" & DerniereLigneUtilisee).Interior.ColorIndex = xlColorIndexNone
Cells(Target.Row, 2).Interior.Color = RGB(0, 255, 0)
End If
End Sub


il faut cliquer sur la ligne haute des cellules fusionnées pour que cela fonctionne!


0
Remi2236 Messages postés 86 Date d'inscription   Statut Membre Dernière intervention   1
 
Bonjour,

Cela fonctionne comme ce que j'avais fait, mais il n'y a pas possibilité que cela fonctionne également avec la ligne basse des cellules fusionnées ?

Cdlt,

Rémi
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
Si, à condition de ne pas simplement utiliser
Target.Row
.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Remi2236 Messages postés 86 Date d'inscription   Statut Membre Dernière intervention   1
 
Bonsoir,

Que dois-je mettre alors ? Car si je remplace target.row par 1, ça me colorie la cellule B1 uniquement.
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
il faut faire un petit calcul qui retire un si la valeur est paire.
0
Remi2236 Messages postés 86 Date d'inscription   Statut Membre Dernière intervention   1 > yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention  
 
Bonjour,

Vous auriez un exemple qui reprendrait mon exemple :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Application.Intersect(Target, Range("C1:NC2")) Is Nothing Then
Range("B1:B2").Cells(1).Interior.ColorIndex = xlColorIndexNone
Cells(Target.Row, "B").Interior.Color = RGB(0, 255, 0)
End If
End sub

Cdlt,

Rémi
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > Remi2236 Messages postés 86 Date d'inscription   Statut Membre Dernière intervention  
 
un exemple:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Application.Intersect(Target, Range("C1:NC2")) Is Nothing Then
Range("B1:B2").Cells(1).Interior.ColorIndex = xlColorIndexNone
Cells(spmu(Target.Row), "B").Interior.Color = RGB(0, 255, 0)
End If
End Sub
Private Function spmu(n As Integer)
If n Mod 2 = 0 Then
    spmu = n - 1
Else
    spmu = n
End If
End Function
0
Remi2236 Messages postés 86 Date d'inscription   Statut Membre Dernière intervention   1
 
Bonjour,

Ca ne fonctionne pas. On ne pourrait pas se servir de la fonction Selection.Offset(1, 0) ?
Ou de demander à ce que si la 2ème ligne est sélectionnée, que cela reproduise le même effet que si on sélectionnait la première ligne ?

Cdlmt

Rémi
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
"Ca ne fonctionne pas": message d'erreur?
0
Remi2236 Messages postés 86 Date d'inscription   Statut Membre Dernière intervention   1
 
Bonsoir,

Je vous mets un fichier exemple pour vous montrer :
https://www.cjoint.com/c/LBrumTizrPA

Cdlt,

Rémi
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
Rien ne fonctionne. Tu n'as tenu compte d'aucune suggestion, ce fichier est bourré d'erreurs.

Recommence peut-être du point de départ.
0
Remi2236 Messages postés 86 Date d'inscription   Statut Membre Dernière intervention   1
 
Bonjour,
Mes connaissances en VBA sont assez faibles, je ne sais pas trop comment procéder. Vous pourriez m'aider pour le code ?
Cdlt
Rémi
0
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
Bonjour a vous tous,

Remi2236:
Ca Roule depuis oct 2021?
0
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
Bonjour,

Deux remarques pour le fichier que vous avez mis a dispo
le code n'est pas au bon endroit. Vous l'avez mis dans ThisWorkbook ald VBA de la feuil1
Vous n'avez besoin de votre fonction que de la ligne 1 a 6 pas pour la suite.
Si c'est seulement un exemple et que dans votre fichier les cellules fusionnées sont dispersées, y a peut-être moyen de reconnaitre des cellules fusionnées

Suite:

Detecter cellule appartient a une fusion:
Apres recherche: ex
Cells(1,1)Mergcells
donne True si fait partie d'une fusion et False si non
0
Remi2236 Messages postés 86 Date d'inscription   Statut Membre Dernière intervention   1
 
Bonjour f894009,

Très bien merci et toi depuis le temps ?

Tu vas peut-être pouvoir m'aider. C'est encore pour mon planning. Après l'avoir testé j'avais 2, 3 petites choses que je voulais modifier mais bon...je n'ai pas les connaissances nécessaires !

1) je voulais que quand je clique sur une ligne de mon planning, ça mette en surbrillance (vert dans l'exemple) le nom du personnel (sur l'exemple joint je les ai nommé 1,2,3,4,5... pour une question d'anonymat. Mais le souci c'est que j'ai des cellules fusionnées et je ne sais pas comment faire pour que la cellule fusionnée se mette en surbrillance.

2) C'est un peu long de se déplacer en scrollant avec la barre en bas. J'ai fait un Userform que je voulais utiliser pour scroller de semaine en semaine et que ça prenne en compte là où se trouve l'activecell. C'est à dire que si je suis au 2 janvier avec l'acticell, quand je clique sur le userform pour aller à droite ça prenne en compte qu'on est en semaine 1, et que si je suis en semaine 10 avec l'activecell, en appuyant sur le bouton de l'userform, ça ne me redéplace pas en semaine 2 en pensant que j'étais en semaine 1. Je ne sais pas si c'est très clair, manque de sommeil lol.

3) J'aurais aimé avoir un moyen de faire une remise à zéro du tableau, de pouvoir effacer toutes les shapes et les commentaire pour pouvoir le réutiliser en fin d'année.

4) J'aurais aimé que en ouvrant le tableau, cela me mette la colonne avec la date du jour à gauche de l'écran. Par exemple, si on est le 20 février, que ça me mette le 20 février à gauche de l'écran.

5) Enfin, quand je fais clic droit sur une cellule, ça ouvre l'userform pour définir l'activité du jour, mais en sauvegardant, je voudrais que si il n'y a pas de commentaire, ça enregistre quand même l'activité mais sans commentaire, mais que si il y en a, ça enregistre comme actuellement l'activité et que ça affiche le commentaire.

Ca fait beaucoup d'infos désolé. Mais si tu peux m'aider avec ça, ce serait super ! Comme tu connais un peu le fichier. Il n'y a pas d'urgence.

Merci en tout cas par avance.

Cdlt,

Rémi
0
Remi2236 Messages postés 86 Date d'inscription   Statut Membre Dernière intervention   1
 
Avec le fichier c'est mieux lol

https://www.cjoint.com/c/LBuumKNgJyQ
0
Remi2236 Messages postés 86 Date d'inscription   Statut Membre Dernière intervention   1
 
Et le mdp : 2236
0
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
Bonjour,
Ca roule pour le moment.

Dans mon post, j'ai mis l'essentiel de la méthode. Mais vu que vous etes a la ramasse, je vous fais ca.
Vous pensez quand meme a vous former un peu meme si le cas present, ca ne coule pas de source.
Avez vous fait quelques recherches?
Si oui, c'est surement l'adaptation qui vous coince.

Je recupere le fichier et regarde la chose


Suite:
d'infos désolé
Pauvre de nous.

Pouvez me la refaire pour le 2
0
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
Suite:

1-3-4-5 fait
0
Remi2236 Messages postés 86 Date d'inscription   Statut Membre Dernière intervention   1
 
Bonjour,

Tant mieux si vous vous portez bien vu la situation sanitaire actuelle.

Pour le 2, j'ai fait un Userform avec deux boutons qui apparait au lancement du fichier, et j'aimerais qu'ils me permettent de me déplacer de semaine en semaine mais en fonction de la position de l'activecell.
Par exemple, si mon activecell est au 15 mars (c'est en semaine 11), si j'appuie sur le bouton de droite, je voudrais que ça me déplace à la semaine 12, encore une fois en semaine 13 etc....et si j'appuie sur le bouton de gauche, que ça me déplace à la semaine 10, puis 9, etc...

Je ne sais pas si je suis plus clair.

Cdlt,

rémi
0
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
Re,
Je ne sais pas si je suis plus clair.
On peu plus clair. Pourquoi mois precedent/suivant alors que vous voulez des semaines?
Deplacement au premier jour de la semaine ou ?
0
Remi2236 Messages postés 86 Date d'inscription   Statut Membre Dernière intervention   1
 
Re,

C'est bien les semaines que je veux, semaines suivantes/précédentes

Le du top serait que l'activecell reste sur la ligne de la personne sur laquelle elle était avant de cliquer sur le bouton, et que ça me déplace l'activecell au premier jour de la semaine suivante/precedente

Cdlt

Rémi
0
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
Re,

Ok
0
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
Bonjour,

Fichier modifie: https://www.cjoint.com/c/LBxq4zSzOhf
0
Remi2236 Messages postés 86 Date d'inscription   Statut Membre Dernière intervention   1
 
Bonjour,

Merci ! Je teste ça chez moi en rentrant.

Cordialement,

Rémi
0