Macro VBA Excel

Bonjour à tous,

J'aurais besoin de votre aide...

Comment traduire en VBA :

Si il y a une Cellule "couleur Noire" dans la colonne "A:A"

Alors remplir de la meme couleur les cellules de la meme ligne que la cellule de "couleur Noire"

exemple :

Si Cellule noir en "A5"

---> Alors remplir en "Noir" la ligne "A5:L5"

Merci d'avance,
Cordialement
Laurent

5 réponses

  1. ;-)

    if cells(5,1).interior.colorindex=vbblack then range(cells(5,1),cells(5,12)).interior.colorindex=vbblack

    De mémoire...

    ;-)
    0
    1. Salut WhiteFang,

      en fait j'ai trouvé ça qui marche :

      Sub noir()
      For Each rg In Range([a1], [A65536].End(xlUp))
      rg.Activate
      If rg.Interior.ColorIndex = 1 Then
      Range(Cells(rg.Row, 1), Cells(rg.Row, 12)).Interior.ColorIndex = 1
      End If
      Next rg
      End Sub

      Mais le problème c'est que ça marche seulemnt si les cellules sont non vide.
      Or les cellules en noir dans mon fichier sont vides...

      Aurais tu une solution.....Merci
      0
      1. Hello Laurent,

        Ta macro fonctionne bien (tu peux virer le rg.Activate qui ne sert à rien).
        Le problème est sans doute que tes cellules noires sont des cellules vides après les dernières données de ta colonne. Elles ne sont donc pas détectées par End(xlUp), qui recherche les données.

        Question : as-tu quand même, dans les lignes à noircir, des cellules qui contiennent des données ?
        0
    2. ;-)

      Sub toto()
      'Déclaration des variables
      Dim L, C, Lne, Col
      'Récup dans L et C de l'adresse de la dernière cellule de la feuille
      L = ActiveCell.SpecialCells(xlCellTypeLastCell).Row
      C = ActiveCell.SpecialCells(xlCellTypeLastCell).Column
      'Boucle sur les lignes
      For Lne = 1 To L
      'Test de l'intérieur de la cellule
      Select Case Cells(Lne, 1).Interior.ColorIndex
      'Si c'est NOIR
      Case Is = 1
      'Boucle sur les colonnes de la feuille
      For Col = 1 To C
      'Et application de la couleur
      Cells(Lne, Col).Interior.ColorIndex = 1
      Next
      End Select
      Next
      End Sub

      ;-)

      Vides ou pas vides... ;-)
      0
      1. Re WhiteFang,

        Euh... t'es sûr que t'as testé ?
        Quelques mélanges de pinceaux dans les SpecialCells...
        L'idée reste bonne, évidemment...

        Sub totoBis()
        'Déclaration des variables
        Dim L, Lne
        'Récup dans L de l'adresse de la dernière cellule de la feuille
        L = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row
        'Boucle sur les lignes
        For Lne = 1 To L
        'Test de l'intérieur de la cellule
        Select Case Cells(Lne, 1).Interior.ColorIndex
        'Si c'est NOIR
        Case Is = 1
        'Noircissement de la plage
        Range(Cells(Lne, 1), Cells(Lne, 12)).Interior.ColorIndex = 1
        End Select
        Next
        End Sub
        0
      2. @Armojax;-)

        Tu crois que je mettrais du code ici sans l'avoir testé ? ;-))))))

        Au fait, tes modifs sur mon code sont inutiles...

        ActiveSheet : Pourquoi puisque le code est dans la feuille ? ;-) Et que de toutes façon, l'implicite est Activesheet ?

        Constante xlCellTypeLastCell : L'objet le plus simple à utiliser est ActiveCell, puisque le code se trouve dans la feuille...

        Et pour la boucle sur les colonnes, cela a l'avantage de lui montrer que ce code va s'adapter au contenu de sa feuille, pas sur une plage fixée, car il a déjà la solution plus haut pour l'adressage d'une plage...

        ;-)
        0
    3. Merci à tous les deux... :)

      Avec ça je devrais m'en sortir à merveille...

      @+
      et bonne journée !!
      0
      1. ;-)

        De rien !! ;-) Toi aussi... ;-)
        1