IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

VBA, mettre en caractère gras pour toute nouvelle saisie


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 7
    Par défaut VBA, mettre en caractère gras pour toute nouvelle saisie
    Bonjour,

    J'ai trouver un peu partout des explications pour mettre en gras une cellule ou une portion de texte. Ce que je souhaiterais c'est activer la fonction "gras" pour de la nouvelle saisie peut importe à quel endroit dans le document.
    Exemple :
    Je clique sur une nouvelle cellule, mon texte doit être en gras
    Je clique sur une cellule avec un texte existant, ce que je rajoute à la fin ou au milieu du texte doit être en gras alors que le texte existant doit rester "simple".
    Après plusieurs essais, je n'y arrive pas ... C'est systématiquement toute la cellule qui se met en gras.
    Auriez vous une solution ?

  2. #2
    Membre très actif
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Mai 2014
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 393
    Par défaut
    Avant de te proposer une solution :

    As-tu un premier jet de code? As-tu essayé l'enregistreur de macro? Parce que l'enregistreur de macro fait 95% du travail dans ton cas...

  3. #3
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par higgins989 Voir le message
    Je clique sur une nouvelle cellule, mon texte doit être en gras
    Ca c'est possible :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_Change(ByVal Target as Range) 
        Target.Font.Bold = True 
    End Sub
    Je clique sur une cellule avec un texte existant, ce que je rajoute à la fin ou au milieu du texte doit être en gras alors que le texte existant doit rester "simple".
    Je ne pense pas (sans certitudes) que ceci soit possible parce que je vois pas comment VBA pourrait connaitre la partie qui a été rajoutée par la modification.

  4. #4
    Membre très actif
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Mai 2014
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 393
    Par défaut
    Et bien ça l'est, et l'enregistreur de macro fait 90% du travail. Quelqu'un avait demandé la même chose il y a peu mais pour souligner

  5. #5
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Là, je demande à voir le code qui fait ça.

  6. #6
    Membre très actif
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Mai 2014
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 393
    Par défaut
    Voilà en 20 secondes à tout casser.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    Sub Macro1()
    '
    ' Macro1 Macro
    '
     
    '
        Range("A2").Select
        ActiveCell.FormulaR1C1 = "jedfMOMO"
        With ActiveCell.Characters(Start:=1, Length:=4).Font
            .Name = "Calibri"
            .FontStyle = "Normal"
            .Size = 11
            .Strikethrough = False
            .Superscript = False
            .Subscript = False
            .OutlineFont = False
            .Shadow = False
            .Underline = xlUnderlineStyleNone
            .ThemeColor = xlThemeColorLight1
            .TintAndShade = 0
            .ThemeFont = xlThemeFontMinor
        End With
        With ActiveCell.Characters(Start:=5, Length:=4).Font
            .Name = "Calibri"
            .FontStyle = "Gras"
            .Size = 11
            .Strikethrough = False
            .Superscript = False
            .Subscript = False
            .OutlineFont = False
            .Shadow = False
            .Underline = xlUnderlineStyleNone
            .ThemeColor = xlThemeColorLight1
            .TintAndShade = 0
            .ThemeFont = xlThemeFontMinor
        End With
        Range("A3").Select
    End Sub
    Maintenant il suffit d'adapter au besoin (cellules, target, ...). Il suffit de récupérer la taille du texte de la cellule avant modification et mettre en gras le texte à partir de longueur+1 une fois la modification effectuée.

    Seule petite difficulté, il faut jouer avec selection_change et change

  7. #7
    Membre Expert Avatar de antonysansh
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Mai 2014
    Messages
    1 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2014
    Messages : 1 115
    Par défaut
    Une proposition à adapter et améliorer bien sur :

    Variable qui stock la chaine de la cellule à l'ouverture et sur changement de sélection dans la feuille :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Option Explicit
     
    Private Temp As String
     
     
    Private Sub Workbook_Open()
        Temp = Selection
    End Sub
     
    Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
        Temp = Target
    End Sub
    Une fonction de comparaison des chaines de caractères :
    Cette fonction va stocker dans un tableau les positions des caractères à mettre en gras.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    Function ComparerChangement(ByVal StrHold As String, ByVal StrNew As String) As Variant
        Dim LngHold&, LngNew&, res$, i&, k&
            LngHold = Len(StrHold): LngNew = Len(StrNew): res = "//"
            Select Case LngNew - LngHold
                Case 0
                    For i = 1 To LngHold
                        If Mid(StrHold, i, 1) <> Mid(StrNew, i, 1) Then
                            res = res & "//" & i
                        End If
                    Next i
                Case Is < 0
                    For i = 1 To LngNew
                        res = res & "//" & i
                    Next i
                Case Is > 0
                    For i = 1 To LngNew
                        If Mid(StrHold, i - k, 1) <> Mid(StrNew, i, 1) Then
                            k = k + 1
                            res = res & "//" & i
                        End If
                    Next i
            End Select
        res = Replace(res, "////", "")
        ComparerChangement = Split(res, "//")
    End Function
    et enfin sur l'évènement Change cette fois :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
        Dim t$(), i&
        If Temp = "" Then
            Target.Font.Bold = (Temp = "")
        ElseIf Target = "" Then
            Target.Font.Bold = (Target = "")
        Else
            t = ComparerChangement(Temp, Target)
            Target.Font.Bold = False
            If t(0) <> "" Then
                For i = LBound(t) To UBound(t)
                    Target.Characters(Start:=t(i), Length:=1).Font.FontStyle = "Gras"
                Next i
            End If
        End If
    End Sub

    Ce code n'est qu'une proposition et est loin d'être optimal.
    Exemple avec la sélection de plusieurs cellules => bug !
    Mais je te laisse faire ce qu'il faut pour éviter ça

  8. #8
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par jeanmidudu Voir le message
    Voilà en 20 secondes à tout casser.
    Ce code met en gras la partie que tu indique d'une chaîne de caractère dans une cellule que tu indiques.
    Il ne détecte pas la partie modifiée dans n'importe quelle cellule lors d'un changement.

    Cela dit, ton code une fois débarbouillé peu se résumer à trois lignes.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Range("A2").Value = "jedfMOMO"
        Range("A2").Font.FontStyle = "Normal"
        Range("A2").Characters(Start:=5, Length:=4).Font.FontStyle = "Gras"
    Citation Envoyé par jeanmidudu Voir le message
    Il suffit de récupérer la taille du texte de la cellule avant modification
    Effectivement, "Ya ka".
    Je suis curieux de voir ça.

    Attends d'avoir terminé le code avant de dire que c'est possible.

  9. #9
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour, bonjour !

    Revenons à l'idée de départ :

    Citation Envoyé par higgins989 Voir le message
    Je clique sur une nouvelle cellule, mon texte doit être en gras
    Je clique sur une cellule avec un texte existant, ce que je rajoute à la fin ou au milieu du texte doit être en gras
    alors que le texte existant doit rester "simple".
    Malgré le peu d'intérêt de ce genre d'usine à gaz,
    s'il s'agit bien de seulement mettre en gras la partie insérée (donc après le premier caractère ou plus loin)
    ou la partie ajoutée en fin de texte (dans ces deux cas le nombre de caractères est supérieur à celui du précédent texte),
    ce n'est pas vraiment difficile ! Mais comme la présentation initiale laisse trop de liberté à de l'interprétation,
    l'idéal est donc d'exprimer clairement & exhaustivement le besoin en l'accompagnant de divers cas possibles !

    Citation Envoyé par higgins989 Voir le message
    Après plusieurs essais, je n'y arrive pas ...
    Conformément aux règles de ce forum, merci d'en poster au moins un ‼
    Un exemple agrémenté enfin d'une bonne explication encouragerait peut-être à plus de propositions …

    Et une manipulation correcte avec l'Enregistreur de macros fournit le bon code !

    Voilà, voilà !

    _________________________________________________________________________________________________________
    Je suis Paris, Nice, Bruxelles, Charlie, …


    Pour visualiser la problématique :



  10. #10
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Bonjour,
    Très intéressante la démo Marc
    Cela donne une bonne vision, et permet de mieux réfléchir au problème.
    Le principe mis en application est clair.
    Il ne reste plus qu'au demandeur, si il revient, de donner une explication claire et exhaustive, plus ce qu'il a essayé en code, voir des exemples concrets des différents cas.

    @higgins989 si tu lis ce post (et les 2 précédent bien sûr), la balle est dans ton camp
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

Discussions similaires

  1. Réponses: 3
    Dernier message: 20/09/2011, 18h46
  2. Mettre la meme infoview pour tout le monde
    Par playa dans le forum Webi
    Réponses: 5
    Dernier message: 03/05/2011, 16h56
  3. comme mettre son nom en vba sous access une fois pour toute ?
    Par alucard_xs dans le forum VBA Access
    Réponses: 14
    Dernier message: 25/01/2010, 13h01
  4. Réponses: 4
    Dernier message: 08/06/2006, 21h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo