=EstGras mettre cellule a 0

Résolu
jack2125 Messages postés 486 Date d'inscription   Statut Membre Dernière intervention   -  
jack2125 Messages postés 486 Date d'inscription   Statut Membre Dernière intervention   -
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. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 783
     
    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. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 783
       
      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. jack2125 Messages postés 486 Date d'inscription   Statut Membre Dernière intervention  
       
      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. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 783
     
    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
  3. jack2125 Messages postés 486 Date d'inscription   Statut Membre Dernière intervention  
     
    pourtant il me semble que la fonction =ESTGRAS existe?
    0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 783
     
    Alors pourquoi poses-tu la question ?
    0
  6. jack2125 Messages postés 486 Date d'inscription   Statut Membre Dernière intervention  
     
    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. jack2125 Messages postés 486 Date d'inscription   Statut Membre Dernière intervention  
       
      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
  7. jack2125 Messages postés 486 Date d'inscription   Statut Membre Dernière intervention  
     
    =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. Skaze72 Messages postés 3 Statut Membre
       
      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
  8. jack2125 Messages postés 486 Date d'inscription   Statut Membre Dernière intervention  
     
    bon j'ai trouvé pour l'offset
    merci
    0