VBA-Macro

Résolu
JANGO5 Messages postés 98 Statut Membre -  
JANGO5 Messages postés 98 Statut Membre -
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. nauzia45 Messages postés 356 Statut Membre 24
     
    Bonjour,

    Regarde si cet exemple te convient

    https://www.cjoint.com/?DCsszVgvWyW
    1
    1. sipherion Messages postés 1836 Date d'inscription   Statut Membre Dernière intervention   287
       
      C'est exactement ce que j'ai fais hier, mais je n'ai pas eu le temps de l'envoyer =)
      0
  2. foo
     
    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
  3. nauzia45 Messages postés 356 Statut Membre 24
     
    Bonjour,

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

    A vous lire
    0
    1. JANGO5 Messages postés 98 Statut Membre 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
  4. sipherion Messages postés 1836 Date d'inscription   Statut Membre Dernière intervention   287
     
    Je suis d'accord avec Nauzia, la mise en forme conditionnelle te suffira amplement, à condition que tu sois sous Office 2007+
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. JANGO5 Messages postés 98 Statut Membre 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
  7. foo
     
    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
  8. JANGO5 Messages postés 98 Statut Membre 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
  9. JANGO5 Messages postés 98 Statut Membre 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
  10. foo
     
    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. JANGO5 Messages postés 98 Statut Membre 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