Formule MFC en VBA

Bonjour,

j'aimerais supprimer ma MFC et la remplacer par un code vba :

=OU(NB.SI(B$4:B$11;"A*")=0;NB.SI.ENS(B$4:B$11;"M*";B$4:B$11;"<>MAL";B$4:B$11;"<>mal")=0;NB.SI(B$4:B$11;"N*")=0;NB.SI(B$4:B$11;" ")>0)

Donc la case B12 devient rouge si dans la colonne de B4 à B11 ne contient pas au moins un caractere commencent par A et un autre commencent par N et un autre commencent par M mais different de MAL ou mal.

Cette MFC est recopie pour chaque colonne de B4-B11, C4-C1,...... à AF4-AF11, donc le resultat de chaque colonne est coloreé

merci d'avance

Bonjour

Avec cette formule, la couleur est toujours en B12 que l'on mette A1 ou A ou L1 de B4 à B11

Crdlt

Bonjour Dan,

En fait cette formule est inscrite dans la case B12 avec une MFC et en effet, le resultat n'apparait qu'en B12 pour la colonne B4-B11 et ensuite j'ai tiré cette case sur toute la plage B12 vers AF12 et le resultat s'inscrit bien en dessous de chaque colonne concernée.

Je planche toujours pour mettre cela en vba.

Re

Un code à essayer

Option Compare Text
Private Sub Worksheet_Change(ByVal Target As Range)
Dim cptA As Byte, cptM As Byte, cptN As Byte
If Not Intersect(Target, Range("B4:AF11")) Is Nothing Then
    cptA = Application.WorksheetFunction.CountIf(Range(Cells(4, Target.Column), Cells(11, Target.Column)), "A*") 'A
    cptM = Application.WorksheetFunction.CountIf(Range(Cells(4, Target.Column), Cells(11, Target.Column)), "M*") 'M
    cptN = Application.WorksheetFunction.CountIf(Range(Cells(4, Target.Column), Cells(11, Target.Column)), "N*") 'N

    If cptA >= 1 And cptM >= 1 And cptN >= 1 Then Cells(12, Target.Column).Interior.ColorIndex = -4142 Else: Cells(12, Target.Column).Interior.ColorIndex = 3

End If

End Sub

Pour placer le code,

  • click droite sur l'onglet concerné
  • choisir l'option "visualiser le code"
  • coller le code ci-dessus dans la fenêtre

Si ok, merci de cliquer sur le V vert à coté du bouton EDITER pour cloturer le fil

Crdlt

Salut Dan,

Cela fonctionne très bien. Encore merci.

Seul point avant de cloturer, comme il est detecter tout les mot commencant par M avec *, comment modifier la ligne :

cptM = Application.WorksheetFunction.CountIf(Range(Cells(4, Target.Column), Cells(11, Target.Column)), "M*")

pour que cptM ne compte pas le mot mal ou MAL ?

Je vais regarder du côté countifs qui permet d'utilser plusieurs critere je pense.

Voila,

je viens de tester :

cptM = Application.WorksheetFunction.CountIfs(Range(Cells(4, Target.Column), Cells(11, Target.Column)), "M*", Range(Cells(4, Target.Column), Cells(11, Target.Column)), "<>MAL", Range(Cells(4, Target.Column), Cells(11, Target.Column)), "<>mal")

Et cela fonctionne .

Grand merci.

Pour ne pas ouvrir un autre sujet, et dans le même style de demande,

J'ai 2 lignes, 2 et 3 de B4 à AF qui contiennent les jours du mois. Ces 2 lignes sont identiques, j'ai inscrit 1/1/2016 sur la premiere ligne en demarrant de B4 et tirer jusqu'a AF11? Le format des cellules de la premiere ligne est JJJ et la 2eme ligne J.

Dans ma MFC j'ai =JOURSEM(B2:AF2;2)=7 sur la plage =$B$2:$AF$3 pour colorer la case et mettre en rouge gras tous les dimanche.

J'avais essayé ce style de code :

Dim d As Range 'Plage à parcourir
Set d = Range("B2", "AF3") 'definir la plage
For Each c In d
     Select Case c.Value
               Case Joursem = "dimanche"  'condition si dimanche inscrit
               c.Interior.Color = RGB(242, 221, 220) 'met le fond en couleur RGB
               c.Font.ColorIndex = 3 ' met le caractere en rouge
               c.Font.Bold = True 'met le caractere en gras
               '=JOURSEM(B2:AF2;2)=7   formule MFC
     End Select

Mais cela nefonctionne pas ?

La aussi j'aurais besoin d'un coup de main

OK,

trouver :

Dim c As Range 'Cellule de la plage
Dim d As Range 'Plage à parcourir
Set d = Range("B2", "AF3") 'definir la plage
For Each c In d
     Select Case Format$(c, "dddd")
               Case "dimanche"  'condition si dimanche inscrit
               c.Interior.Color = RGB(242, 221, 220) 'met le fond en couleur RGB
               c.Font.ColorIndex = 3
               c.Font.Bold = True 'met le caractere en gras
     End Select
 Next

Re,

Je viens de lire tes demandes...

Dans la definition de la variable cptM, tu n'as pas besoin de mettre la condition "mal" en minuscule.

Donc juste ceci :

cptM = Application.WorksheetFunction.CountIfs(Range(Cells(4, Target.Column), Cells(11, Target.Column)), "M*", Range(Cells(4, Target.Column), Cells(11, Target.Column)), "<>MAL")
 

Cordialement

OK

Rechercher des sujets similaires à "formule mfc vba"