Shino78
Messages postés2Date d'inscriptionmardi 28 avril 2009StatutMembreDernière intervention29 avril 2009
-
28 avril 2009 à 15:57
Shino78
Messages postés2Date d'inscriptionmardi 28 avril 2009StatutMembreDernière intervention29 avril 2009
-
29 avril 2009 à 12:30
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
r1r2
Messages postés22Date d'inscriptionmardi 23 janvier 2007StatutMembreDernière intervention31 mars 2010 29 avril 2009 à 10:38
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)
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 29 avril 2009 à 10:22
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)
Shino78
Messages postés2Date d'inscriptionmardi 28 avril 2009StatutMembreDernière intervention29 avril 2009 29 avril 2009 à 12:30
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.