=EstGras mettre cellule a 0

Résolu/Fermé
jack2125 Messages postés 331 Date d'inscription jeudi 5 septembre 2019 Statut Membre Dernière intervention 30 mars 2024 - 19 févr. 2020 à 12:18
jack2125 Messages postés 331 Date d'inscription jeudi 5 septembre 2019 Statut Membre Dernière intervention 30 mars 2024 - 23 févr. 2020 à 21:44
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

8 réponses

Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
Modifié le 19 févr. 2020 à 16:40
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
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
19 févr. 2020 à 16:57
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
jack2125 Messages postés 331 Date d'inscription jeudi 5 septembre 2019 Statut Membre Dernière intervention 30 mars 2024
23 févr. 2020 à 21:24
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
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
19 févr. 2020 à 16:59
1
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
19 févr. 2020 à 13:04
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
jack2125 Messages postés 331 Date d'inscription jeudi 5 septembre 2019 Statut Membre Dernière intervention 30 mars 2024
19 févr. 2020 à 14:07
pourtant il me semble que la fonction =ESTGRAS existe?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
19 févr. 2020 à 14:12
Alors pourquoi poses-tu la question ?
0
jack2125 Messages postés 331 Date d'inscription jeudi 5 septembre 2019 Statut Membre Dernière intervention 30 mars 2024
19 févr. 2020 à 14:18
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
jack2125 Messages postés 331 Date d'inscription jeudi 5 septembre 2019 Statut Membre Dernière intervention 30 mars 2024
19 févr. 2020 à 14:36
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
jack2125 Messages postés 331 Date d'inscription jeudi 5 septembre 2019 Statut Membre Dernière intervention 30 mars 2024
Modifié le 19 févr. 2020 à 16:38
=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
Skaze72 Messages postés 3 Date d'inscription mercredi 19 février 2020 Statut Membre Dernière intervention 20 février 2020
Modifié le 19 févr. 2020 à 17:30
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
jack2125 Messages postés 331 Date d'inscription jeudi 5 septembre 2019 Statut Membre Dernière intervention 30 mars 2024
23 févr. 2020 à 21:44
bon j'ai trouvé pour l'offset
merci
0