=EstGras mettre cellule a 0

Résolu
bonjour à tous
A1:A62 quand j'ai des cellules en gras dans cette colonne (elle peuvent varier dans le temps)
je voudrais que dans la colonne BU1:BU62
que la cellule passe à 0 et y reste lors d'un changement qui peut se produire dans BU1:BU62
est ce possible
merci beaucoup

--
vous êtes super!
merci à tous

8 réponses

  1. Re,

    Tu n'a pas répondu à ma question !

    Une macro ne peut s'exécuter que suite à un évènement. Soit il s'agit d'un évènement propre au classeur (comme activer une feuille, sélectionner une cellule, ..;) soit d'un évènement lié à un objet ajouté (un bouton, une image, ...)

    Écrire une procédure qui empêche de modifier une cellule de la plage BU1:BU62 quand la cellule correspondante de la colonne A est en gras, est relativement simple car il existe un évènement Worksheet_Change (i.e "feuille modifiée") qui se produit quand on modifie une ou plusieurs cellules d'une feuille.

    Par exemple avec ce code dans le module de la feuille :
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim r As Range
    Dim c As Range
      Set r = Intersect(Target, Range("BU1:BU62"))
      If Not r Is Nothing Then
        For Each c In r.Cells
          If c.Offset(0, -72).Font.Bold Then c.Value = 0
        Next c
      End If
    End Sub
    


    Écrire une procédure qui met à zéro les cellules de la BU quand la cellule correspondante de la plage A1:A62 est en gras, c'est aussi assez simple. Par exemple, dans le module de feuille :
    Private Sub Jack2125()
    Dim r As Range
    Dim c As Range
      Set r = Range("A1:A62")
      For Each c In r.Cells
        If c.Font.Bold Then c.Offset(0, 72) = 0
      Next c
    End Sub


    Par contre, on ne peut pas écrire une procédure qui met à zéro les cellules de la BU quand la cellule correspondante de la plage A1:A62 passe en gras, car comme je t'ai dit précédemment, il n'y a aucun évènement qui détecte les modifications de format d'une cellule (comme le passage de normal à gras).

    Il faut donc choisir une autre façon de lancer la procédure ci-dessus (un bouton, un autre évènement, ...).
    1
    1. Si les deux procédure doivent cohabiter, la seconde devient :

      Sub Jack2125()
      Dim r As Range
      Dim c As Range
        Set r = Range("A1:A62")
        For Each c In r.Cells
          If c.Font.Bold Then
            Application.EnableEvents = False
            c.Offset(0, 72).Value = 0
            Application.EnableEvents = True
          End If
        Next c
      End Sub
      0
    2. bonsoir
      Sub jack()
      Dim r As Range
      Dim c As Range
      Set r = Range("A10:A28")
      For Each c In r.Cells
      If c.Font.Bold Then
      Application.EnableEvents = False
      c.Offset(0, 28).Value = 0
      Application.EnableEvents = True
      End If
      Next c
      End Sub
      je viens seulement de faire le test avec cette fonction
      mes cellules en gras dans A passent bien en AC à 0
      par contre ce n'est pas en AC mais en BS qu'elles doivent passer à 0
      j'ai beau essayer de changer, mais n'arrive pas à les mettre en BS!
      merci de ton aide
      amicalement
      jacques
      0
  2. Bonjour

    « est-ce possible » rigoureusement : non, il n'y a aucun évènement qui détecte les modification de format d'une cellule.
    On peut utiliser d'autres évènements, certains seront plus ou moins chronophages.
    Il faut donc que tu précises quelles concessions tu est prêt à faire.
    0
    1. pourtant il me semble que la fonction =ESTGRAS existe?
      0
      1. Alors pourquoi poses-tu la question ?
        0
        1. Function CGR(SearchArea As Range) As Variant
          Dim Matrice() As String
          Dim cell As Range
          Application.Volatile True
          ReDim Matrice(SearchArea.Rows.Count - 1)

          J = 0
          For Each cell In SearchArea
          Matrice(J) = IIf(cell.Font.Bold = True, 'Y', '')
          J = J + 1
          Next cell
          CGR = Application.Transpose(Matrice)
          End Function

          Une fois cette fonction créée dans un module tu peux entrer dans une cellule quelconque: =CGR(B10) et Y s'affichera si tous les caractères de la cellule sont en gras.

          Il faut faire F9 pour recalculer.
          je trouve cette réponse sur internet Mais comme je sui nul en VBA je n'y comprend pas grand chose..
          peux tu m'aider?
          0
          1. je trouve également ceci
            pour savoir si le 2ème caractère de la cellule a1 est gras :
            MsgBox Range("a1").Characters(2, 1).Font.FontStyle
            peut on l'adapter?
            0
        2. =SI(ESTGRAS(A16);"o")
          j'ai trouvé une réponse partielle qui fonctionne par contre je ne voudrais pas que ça mette faux aux autres cellules qui ne correspondent pas
          Est ce possible?

          0
          1. Bonjour,

            En indiquant la valeur que doit prendre votre cellule si la condition n'est pas remplie. Par-exemple, si vous voulez que votre cellule reste vide :
            =SI(ESTGRAS(A16);"o";"")
            0
        3. bon j'ai trouvé pour l'offset
          merci
          0