VBA-Macro

Résolu
Bonjour,
Je suis débutant en VBA et je sollicite votre aide.
J'aimerais mettre en place une macro qui respecte les contraintes suivantes :
Exemple:
Sub test()
Application.ScreenUpdating = False

Si B2=1 je grise la cellule D2 et la cellule E2
Si B2=0 je grise la cellule F2 et la cellule J2

et pareil pour toute la plage B2:B6000

Application.ScreenUpdating = True
End Sub

Merci bien
Cordialement

9 réponses

  1. Bonjour,

    Pourquoi ne pas passer plus simplement par une mise en forme conditionnelle ?

    A vous lire
    0
    1. Bonjour,

      Au fait j'ai besoin que ça fonctionne en permanence, si jamais on supprime le contenu du tableau la fonction doit continuer à faire son boulot.
      La macro doit marcher dès le chargement du fichier !

      En ce qui me concerne je n'ai encore jamais utilisé la mise en forme conditionnelle !

      Merci
      0
  2. Je suis d'accord avec Nauzia, la mise en forme conditionnelle te suffira amplement, à condition que tu sois sous Office 2007+
    0
    1. Bonjour,

      Pouvez-vous être plus explicite svp Quel cas et quel formule je pourrais appliqué ?

      En ce qui concerne ma macro j'ai pu avoir un résultat correcte mais rien que pour B2.
      Voilà :

      Sub formatConditionnelle()
      Application.ScreenUpdating = False
      Sheets("Feuil1").Select
      If Range("B2").Value = 1 Then
      Range("C2").Select
      Selection.Interior.ColorIndex = 56
      Else
      If Range("B2").Value = 0 Then
      Range("D2").Select
      Selection.Interior.ColorIndex = 56
      Range("E2").Select
      Selection.Interior.ColorIndex = 56
      End If
      End If

      Application.ScreenUpdating = True
      End Sub

      Merci
      Cordialement
      0
      1. Bonjour

        voila une macro avec un compteur de Ligne

        Sub test()
        Application.ScreenUpdating = False
        For Lig = 2 To Cells(Rows.Count, 2).End(xlUp).Row
        Range("D" & Lig & ":F" & Lig & ",J" & Lig).Interior.ColorIndex = xlNone
        Select Case Range("B" & Lig).Value
        Case 0
        Range("F" & Lig & ",J" & Lig).Interior.ColorIndex = 15
        Case 1
        Range("D" & Lig & ":E" & Lig).Interior.ColorIndex = 15
        End Select
        Next
        Application.ScreenUpdating = True
        End Sub

        A+
        Maurice
        0
        1. Bonjour,

          Merci Maurice mais ta macro ne grise pas que les cellules en question. J'ai testé et ça grise aussi les cellules entre les deux valeurs.

          Entre temps je suis tombé sur une macro qui fonctionne plutot bien sauf que je n'arrive pas à la modifier pour prendre en compte ma deuxième condition.
          Dans le cas d'un 0 c'est fait pour le 1 je n'arrive pas à mettre la deuxieme condition ou un else.
          PLease help !

          Voilà la macro
          Private Sub Coloriser()
          Dim Plage As Range
          Dim Cel As Range
          Dim Tbl
          Dim Adr As String
          Dim I As Integer
          Dim J As Integer
          Dim Adresse As String
          Tbl = Array("0")
          With Worksheets("Feuil1")
          Set Plage = .Range(.[B2], .[B65536].End(xlUp))
          End With
          For J = 0 To UBound(Tbl)
          Set Cel = Plage.Find(Tbl(J) & "*", , xlValues)
          If Not Cel Is Nothing Then
          Adr = Cel.Address
          Do
          I = Cel.Row
          Adresse = "M" & I & ":N" & I & _
          ",P" & I & ":Q" & I &
          Range(Adresse).Interior.ColorIndex = 56
          Set Cel = Plage.FindNext(Cel)
          Loop While Adr <> Cel.Address
          End If
          Next J
          End Sub

          Merci
          0
          1. Bonjour

            voila avec une varriable String

            Sub Test()
            Dim Tvar As String
            Application.ScreenUpdating = False
            For Lig = 2 To Cells(Rows.Count, 2).End(xlUp).Row
            Range("D" & Lig & ":F" & Lig & ",J" & Lig).Interior.ColorIndex = xlNone
            Tvar = Range("B" & Lig).Value
            Select Case Tvar
            Case "0"
            Range("F" & Lig & ",J" & Lig).Interior.ColorIndex = 15
            Case "1"
            Range("D" & Lig & ":E" & Lig).Interior.ColorIndex = 15
            End Select
            Next
            Application.ScreenUpdating = True
            End Sub

            si ca marche pas envoie un model ca serat plus simple
            A+
            Maurice
            1
            1. C'est impeccable Maurice ça marche super bien avec du code simple Mercii!

              Maintenant mon autre soucis est d'automatiser cette manoeuvre, j'aimerais que cette macro s'exécute à chaque fois dès que je renseigne une cellule de la colonne B.
              Je ne sais pas trop si possible d'ailleurs mais qui c

              Cordialement
              0
              1. Bonjour

                mettre le code dans la feuille

                je voie un truc comme ca

                Private Sub Worksheet_SelectionChange(ByVal Target As Range)
                Dim Tvar As String
                Lig = Target.Row - 1
                If Target.Column = 2 Then
                Range("D" & Lig & ":F" & Lig & ",J" & Lig).Interior.ColorIndex = xlNone
                Tvar = Range("B" & Lig).Value
                Select Case Tvar
                Case "0"
                Range("F" & Lig & ",J" & Lig).Interior.ColorIndex = 15
                Case "1"
                Range("D" & Lig & ":E" & Lig).Interior.ColorIndex = 15
                End Select
                End If
                End Sub

                A+
                Maurice
                0
                1. Bonjour Maurice,
                  je garde l'ancien module et je met le private sub sur la feuille ?
                  Parce que quand je le met seul sur la feuille il ne retrouve pas la macro !!

                  Sinon j'ai mis la nouvelle macro dans un module et là ça bloque à la 3 ème ligne Lig = Target.Row - 1

                  Cordialement ,
                  0