Condition sur cellules d'une feuille entière

Résolu
thomanneca Messages postés 5 Statut Membre -  
 thomanneca -
Bonjour à tous,

J'aimerais pouvoir mettre une/des conditions (uniquement en VBA) sur l'ensemble des cellules d'une feuille...
Par exemple, lorsque j'écris une date dans une cellule au hasard, j'aimerais que cette cellule se mettre en bleu.
Je ne souhaite donc pas utiliser la mise en forme conditionnelle simple car après, d'autres conditions viendront s'ajouter. Il me faut donc simplement le début du code avant les conditions IF et END IF.

Merci pour votre aide..

7 réponses

  1. Polux31 Messages postés 7219 Statut Membre 1 204
     
    Bonjour,

    Dans l'éditeur VB de la feuille

    Private Sub Worksheet_Change(ByVal Target As Range)
         Target.Interior.Color = vbBlue
    End Sub


    ;0)
    1
  2. Polux31 Messages postés 7219 Statut Membre 1 204
     
    le code met la cellule en bleu quand on rentre quelque chose dedans et qu'on quitte la cellule ...

    Pour vérifier qu'il s'aget bien d'une date

    If IsDate(Target.Text) Then
        Target.Interior.Color = vbBlue
    End If


    Mais ça ne fonctionnera que si ce code est collé dans l'éditeur VB de la feuille !!!
    1
    1. thomanneca Messages postés 5 Statut Membre
       
      Salut, encore besoin d'un peu de ton aide

      J'ai développé quelques conditions sur ma feuille mais j'aimerais à présent pouvoir demander de mettre ces conditions sur les cellules DEJA remplies et non celles que je remplis...

      (exemple : fichier déjà développé pour lequel j'aimerais y mettre mes conditions par après via un bouton par exemple)

      voici le début de mon exercice :

      Private Sub Worksheet_Change(ByVal Target As Range) 
      
      If Not IsEmpty(Target) Then 
        If IsDate(Target) Then 
          If Target < Range("A2") Then 
            Target.Interior.Color = vbRed 
            Target.Font.Color = vbWhite 
            Target.NumberFormat = "ddd d" 
          Else 
            Target.Interior.Color = vbBlue 
            'Target.Interior.Color = RGB(64, 128, 224) 
            Target.NumberFormat = "ddd d" 
            Target.Font.Color = vbWhite 
            Target.Font.Bold = True 
          End If 
        Else 
          If IsNumeric(Target) Then 
            Target.Interior.Color = vbGreen 
          Else 
            If Not IsNumeric(Target) Then 
              Target.Font.Color = RGB(64, 128, 224) 
            Else 
              If Target = "" Then 
                Target.Interior.Color = vbYellow 
              Else 
                Target.Interior.Color = vbBlack 
                Target.Font.Color = vbWhite 
              End If 
            End If 
          End If 
        End If 
      Else 
        If IsEmpty(Target) Then 
          Target.ClearFormats 
        End If 
      End If 
      End Sub 



      Merci pour tes conseils
      0
  3. thomanneca Messages postés 5 Statut Membre
     
    Merci beaucoup mais je suis toujours bloqué :s

    J'aimerais donc pouvoir par exemple :

    - ouvrir une nouvelle feuille,

    - cliquer dans n'importe quelle cellule et y inscrire une date (ex. 1/01/2014),

    - avoir la condition que met cette cellule en couleur (ex bleu) s'il s'agit bien d'une date..

    - quand j'aurai le début, je pense que pour les autres if (caractère, etc), çà devrait aller

    Votre code correspond-il à cela?

    Un grand merci
    0
  4. thomanneca Messages postés 5 Statut Membre
     
    Super merci, je crois que c'est bon... pour le moment !

    Un grand merci ;)
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. thomanneca Messages postés 5 Statut Membre
     
    Re...

    J'ai développé quelques conditions sur ma feuille mais j'aimerais à présent pouvoir demander de mettre ces conditions sur les cellules DEJA remplies et non celles que je remplis...

    voici le début de mon exercice :

    Private Sub Worksheet_Change(ByVal Target As Range)
    
    If Not IsEmpty(Target) Then
        If IsDate(Target) Then
          If Target < Range("A2") Then
            Target.Interior.Color = vbRed
            Target.Font.Color = vbWhite
            Target.NumberFormat = "ddd d"
          Else
            Target.Interior.Color = vbBlue
            'Target.Interior.Color = RGB(64, 128, 224)
            Target.NumberFormat = "ddd d"
            Target.Font.Color = vbWhite
            Target.Font.Bold = True
          End If
        Else
          If IsNumeric(Target) Then
             Target.Interior.Color = vbGreen
          Else
            If Not IsNumeric(Target) Then
              Target.Font.Color = RGB(64, 128, 224)
              Else
              If Target = "" Then
                Target.Interior.Color = vbYellow
                Else
                Target.Interior.Color = vbBlack
                Target.Font.Color = vbWhite
              End If
            End If
          End If
        End If
    Else
        If IsEmpty(Target) Then
          Target.ClearFormats
        End If
    End If
    End Sub


    Je suis ouvert à toute amélioration, même de ce code..

    Merci d'avance
    0
  7. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour
    (après clic sur un bouton)

    essaies :

    Dim Dercell As String, Cellule As Range

    Application.ScreenUpdating = False
    Dercell = Cells.Find("*", , , , , xlPrevious).Address
    For Each Cellule In Range("A1:" & Dercell)
    'tes conditions...
    Next

    gain de temps d'environ 80 fois:on fige le défilement de l'écran par
    Application.ScreenUpdating = False

    on donne l'adresse de la cellule la + en bas et à droite afin de ne pas parcourir toute la feuille!
    Dercell = Cells.Find("*", , , , , xlPrevious).Address

    et on parcoure la plage Range("A1:" & Dercell)
    .....tes conditions en remplacant "Target" par "cellule"
    Michel
    0
  8. thomanneca
     
    Super Michel,

    A priori, c'est ce que je voulais !
    Vais poursuivre à présent et voir..

    Merci beaucoup
    0