Macro VBA erronée

Résolu
Dautomne Messages postés 21 Statut Membre -  
yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour à tous,

J'ai un souci avec la macro vba ci-dessous. Visiblement le code est erroné.

Je souhaite obtenir le résultat suivant

Si cellules D216-D218 de Fiche de contrôle vides = couleur grise
Si cellules D216-D218 de Fiche de contrôle = "OUI pour les 3 cellules "= couleur verte
Si cellules D216-D218 de Fiche de contrôle = "NON pour les 3 cellules "= couleur rouge
Si cellules D216-D218 de Fiche de contrôle = "1 OUI 2 NON / 1 NON 2 OUI "= couleur orange

Je vous remercie par avance pour votre aide :-)

Cordialement.

---------------------------------------------------------
Sub Macro17()

'TESSI ICSB S1
    
Range("H5").Select
    Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
        "='Fiche de contrôle'!$D$216:$D$218="""""
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorDark1
        .TintAndShade = -0.349986266161974
        End With

Range("H5").Select
    Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
    "=NB.SI(D216:D218;""OUI"")<1>3"
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorAccent6
        .TintAndShade = -0.249946592608417
End With

Range("H5").Select
    Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
    "=NB.SI(D216:D218;""NON"")<2>4"
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1).Interior
            .PatternColorIndex = xlAutomatic
        .Color = 192
        .TintAndShade = 0
    End With

End Sub



EDIT : Ajout des balises de code

Configuration: Windows / Firefox 78.0

5 réponses

  1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    bonjour,
    suggestion:
    Option Explicit
    
    Sub cc()
    Dim rg As Range, cl As Range, noui As Integer, nnon As Integer, couleur As Integer
    Set rg = Range("$D$216:$D$218")
    noui = 0
    nnon = 0
    For Each cl In rg
        Select Case cl.Value
            Case "NON":
                nnon = nnon + 1
            Case "OUI":
                noui = noui + 1
        End Select
    Next cl
    If noui = 3 Then
        couleur = 4 'vert
    Else
        If nnon = 3 Then
            couleur = 3 'rouge
        Else
            If noui + nnon = 3 Then
                couleur = 46 'orange
            Else
                couleur = 16 'gris
            End If
        End If
    End If
    rg.Interior.ColorIndex = couleur
    End Sub
    0
  2. Dautomne Messages postés 21 Statut Membre
     
    Bonjour,

    Merci pour ton aide :-)

    Je suis novice en vba et donc en incapacité d'exploiter la macro que tu as eu la gentillesse de mettre à ma disposition.

    Peux tu m'expliquer :

    Où se trouve la référence à la case H5 (case à renseigner avec le résultat) ?

    Est-ce que la macro ci-dessus doit être modifiée pour faire apparaître la référence à la feuille (Fiche de contrôle'!$D$216:$D$218) où sont contenues les cellules à exploiter ? Dans l'affirmatif, peux-tu m'indiquer comment faire?

    Enfin dernière question le terme "Option Explicit" correspond à quoi ? la macro vba ne le prend pas en compte quand je copie/colle.

    Merci encore pour cette aide et pour les explications à venir :-)
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      veux-tu dire que tu veux changer la couleur de H5? dans quelle feuille? j'ai adapté le code, vois ci-dessous:
      "option explicit", en début de module, sert à préciser que les variables doivent être explicitement déclarées (via DIM). cela permet de détecter rapidement les fautes de frappe dans les noms de variables.
      Sub cc()
      Dim rg As Range, cl As Range, noui As Integer, nnon As Integer, couleur As Integer, ncel As Long
      Set rg = sheets("Fiche de contrôle").Range("$D$216:$D$218")
      noui = 0
      nnon = 0
      ncel = rg.Count
      For Each cl In rg
          Select Case cl.Value
              Case "NON":
                  nnon = nnon + 1
              Case "OUI":
                  noui = noui + 1
          End Select
      Next cl
      If noui = ncel Then
          couleur = 4 'vert
      Else
          If nnon = ncel Then
              couleur = 3 'rouge
          Else
              If noui + nnon = ncel Then
                  couleur = 46 'orange
              Else
                  couleur = 16 'gris
              End If
          End If
      End If
      sheets("Fiche de contrôle").Range("H5").Interior.ColorIndex = couleur
      End Sub
      0
  3. Dautomne Messages postés 21 Statut Membre
     
    Bonjour,

    Je veux changer la cellule H5 de la feuille "Synthèse résultats ctrl période" en fonction des éléments indiqués dans les cellules D216 à D218 de la feuille "Fiche de contrôle".

    Comme pour mon autre problématique peux-tu m'indiquer comment intégrer ce code dans VBA. Je n'y arrive pas.

    Merci encore
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      veux-tu changer la couleur de fond de H5? si oui, pourquoi ne l'écris-tu pas?
      et pourquoi n'expliques-tu pas tout cela dés le début?
      prends ton temps pour rédiger des demandes précises.
      en ligne 28, tu dois donc préciser le nom de la feuille où se trouve H5.
      tu emploies un vocabulaire bizarre, essaie peut-être avec des mots plus simples. cela veut dire quoi "intégrer du code dans VBA"?
      0
  4. Dautomne Messages postés 21 Statut Membre
     
    Tu as effectivement raison je ne parle pas le langage "informatique" d'où les incompréhensions.

    A la question 1, oui je souhaite changer la couleur de fond de la cellule H5.

    A la question 2, je n'arrive tout simplement pas à coller le code fournit dans ma macro VBA n°17.

    Comme je l'indiquais je n'ai jamais fait de VBA de ma vie donc pour moi c'est "obscure". Tout ce que je veux c'est juste que :

    la cellule H5 de la feuille "Synthèse résultats ctrl période" soit remplit en gris si les cellules
    D216-D218 de le feuille "Fiche de contrôle" sont vides

    la cellule H5 de la feuille "Synthèse résultats ctrl période" soit remplit en rouge si les cellules D216-D218 de le feuille "Fiche de contrôle" sont toutes à "NON"

    la cellule H5 de la feuille "Synthèse résultats ctrl période" soit remplit en vert si les cellules D216-D218 de le feuille "Fiche de contrôle" sont toutes à "OUI"

    Enfin, que la cellule H5 de la feuille "Synthèse résultats ctrl période" soit remplit en orange si par exemple les cellules D216-D218 de le feuille "Fiche de contrôle" contiennent 1 OUI et 2 NON ou encore 1 NON et 2 OUI.

    Je veux par ailleurs que tu m'expliques en langage simple où je dois coller le code car ça ne fonctionne visiblement pas dans une macro. Il faut peut être que je le colle dans un module ?

    J'espère être plus claire :-) Merci encore pour ton aide.

    Cordialement.
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      "ça ne fonctionne visiblement pas dans une macro": qu'as-tu essayé, qu'as-tu observé?
      dans quoi se trouve le code que tu as partagé? n'est-il pas dans un module?
      commence peut-être par investir quelques heures et apprendre quelques bases en VBA, peut-être via un ou deux tutoriels.
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Dautomne Messages postés 21 Statut Membre
     
    Dernière question sur cette thématique.

    Le code fonctionne parfaitement mais je n'arrive pas à modifier la couleur verte je veux remplacer par le
    couleur = 4 
    par
    couleur = 5287936 
    as tu une solution ?

    Sub TESSI_ICBS_S1()

    Dim rg As Range, cl As Range, noui As Integer, nnon As Integer, couleur As Integer, ncel As Long
    Set rg = Sheets("Fiche de contrôle").Range("$D$216:$D$218")
    noui = 0
    nnon = 0
    ncel = rg.Count
    For Each cl In rg
    Select Case cl.Value
    Case "NON":
    nnon = nnon + 1
    Case "OUI":
    noui = noui + 1
    End Select
    Next cl
    If noui = ncel Then
    couleur = 4 'vert

    Else
    If nnon = ncel Then
    couleur = 3 'rouge
    Else
    If noui + nnon = ncel Then
    couleur = 46 'orange
    Else
    couleur = 16 'gris
    End If
    End If
    End If
    Sheets("Synthèse résultats ctrl période").Range("H5").Interior.ColorIndex = couleur

    End Sub


    Merci encore pour cet accompagnement.

    Cordialement
    0