Comment mettre en gras une partie du contenu d'une cellule ?

Violaine a écrit :

je serais vraiment partante d'avoir par VBA la concaténation et la mise en gras des caractères se faisant au fur et à mesure de l'encodage au changement de valeur dans une cellule déterminée de la ligne en cours de modification

Comme disait l'autre: "Ce que femme veut ..."

Je compte sur MFerrand, James007 (ou toute autre bonne âme passant par là) pour critiquer et/ou améliorer la proposition en pièce jointe.

C'est au moment où le Libellé (colonne I) est renseigné que la macro s'exécute (voir dans la fenêtre de code de la feuille concernée). Si les données des colonnes E, F, G et I ne sont pas renseignées, un message est affiché.

Attention, si ce système est utilisé, il n'y aura pas de mise à jour de la colonne L, si les colonnes E, F ou G sont modifiées après la colonne des Libellés! ... à tester, donc

Merci ! Cependant, je n'arrive pas à lire la macro sur mon ordinateur ...

Pouvez-vous copier/coller la macro en message ? Merci d'avance.

Bonjour Violaine

voici le code de U.Milité merci à lui et tous

-dans Feuille1 (Feuil1) (Worksheet change)

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [I6:I400]) Is Nothing Then 'plage I6:L400 à adapter
    lig = Target.Row
    If Application.CountA(Cells(lig, 5), Cells(lig, 6), Cells(lig, 7), Cells(lig, 9)) < 4 Then 'si les 4 cellules de la ligne ne sont pas complétées
        MsgBox "Données manquantes"
        Exit Sub
    Else
    'si les 4 valeurs sont présentes ...
        'on suspend la gestion des événements
        Application.EnableEvents = False
        'on concatène
        Target.Offset(0, 3) = Cells(lig, 9) & Chr(10) & "Gencod commande: " & Cells(lig, 6) & Chr(10) & "Code interne: " & Cells(lig, 5) & Chr(10) & "DLC: " & Cells(lig, 7)
        'on met en gras
        Target.Offset(0, 3).Characters(1, Len(Target)).Font.Bold = True
        'on réactive la gestion des événements
        Application.EnableEvents = True
    End If
End If
End Sub

crdlt,

André

Merci à André pour le coup de main

... mais ce qui m'inquiète c'est que Violaine ne puisse pas lire la macro sur sa machine

Un clic droit sur l'onglet de Feuil1 > Visualiser le code, ça donne quoi???

Pour que cela fonctionne, faut-il que je déclare certaines variables ? :/

Pour que cela fonctionne, faut-il que je déclare certaines variables ? :/

Ben ... ce n'est pas indispensable, puisque chez moi, ça "fonctionne"

Tu as essayé le fichier que j'ai transmis? Que se passe-t-il si tu double-cliques sur un Libellé existant et que tu valides avec la touche Enter, juste après? Rien? Un message d'erreur?

Je l'ai ouvert autrement et cela fonctionne ! Merci à vous !

C'est top ! Merci bcp U.Milité !!

Cependant, Est-il possible que :

- le codage se génère sans que j'ai besoin de cliquer sur le libellé (car j'ai en réalité plusieurs centaines de références)?

- le résultat se modifie automatiquement si il y a un changement effectué dans l'une de mes cellules sources de la concatenation?

Violaine,

Il s'agit d'une macro évènementielle ... que U.Milité t'a très gentiment concocté ...

Pour cette macro évènementielle :

Il faut placer le pointeur de ta souris ... en bas ... sur le nom de l'onglet ...et ensuite

Tu fais un clic droit sur l'onglet de ta feuille ... et dans le sous-menu qui s'ouvre ... tu choisis de visualiser le code ...

et là tu peux recopier le code dans le module de la feuille de ton fichier de travail ...

Je comprends mieux ce point ... Merci James007.

Je comprends mieux ce point ... Merci James007.

de rien ... My pleasure ...

Tout le crédit en revient à U.Milité ...

Yé né comprends plou

Ma proposition répondait à:

U. Milité, je serais vraiment partante d'avoir par VBA la concaténation et la mise en gras des caractères se faisant au fur et à mesure de l'encodage au changement de valeur dans une cellule déterminée de la ligne en cours de modification. Ce serait en effet plus simple

Et maintenant tu nous dit:

Est-il possible que le codage se génère sans que j'ai besoin de cliquer sur le libellé (car j'ai en réalité plusieurs centaines de références)?

Mais pour ça, il suffit d'en revenir au début de ce fil et de relire (et mettre en œuvre) les propositions de MFerrant! Ça commençait comme ça:

    With Worksheets("Feuil1").Range("N41:N544")
        For i = 1 To .Rows.Count
            .Cells(i, 1).Characters(....etc.
        Next i
    End With

Tu vois ce que je veux dire?

Bonsoir,

Je n'aurai plus guère de temps ce soir (et moins encore demain, sans doute) ... Comme je suppose que j'ai compris ce que tu voulais, voici:

  • dans un premier temps, supprime du fichier le code que je t'ai fourni (la macro événementielle)
    Tu peux aussi le mettre en commentaire, mais il faut impérativement que ce code soit inopérant avant d'entamer le remplacement dans tes centaines de cellule
  • Colle ce bout de code comme dit plus haut (et redit par James007, que je remercie au passage ) dans la fenêtre de code de la Feuil1 (clic droit sur l'onglet > Visualiser le code):
    Sub OneShot()
        With Me.Range("L6:L9")
            For i = 1 To .Rows.Count
                .Cells(i, 1) = Cells(i + 5, 9) & Chr(10) & "Gencod commande: " & Cells(i + 5, 6) & Chr(10) & "Code interne: " & Cells(i + 5, 5) & Chr(10) & "DLC: " & Cells(i + 5, 7)
                .Cells(i, 1).Characters(1, Len(Cells(i + 5, 9))).Font.Bold = True
            Next i
        End With
    End Sub

    La plage L6:L9 doit bien sûr être adaptée à tes besoins! Une fois faite l'adaptation, exécute le code (en croisant les doigts, de préférence)
  • Si tout s'est bien passé, on peut maintenant coller les lignes suivantes en lieu et place de ma première proposition: c'est une nouvelle version de la procédure événementielle
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, [E6:E400]) Is Nothing Then 'plage I6:L400 à adapter
        ligne = Target.Row
        miseEnForme ligne
    End If
    If Not Intersect(Target, [F6:F400]) Is Nothing Then 'plage I6:L400 à adapter
        ligne = Target.Row
        miseEnForme ligne
    End If
    If Not Intersect(Target, [G6:G400]) Is Nothing Then 'plage I6:L400 à adapter
        ligne = Target.Row
        miseEnForme ligne
    End If
    If Not Intersect(Target, [I6:I400]) Is Nothing Then 'plage I6:L400 à adapter
        ligne = Target.Row
        miseEnForme ligne
    End If
    End Sub

    On gère ici les modifications de contenu des 4 colonnes (E, F, G et I).
  • Dans les 4 cas, on fait appel à une autre procédure, en lui fournissant en argument, le n° de la ligne en cours de modification. Voici la procédure en question; elle est à coller au même endroit que les deux autres:
    Sub miseEnForme(lig)
        If Application.CountA(Cells(lig, 5), Cells(lig, 6), Cells(lig, 7), Cells(lig, 9)) < 4 Then 'si les 4 cellules de la ligne ne sont pas complétées
            MsgBox "Données manquantes"
            Exit Sub
        Else
        'si les 4 valeurs sont présentes ...
            'on suspend la gestion des événements
            Application.EnableEvents = False
            'police "maigre"
            Cells(lig, 12).Font.Bold = False
            'on concatène
            Cells(lig, 12) = Cells(lig, 9) & Chr(10) & "Gencod commande: " & Cells(lig, 6) & Chr(10) & "Code interne: " & Cells(lig, 5) & Chr(10) & "DLC: " & Cells(lig, 7)
            'on met en gras
            Cells(lig, 12).Characters(1, Len(Cells(lig, 9))).Font.Bold = True
            'on réactive la gestion des événements
            Application.EnableEvents = True
        End If
    End Sub

Pour être certain, je joins le fichier, avec le code (j'ai mis en commentaire la Sub Worksheet_Change) ... Je te laisse prendre connaissance et si je ne suis pas disponible, tu as pu constater que d'autres prennent volontiers le relais. Merci à elles/eux!

Je prends enfin le temps de vous répondre !

Merci beaucoup U. Milité, ça fonctionne ! Génial !

Tip-top !

Bonjour,

Violaine a écrit :

Je prends enfin le temps de vous répondre ! ... ça fonctionne !

... Ah quel soulagement ! ... pendant un moment j'ai cru que ça tournait depuis trois jours

Rechercher des sujets similaires à "comment mettre gras partie contenu"