MFC avec VBA
Bonjour à tous !
Je cherche à faire une espèce de mise en forme conditionnelle avec du VBA et je rencontre quelques difficultés. J’ai un tableau structuré sous Excel 2013 :
Avec du VBA, j’aimerais colorer les cellules « Utilisateur » qui n’ont pas de « Nombre d’accès ABC », « Prix total ABC », « Nombre d’accès XYZ » et « Prix total XYZ ». Ce qui donnerait :
J’avais un début de code mais je débute et évidemment, ça ne fonctionne pas :
Sub MFC()
Dim ColonnesTab As Range
Dim A As Integer
Set ColonnesTab = Range("Tableau1[Nombre d'accès ABC],Tableau1[Prix total ABC],Tableau1[Nombre d'accès XYZ],Tableau1[Prix total XYZ]")
For A = ColonnesTab.Rows.Count To 1 Step -1
If ColonnesTab(A).Value = "" Then ColonnesTab.ListObject.ListRows(A).Font.ColorIndex = 8
Next A
End SubJ’avais l’intention de me débrouiller seul donc j’avais opté pour la solution facile de la coloration, mais si par hasard vous savez comment ajouter une icône du style warning à côté du nom, ce serait encore mieux…
Merci d’avance pour l’attention que vous porterez à ma demande.
Cordialement,
Bibou
Bonjour,
Ton code n'a rien à voir avec la mise en place d'une MFC. Tu veux mettre une MFC ou colorer ?
Si MFC, pourquoi par VBA ? Alors qu'il s'agit en principe d'une opération ponctuelle.
Cordialement
Je voudrais intégrer ce VBA à un traitement. C'est donc une mise en forme qui doit se faire pendant celui-ci selon la condition "si les colonnes [...] ne contiennent pas de données, alors colorer la cellule "Utilisateur" correspondante".
J'associais donc ce traitement à une MFC mais peut-être que je me trompe.
Bonjour,
A tester.
Cdlt.
Public Sub DEMO()
Dim ws As Worksheet
Dim objList As ListObject
Dim lCols As Long, lRows As Long
Dim cn As Long, rw As Long
Application.ScreenUpdating = False
Set ws = ActiveSheet
Set objList = ws.ListObjects(1)
With objList
lCols = .ListColumns.Count: lRows = .ListRows.Count
.ListColumns(1).DataBodyRange.Interior.ColorIndex = xlColorIndexNone
For rw = 1 To lRows
For cn = 3 To lCols
If .DataBodyRange(rw, cn) = vbNullString Then
.DataBodyRange(rw, 1).Interior.ColorIndex = 6
Exit For
End If
Next cn
Next rw
End With
Set objList = Nothing: Set ws = Nothing
End SubSi ta MFC est en place les couleurs seront selon les conditions. Il n'y a plus à y revenir.
Quel que soit le traitement.
Merci à vous deux pour vos réponses.
MFerrand a écrit :Si ta MFC est en place les couleurs seront selon les conditions. Il n'y a plus à y revenir.
Quel que soit le traitement.
Effectivement, je n'ai pas été suffisamment précis dans mes explications. Je voulais créer un système de case à cocher qui ferait varier la coloration selon les critères. Sinon, oui la MFC classique est suffisante !
Jean-Eric a écrit :Bonjour,
A tester.
Cdlt.
Public Sub DEMO() Dim ws As Worksheet Dim objList As ListObject Dim lCols As Long, lRows As Long Dim cn As Long, rw As Long Application.ScreenUpdating = False Set ws = ActiveSheet Set objList = ws.ListObjects(1) With objList lCols = .ListColumns.Count: lRows = .ListRows.Count .ListColumns(1).DataBodyRange.Interior.ColorIndex = xlColorIndexNone For rw = 1 To lRows For cn = 3 To lCols If .DataBodyRange(rw, cn) = vbNullString Then .DataBodyRange(rw, 1).Interior.ColorIndex = 6 Exit For End If Next cn Next rw End With Set objList = Nothing: Set ws = Nothing End Sub
Ce code colore tous les "Utilisateur" qui ont soit du ABC soit du XYZ soit rien. Finalement c'est le contraire de ce que je demandais mais c'est aussi ce qu'il me fallait, donc merci !
Je vais décliner ce code en fonction de mes critères.
Sujet résolu et encore merci à vous deux !
Ton explication ne me persuade pas du tout de la nécessité d'utiliser VBA : des cases à cocher peuvent s'associer à une cellule liée, laquelle n'a aucune difficulté à être prise en compte dans une MFC.
Mais on peut macroter pour le simple plaisir de macroter. Là, pas la peine d'en discuter.
MFerrand a écrit :Ton explication ne me persuade pas du tout de la nécessité d'utiliser VBA : des cases à cocher peuvent s'associer à une cellule liée, laquelle n'a aucune difficulté à être prise en compte dans une MFC.
Je ne cherche pas à "macroter pour macroter", mais je ne comprends pas bien ton explication. Peux-tu m'en dire plus, s'il te plait?
Edit: j'ai trouvé la réponse: https://forum.excel-pratique.com/excel/mise-en-forme-a-partir-d-une-case-a-cocher-t24935.html
Merci pour tes conseils ! Je vais opter pour cette solution.
Bonne continuation,
Bibou
Rien à dire de plus : une MFC implique une ou des conditions, qui réunies aboutiront à l'application du format conditionnel défini.
Tu as 3 conditions, la MFC peut les prendre en compte.
Tu veux les faire varier : la MFC peut prendre ces variations en compte ! Et tu ne seras pas plus avancé avec VBA, car jusqu'à présent tu ne lui as pas expliqué qu'il y aurait des variations, et il ne va pas le deviner !! Et ta proc. VBA, devra être lancée à chaque changement pour défaire et refaire, questions dont tu n'as plus à te préoccuper avec une MFC.