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 :

mfc1

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 :

mfc2

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 Sub

J’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 Sub

Si 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.

Rechercher des sujets similaires à "mfc vba"