Excel mise en gras et copie de cellule (VBA) [Résolu]

Signaler
Messages postés
2
Date d'inscription
mardi 28 avril 2009
Statut
Membre
Dernière intervention
29 avril 2009
-
Messages postés
2
Date d'inscription
mardi 28 avril 2009
Statut
Membre
Dernière intervention
29 avril 2009
-
Bonjour,

Voila ce que je cherche à faire sur Excel en VBA:  On commence par sélectionner une cellule(final) via inputbox, ensuite on sélectionne une cellule(A) via InputBox, on copie le contenu de la cellule(A) à la suite de ce que contient la cellule(final) (si elle contient quelque chose), on demande alors via une msgbox (oui/non) si le morceau de texte copié doit être en gras, puis resélection d'une nouvelle cellule(A) etc ...

Mon problème : Une fois qu'une partie de texte à été demandé en gras, si je demande la suivante en gras il me repasse tout le reste de la cellule en normal..

En gros il ne garde pas le "formatage Gras" de ce que contenait déjà la cellule(final).

Sub test()
Dim var1 As Range
Dim varA As String
Dim final As Range
Dim reponse As Integer
Dim varB As Integer

On Error Resume Next
Set final = Application.InputBox("Sélectionnez une cellule", "Sélection de la cellule final", Type:=8)
If Err.number = 424 Then GoTo BUG

varB = 1

SELCT:

Set var1 = Application.InputBox("Sélectionnez une cellule", "Sélection cellule A", Type:=8)
If Err.number = 424 Then GoTo BUG

varA = var1 & (" ")
final = final & varA
reponse = MsgBox("En gras ?", 4, Selection)
If reponse = 6 Then
    With final.Characters(Start:=varB, Length:=Len(varA)).Font
    .Name = "Calibri"
    .FontStyle = "Gras"
    End With
End If

varB = Len(final)

GoTo SELCT

BUG:
End Sub

Merci d'avance, en espérant avoir été clair.. ce qui est loin d'être sur, mais je me ferai une joie de vous aider dans le but de m'aider

3 réponses

Messages postés
22
Date d'inscription
mardi 23 janvier 2007
Statut
Membre
Dernière intervention
31 mars 2010

Bonjour,

Je n'ai pas testé le code de Jack, mais je pense que le fait de modifier le contenu de la cellule final fait perdre la mise en
forme des caractères. Une idée est donc de mémoriser le style de chaque
caractère, puis d'ajouter les nouveaux caractères et enfin de
réappliquer à chaque caractère son format mémorisé.

Voici un exemple, qui peut certainement être optimisé, de ce que ça peut donner à partir de ton code :





Sub test()

    Dim var1 As Range

    Dim varA As String

    Dim final As Range

    Dim reponse As Integer

    Dim varB As Integer

    Dim i As Long

    Dim stylePolice() As String

    Dim strStylePolice As String


    On Error Resume Next

    Set final = Application.InputBox("Sélectionnez une cellule", "Sélection de la cellule final", Type:=8)

    If Err.Number = 424 Then GoTo BUG


   
'On mémorise le style des caractères

    ReDim stylePolice(Len(final.Value))

    For i = 1 To Len(final.Value)

        With final.Characters(i, 1).Font

            stylePolice(i) = .FontStyle

        End With

    Next


    varB = 1


SELCT:


    Set var1 = Application.InputBox("Sélectionnez une cellule", "Sélection cellule A", Type:=8)

    If Err.Number = 424 Then GoTo BUG


    ReDim Preserve stylePolice(UBound(stylePolice) + 1 + Len(var1.Value))


    reponse = MsgBox("En gras ?", 4, Selection)

    If reponse = 6 Then

        strStylePolice = "Gras"

    Else

        strStylePolice = "Normal"

    End If

    For i = Len(final.Value) + 1 To UBound(stylePolice)

        stylePolice(i) = strStylePolice

    Next


    varA = var1 & (" ")

    final = final & varA


   
'On réapplique le style caractère par caractère

    For i = 1 To UBound(stylePolice)

        With final.Characters(Start:=i, Length:=1).Font

            .Name = "Calibri"

            .FontStyle = stylePolice(i)

        End With

    Next


    varB = Len(final)


    GoTo SELCT


BUG:

End Sub
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
75
Salut
Je pense que cela est dû au fait que, lorsque tu insères le dernier texte en gras, l'attribut gras reste actif, donc influence la présentation du texte suivant.
Donc, si tu choisis d'insérer un texte en "normal" (pas gras), il faut aussi l'écrire :

If reponse = vbYes Then
    With final.Characters(Start:=varB, Length:=Len(varA)).Font
       .Name = "Calibri"
       .FontStyle = "Gras"
    End With
Else
    With final.Characters(Start:=varB, Length:=Len(varA)).Font
       .Name = "Calibri"
       .FontStyle = "Normal"
    End With
End If

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
2
Date d'inscription
mardi 28 avril 2009
Statut
Membre
Dernière intervention
29 avril 2009

Merci beaucoup à tous les deux.

Oui en effet même avec la modification apporté par jack la mise en forme des caractères de la cellule final se perdait.
r1r2 ton code marche niquel, J'avais pas eu l'idée de ré appliquer le style a chaque caractère.

Encore un GRAND merci !!