Colorer les cellules d'un tableau suivant le contenu

Fermé
Gazpaschaud Messages postés 14 Date d'inscription lundi 12 décembre 2016 Statut Membre Dernière intervention 19 décembre 2016 - 12 déc. 2016 à 16:45
Gazpaschaud Messages postés 14 Date d'inscription lundi 12 décembre 2016 Statut Membre Dernière intervention 19 décembre 2016 - 17 déc. 2016 à 09:21
Bonjour, et d'avance merci de l'aide
Je souhaiterai mettre en place grace à une VBA la coloration de certaines cellules de mon tableau en fonction du contenu.
l'amplitude du tableau débute à la ligne 6 et se termine, pour l'instant à la ligne 14770 ; d'autres lignes pouvant être rajoutées à l'intérieur de cette amplitude
Pour les couleurs j'utilise ci-dessous les références excel exemple *32*

1- Pour la colonne A :
Je n'ai que deux entrées possibles 1 ou 2
-si je rentre "1" la cellule en question doit se colorer en *28*
-si je rentre "2" couleur *22*

2-Pour la colonne B :
J'ai 30 possibilités de texte de F1, F2,F3 etc. jusqu'à F30
Pour faire plus simple j'ai regroupé afin de n'avoir que 6 couleurs :
si je rentre F1-F7-F13-F19-F25 couleur du fond *6*
si je rentre F2-F8-F14-F20-F26 couleur du fond *8*
si je rentre F3-F9-F15-F21-F27 couleur du fond *44*
si je rentre F4-F10-F16-F22-F28 couleur du fond *43*
si je rentre F5-F11-F17-F23-F29 couleur du fond *32* texte en blanc
si je rentre F9-F12-F18-F24-F30 couleur du fond *18* texte en blanc

3- Pour la colonne C :
1 seul texte possible "OK" couleur du fond *4* texte en blanc

4- Pour la colonne J :
j'ai deux possiblitiés de texte :
soit "D" couleur *46* et "R" couleur *6*

5- Pour les colonnes L - R - U
plusieurs possibilités de chiffres et nombres exemple :
si la cellule contient 46 ou 47 couleur *4*
si la cellule contient 42 ou 69 couleur *39*
si la cellule contient 32 ou 80 ou 81 ou 82 couleur *45*
si la cellule contient 07 ou 30 ou 26 couleur *35*

Merci par avance







8 réponses

Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 149
14 déc. 2016 à 17:59
Bonsoir,

Pourquoi en VBA ?
La Mise en Forme Conditionnelle permet de faire ce que tu souhaites. Il y a juste un petit effort pour avoir exactement la bonne couleur.

A+
0
Gazpaschaud Messages postés 14 Date d'inscription lundi 12 décembre 2016 Statut Membre Dernière intervention 19 décembre 2016
14 déc. 2016 à 22:11
Je m'explique pourquoi j'essaye la solution VBA, car j'avais déjà fait en MFC problèmes qui découlent des MFC :
1- Quand on a un nombre important de MFC, et que l'on souhaite les gérer on s'aperçoit dans le menu gérer "MFC", que les MFC initialement installées se "dédoublent" à l'infini, à chaque fois que l'on insère une ligne dans la base de donnée particulièrement. Ma base de données s'allongent de jour en jour et cela devient à la longue ingérable on est obligé de tout effacer par colonne, et pour chaque colonne refaire les MFC....
2- Ce "dédoublement" des MFC a entraîné en ce qui me concerne un ralentissement énorme lorsque par exemple je voulais insérer une ligne pas moins de deux minutes pour que cela se fasse (j'ai chronométré) idem quand je saisissais dans les cellules concernées par les MFC même durée d'attente.
J'ai supprimé toutes mes MFC et tout est rentré dans l'ordre
Voilà donc les raisons de ma demande
J'ai fait un petit essai "bricolage en recopiant une VBA trouvée sur le site, cela fonctionne mais je suis incapable (totalement débutant) d'en écrire une aussi complexe.
Merci de l'aide par avance si cela est réalisable
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 708
Modifié par gbinforme le 14/12/2016 à 23:50
Bonjour,

les MFC initialement installées se "dédoublent" à l'infini,
Pas sûr que tu ais utilisé les MFC pour l'éviter.
Tu fais une coloration par colonne et donc si tu mets ta MFC sur la colonne elle ne se dédouble pas puisque si tu insères une ligne la plage reste la même alors que si tu choisis de la ligne 1 à 300, tu scindes la plage en introduisant une nouvelle ligne.
Tu demandes une coloration par macro : cela ne sera pas neutre non plus car tout code qui s'exécute consomme du temps.
Voici la macro à mettre dans la feuille concernée :
Private Sub Worksheet_Change(ByVal sel As Range)
If sel.CountLarge > 1 Then Exit Sub
If Not Intersect(sel, [A:A]) Is Nothing Then
    Select Case sel.Value
        Case 1: sel.Interior.ColorIndex = 28
        Case 2: sel.Interior.ColorIndex = 22
        Case Else: sel.Interior.ColorIndex = xlNone
    End Select
End If
If Not Intersect(sel, [B:B]) Is Nothing Then
    Select Case sel.Value
        Case "F1", "F7", "F13", "F19", "F25": sel.Interior.ColorIndex = 6
        Case "F2", "F8", "F14", "F20", "F26": sel.Interior.ColorIndex = 8
        Case "F3", "F9", "F15", "F21", "F27": sel.Interior.ColorIndex = 44
        Case "F4", "F10", "F16", "F22", "F28": sel.Interior.ColorIndex = 43
        Case "F5", "F11", "F17", "F23", "F29": sel.Interior.ColorIndex = 32
                sel.Font.ThemeColor = xlThemeColorDark1
        Case "F9", "F12", "F18", "F24", "F30": sel.Interior.ColorIndex = 18
                sel.Font.ThemeColor = xlThemeColorDark1
        Case Else: sel.Interior.ColorIndex = xlNone
    End Select
End If
If Not Intersect(sel, [C:C]) Is Nothing Then
    If sel.Value = "OK" Then
        sel.Interior.ColorIndex = 4
        sel.Font.ThemeColor = xlThemeColorDark1
    Else
        sel.Interior.ColorIndex = xlNone
    End If
End If
If Not Intersect(sel, [J:J]) Is Nothing Then
    Select Case sel.Value
        Case "D": sel.Interior.ColorIndex = 46
        Case "R": sel.Interior.ColorIndex = 6
        Case Else: sel.Interior.ColorIndex = xlNone
    End Select
End If
If Not Intersect(sel, [L:L]) Is Nothing _
    Or Not Intersect(sel, [R:R]) Is Nothing _
    Or Not Intersect(sel, [U:U]) Is Nothing Then
    Select Case sel.Value
        Case 46, 47: sel.Interior.ColorIndex = 4 ' couleur *4*
        Case 42, 69: sel.Interior.ColorIndex = 39 ' couleur *39*
        Case 32, 80, 81, 82: sel.Interior.ColorIndex = 45 ' couleur *45*
        Case 7, 30, 26: sel.Interior.ColorIndex = 35 ' couleur *35*
    End Select
End If
End Sub

Toujours zen
La perfection est atteinte, non pas lorsqu'il n'y a plus rien à ajouter, mais lorsqu'il n'y a plus rien à retirer.  Antoine de Saint-Exupéry
0
Gazpaschaud Messages postés 14 Date d'inscription lundi 12 décembre 2016 Statut Membre Dernière intervention 19 décembre 2016
15 déc. 2016 à 07:40
Merci de la rapidité pour me répondre mais je ne le vois que ce matin.
J'assure à 100% que toutes mes MFC étaient bien faites par colonne et non pas pour un groupe de lignes.

Dans ma version actuelle de la BD j'ai d'ailleurs conservé une MFC sur la colonne J et elle s'est et se dédouble toujours.

Peut-être que je me trompe dans la procédure d'installation de la MFC ?
Je viens à l'instant de refaire un essai :
1- Sélection colonne C, installation d'une MFC référence de la colonne par excel =$C:$C
2- Je reviens sur la BD je fais insertion 1 ligne : sur la MFC j'ai maintenant deux références de MFC :
la première j'ai : =$C$14791 (réf de la ligne d'insertion)
et deuxième j'ai : =$C$1:$C$14790;$C$14792:$C$1048576
(donc les deux autres portion avant et après l'insertion).
A noter que Excel attribue en premier $C et qui devient $C$
Comment éviter cette multiplication de la MFC à chaque fois que l'on insère une ligne ?
Car je suis bien d'accord que les MFC seraient bien plus souples
J'attends donc pour voir pour la VBA
Merci encore de votre patience
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 708
15 déc. 2016 à 08:35
Bonjour,

Tu fonctionnes avec quelle version d'excel ?

J'attends donc pour voir pour la VBA tu as vu la macro ?
0
Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 149
15 déc. 2016 à 11:12
Bonjour Gazpaschaud,

(et bonjour gbinforme)
Je n'arrive pas à reproduire le dédoublement non plus.
Pour la colonne B :
- je suppose que tu voulais indiquer F6 et non F9 en dernière ligne ;
- en appliquant un format personnalisé, tu peux saisir un nombre et avoir le F en préposé ;
- partant du deuxième tiret tu peux simplifier le cas en fonction du nombre saisi modulo 6

A+
0
Gazpaschaud Messages postés 14 Date d'inscription lundi 12 décembre 2016 Statut Membre Dernière intervention 19 décembre 2016 > Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023
15 déc. 2016 à 13:12
Effectivement merci de me signaler l'erreur du F6, étourderie de ma part...
0
Gazpaschaud Messages postés 14 Date d'inscription lundi 12 décembre 2016 Statut Membre Dernière intervention 19 décembre 2016
15 déc. 2016 à 11:11
J'ai la version Microsoft Office Famille et Etudiant 2013
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 708
15 déc. 2016 à 18:29
Bonsoir,

J'ai essayé aussi avec 2013 mais lorsque "S'applique à" est valorisé
=$A:$A
par exemple, l'insertion de lignes ne le fait pas changer comme c'était le cas avant.
As-tu essayé la macro que je t'ai mise ?
0
Gazpaschaud Messages postés 14 Date d'inscription lundi 12 décembre 2016 Statut Membre Dernière intervention 19 décembre 2016 > gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020
15 déc. 2016 à 22:00
Non comme je l'ai déjà dit je n'ai pas voulu encore faire d'essais avec la VBA
J'attendais éventuelle explication sur les MFC.
Justement je ne comprends pas :
"s'applique à" est valorisé ?
Si l'insertion de lignes ne perturbe pas la MFC c'est la solution mais là je ne saisis pas ce qu'il faut faire ?
0
Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 149
16 déc. 2016 à 01:57
à part transmettre tes fichiers avant-après (càd MFC OK puis doublonnage - via https://www.cjoint.com/ ), je ne vois pas comment on peut t'aider. Chez nous, l'insertion d'une ligne ne pose pas de problème et gbinforme a répondu à ta question initiale.
0

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

Posez votre question
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 708
16 déc. 2016 à 09:10
Bonjour,

Un petit bout d'exemple sur lequel tu peux essayer de reproduire les dédoublements que tu nous signales

https://www.cjoint.com/c/FLqigAYQMAl

Si cela se produit chez toi, renvoies nous le résultat.

Ta version Office se met-elle à jour automatiquement ?
0
Gazpaschaud Messages postés 14 Date d'inscription lundi 12 décembre 2016 Statut Membre Dernière intervention 19 décembre 2016
16 déc. 2016 à 16:35
Bonjour et désolé mais quelques priorités familiales m'ont fait tardé à vous répondre :
Ci-dessous les deux classeurs :
1er classeur :
J'ai supprimé toutes les VBA Existantes (je pensais que cela pouvait venir de là).
J'ai donc mis en place les MFC pour les colonnes A-B-D et J
pour la colonne B je n'ai mis que 7 MFC au lieu des 30 prévues. Les références pour toute les MFC sont du type =$A:$A

https://www.cjoint.com/c/FLqprZ4pSX1

2ème Classeur :
Copie du premier et j'ai fait deux exemples d'insertion :
1- à la ligne 50 j'ai inséré seulement une ligne pas de modification dans les MFC
2- à la ligne 51 j'ai fait un copier-insertion de la ligne 108 les MFC sont modifiées...?
Pour chaque type de MFC on a une MFC distincte pour la ligne 51 exemple : =$A$51
Puis une pour la ligne 1 à 50 et ensuite 1 pour la ligne 52 à 1048576 (=$A$1:$A$50;$A$52:$A$1048576)

https://www.cjoint.com/c/FLqpAUf6Fr1

Voilà donc mon problème qui est flagrant et je ne vois pas d'où cela peut venir
Cordialement à vous pour la solution !
0
Zoul67 Messages postés 1959 Date d'inscription lundi 3 mai 2010 Statut Membre Dernière intervention 30 janvier 2023 149
16 déc. 2016 à 19:28
Bonsoir Gazpaschaud (j'aime bien ton pseudo),

La réponse est dans ta dernière précision... J'avais testé (1) mais pas (2).
Tu peux éviter le doublonnement en faisant un collage spécial "Fusionner la mise en forme conditionnelle".
Au passage en colonne B tu peux restreindre à 6 formules de MFC.

Ce fichier est tout de même très coloré et certaines saisies et certains affichages sont... surprenants.
0
Gazpaschaud Messages postés 14 Date d'inscription lundi 12 décembre 2016 Statut Membre Dernière intervention 19 décembre 2016
17 déc. 2016 à 08:09
Bonjour, je suis effectivement assez friand des jeux de mots et autres calembourgs.
1- Solution pour MFC :
Donc si je comprends bien la solution est pour toutes insertions de ligne(s) de passer par un collage spécial ?
Pour l'exemple que j'ai mis en fichier joint, j'avais enlevé toutes les vba pensant à un éventuel conflit, il en est rien tant mieux ! Mais toutes mes insertions de lignes et paramétrages de ces lignes se font par VBA, et là je ne sais pas du tout comment traduire en code ce collage spécial voici un code "standard que j'utilise pour exemple :
1-Copie et insertion 1 ligne
<code>Sub Copie_Ligne_Basse_Famille()
Dim n%
n = selection.Row
With ActiveSheet
[\\B_Copie_Ligne_Basse_Famille].Copy
.Range("A" & n).Resize(, 21).Insert xlShiftDown
End With
End Sub

2- Colonne B Nombre de MFC
Oui je suis d'accord pour limiter à 6 MFC, mais je n'arrive pas à écrire correctement plusieurs choix possibles dans "Mettre en forme le texte contenant..." : comment doit-on l'écrire ? :
F1. F6. F13
F1 ; F6 ; F13
"F1" ; "F6" ; "F13" j'ai fait plusieurs essais infructueux

2- Côté surprenant (LOL)
Cette base de données n'est qu'une "interface" avec la saisie sur un site de généalogie en ligne sur lequel je mets à jour seulement les données "définitives et sures", mon interface me permets d'une part de pouvoir faire un rapprochement entre les deux et surtout de gérer les individus dits "potentiels". Je l'ai crée il y a à peu près 10 ans... elle a donc bien évoluée. Certes je reconnais qu'elle est bien colorée (rire), mais c'est ainsi que je me suis habitué et j'arrive à me repérer plus facilement. Par contre je suis très intéressé d'avoir une vue extérieure, c'est comme cela que l'on s'améliore, quand vous dites "Saisies et affichages surprenant"
Merci encore pour l'aide
0
Gazpaschaud Messages postés 14 Date d'inscription lundi 12 décembre 2016 Statut Membre Dernière intervention 19 décembre 2016
17 déc. 2016 à 09:21
Pour ce qui est ce la colonne B c'est bon j'ai trouvé le code pour valider les différentes propositions F1-F2-F3 etc...
Persévérance, persévérance...
0