[VBA] MFC par formules que j'aimerai reproduire en code vba.

Ctrl-Alt-Suppr

XLDnaute Junior
Bonjour à tous, bonne "rentrée" (plus que onze mois à attendre ...).

Je galère un peu, et les exemples VBA sur le site bien connu sont trop sophistiqués pour ce que je veux faire :
La mise en forme conditionnelle

J'aimerai transformer mes formules basiques de MFC qui fonctionnent (parce que j'en ai marre que ma MFC ne soit pas figée et parte en live à chaque insertion de ligne ou modif' multiutilisateurs) en code VBA aboutissant au même résultat visuel.


1/
Plage de la colonne testée si remplie (quand non vide = généralement une date)
=$I323:$I999<>""

Mise en forme, fond vert pomme (on ne se moque pas)

S'applique à :
=$A$323:$J$999;$R$323:$U$999
______________________________

2/
Autre plage dans une autre colonne testée
=$O323:$O999<>""

Mise en forme, fond vert foncé

S'applique à :
=$K$323:$O$999
______________________________

3/
Parfois dans tout le tableau
Parfois dans une seule colonne

si la case contient "AAA" écrire en rouge + gras
si la case contient "BBB" écrire en noir + gras + fond jaune
...


Si une âme charitable pouvait me donner la structure du code, je me débrouillerais pour les finitions ...
Par avance, merci.
 

phlaurent55

Nous a quittés en 2020
Repose en paix
Re : [VBA] MFC par formules que j'aimerai reproduire en code vba.

Re,

pour être plus complet:

Code:
Sub Macro1()
For i = 323 To 999
If Cells(i, 9) <> "" Then
Cells(i, 9).Interior.ColorIndex = 43
Else
Cells(i, 9).Interior.ColorIndex = -4142
End If
Next i
End Sub

à+
Philippe
 

Ctrl-Alt-Suppr

XLDnaute Junior
Re : [VBA] MFC par formules que j'aimerai reproduire en code vba.

Merci pour vos réponses.
Je me re-penche (seulement) sur ma mise en forme que j'aimerai figer une fois pour toute...

Je n'arrive pas à grand chose.
Pourriez-vous m'aider à revoir cette ébauche :


Code:
 Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo fin


 If Target.Column = 9 Then
   Cells(Target.Row, 1).Resize(, 9).Interior.ColorIndex = 43
   Cells(Target.Row, 18).Resize(, 4).Interior.ColorIndex = 43
  Else
   Cells(Target.Row, 1).Resize(, 9).Interior.ColorIndex = -43
   Cells(Target.Row, 18).Resize(, 4).Interior.ColorIndex = -43
 End If

 If Target.Column = 15 Then
   Cells(Target.Row, 11).Resize(, 5).Interior.ColorIndex = 10
  Else
   Cells(Target.Row, 11).Resize(, 5).Interior.ColorIndex = -10
 End If


For chiffre = 323 To 999
For lettre = 1 To 30

If Cells(chiffre, lettre).Value Like "*faire *" Then
            ActiveCell.Interior.Color = 0
            ActiveCell.Font.ColorIndex = 3
        End If
        
If Cells(chiffre, lettre).Value Like "*urgent *" Then
            ActiveCell.Interior.Color = 43
            ActiveCell.Font.ColorIndex = 3
        End If
    
fin:
End Sub
 

Ctrl-Alt-Suppr

XLDnaute Junior
Re : [VBA] MFC par formules que j'aimerai reproduire en code vba.

La première partie de mon code entraîne des bugs incompréhensibles.
(le coloriage lié au test de la colonne "O" remplie la ligne et celle 4 lignes au dessus)

Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo fin

If Target.Column = 9 Then
Cells(Target.Row, 1).Resize(, 10).Interior.Color = RGB(200, 255, 150)
Cells(Target.Row, 18).Resize(, 4).Interior.Color = RGB(200, 255, 150)
Else
Cells(Target.Row, 1).Resize(, 10).Interior.Color = RGB(255, 255, 255)
Cells(Target.Row, 18).Resize(, 4).Interior.Color = RGB(255, 255, 255)
End If

If Target.Column = 15 Then
Cells(Target.Row, 11).Resize(, 5).Interior.ColorIndex = 43
Else
Cells(Target.Row, 11).Resize(, 5).Interior.ColorIndex = -43
End If

fin:
End Sub




Je peux simplifier le code pour utiliser 2 règles de MFC
Et ne gérer en vba que la mise en valeur de certains mots clés.
C'est dommage, mais cela pourrait alléger l'utilisation au quotidien du tableau.

Toutefois j'ai plusieurs problèmes :
- le code ci-dessous ne fonctionne pas
- j'aimerai une sorte de réversibilité (quand on efface la contenu = le format de la cellule redevient neutre)
- j'aimerai que lorsqu'on appuie sur la touche "suppr" dans une cellule vide, celle-ci ne devienne pas noire

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo fin

Dim chiffre As Long
Dim lettre As Long

For chiffre = 323 To 999
For lettre = 1 To 30

If Cells(chiffre, lettre).Value Like "*faire*" Then
            ActiveCell.Interior.Color = 0
            ActiveCell.Font.ColorIndex = 3
        End If
        
If Cells(chiffre, lettre).Value Like "*urgent*" Then
            ActiveCell.Interior.Color = 43
            ActiveCell.Font.ColorIndex = 3
        End If
    
Next lettre
Next chiffre
    
fin:
End Sub
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 196
Messages
2 086 100
Membres
103 116
dernier inscrit
kutobi87