VBA : problème avec la méthode range.find

Bonjour,

Voici mon problème :

Je dispose d'une feuille excel avec un tableau à l'intérieur. J'ai coloré la dernière ligne de ce tableau en gris en utilisant la deuxième nuance de gris comme couleur de remplissage.

Je souhait utiliser la fonction find, avec la propriété SearchFormat, afin de trouver la dernière case de ce tableau dans la colone B (la case grise donc, dans la colone B).

Pour repérer le code et repérer les critères de format à rechercher. J'ai enregistré une macro automatique au moment où j'ai remplie de gris ma dernière ligne. Il semble que le paramètre de couleur soit le suivant :

Range.Interior.ThemeColor = xlThemeColorDark1

J'ai donc essayé avec le code suivant :

Sub Rgrise()

Dim Rg As Range, c As Range

'Détermine les caractéristiques du format de cellule recherché.
With Application.FindFormat
.Clear 'S'assurer d'effacer les critères des anciennes recherches
.Interior.ThemeColor = xlThemeColorDark1
End With

'Détermine la plage de cellules où s'effectue la recherche
With ActiveSheet
Set Rg = .Range("B:B")
End With

'Trouve la cellule ayant le bon format pour y effectuer une ou plusieurs opérations
Set c = Rg.Find(What:="", SearchFormat:=True)
If Not c Is Nothing Then MsgBox c.Address

End Sub


Or en fin de procédure "c" renvoi nothing. Je ne comprends pas pourquoi. Pourriez-vous m'aider sur ce point ?

merci

8 réponses

  1. lorsque j'utilise le bouton de remplissage en gris, si j'affiche la propriété ColorIndex dans une msgbox, j'obtiens en effet 15. Mais en utilisant

    .Interior.ColorIndex = 15
    au lieu de:
    .Interior.ThemeColor = xlThemeColorDark1

    find ne me renvoi aucun résultat.

    pourtant si j'utilise préalablement le code suivant
    Range("B10").Interior.ColorIndex = 15

    le gris devient légèrement plus foncé, et le find fonctionne.

    Le problème est que ca reste quand même largement plus simple de remplir des lignes via le bouton de remplissage qu'en passant systématiquement par du code.
    0
    1. Quelle version d'Excel utilisez-vous?
      0
      1. 2007 ou 2013 selon l'ordinateur sur lequel je suis
        0
        1. Ton fichier renvoi l'adresse B2, qui ne correspond pas à la case grisée.
          0
          1. Tu es sûr qu'il s'agit de mon fichier ?
            De mon coté, il renvoie bien l'adresse $B$10 qui correspond à la case grisée.
            Problème géographique ???
            0
        2. Contributeur
          Bonjour,

          essaie plutôt avec la propriété .interior.color qui a une palette beaucoup plus large.

          eric
          0
          1. OK. Mais dans ce cas la, lorsque rempli une case avec une couleur dans la palette de remplissage, comment connaitre la référence color utilisée ?

            j'essayais d'utiliser themecolor car lorsque je rempli une case en gris, l'enregistreur de macro utilise cette propriété
            0
          2. Contributeur
            msgbox [A1].interior.color
            ou bien couleur=[A1].interior.color

            eric
            0
          3. Contributeur
            de rien...
            0
        3. Contributeur
          Bonjour,
          curieux, je croyais avoir posté une réponse hier mais...

          Pour ma part j'utilise ceci qui marche chez moi que si j'utilise cells et non range("...")


          Option Explicit
          Sub trouver_cellule_couleut()
          Dim Endroit As String
          Application.FindFormat.Clear
          Application.FindFormat.Interior.ColorIndex = 3
          On Error GoTo echec
          Endroit = Cells.Find(What:="", SearchFormat:=True).Address
          MsgBox Endroit
          Exit Sub
          echec:
          MsgBox "erreur n°" & Err.Number & " Variable objet ou.... non définie...etc"
          End Sub

          Michel
          0
          1. je vais essayer avec cells.
            0
          2. Contributeur
            MERCI POUR LE TEMPS PASSE A ESSAYER DE M'AIDER

            De rien...
            0
          3. Michel, je te remercie en effet du temps passé pour m'aider.

            Cependant, plutôt que de simplement dire un merci et passer à autre chose, je préférais complètement finir mon fichier, et venir vous faire un compte rendu de toutes les solutions que j'aurais adopté (ici et sur mon autre post). Ce qui explique le fait que je ne t'avais pas remercié immédiatement
            0