=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. 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. 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
        3. =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
        4. bon j'ai trouvé pour l'offset
          merci
          0