[Résolu] Conserver Mise en Forme d'origine après exécution macro

WaïRa

XLDnaute Nouveau
Bonjour à tous,
Suite à une excellente aide de la part des membres (un grand merci encore à Staple1600),
J'exécute une macro me permettant de saisir du texte dans une inputbox puis de le placer, adjoint d'une signature+date à la suite de précédentes saisies dans une zone de texte définie (voir code ci-dessous).

Mon problème est qu'à chaque exé de la macro, celle-ci enlève la mise en forme qui était présente dans la zone texte concernée :( Quelqu'un pourrait m'aider à solutionner ce contre-temps s.v.p?

VB:
Sub WaiRa()
'
' WaiRa Macro
' signe WaiRa+Date
'
' Touche de raccourci du clavier: Ctrl+l
'
Dim Comm$, Signature$, Commentaires, X As Long
Comm = ActiveSheet.Shapes("Suivi").TextFrame2.TextRange
Signature = ("WaiRa") & Format(Date, "\_dd/mm")
Commentaires = Commentaires & Comm & vbCrLf & ("-->  ") & InputBox("Saisir commentaire suivi:")
X = Len(Commentaires) * 1
With ActiveSheet.Shapes("Suivi")
    .TextFrame2.TextRange = Commentaires & vbCrLf & Signature
    .TextFrame.Characters.Font.ColorIndex = 3
    .TextFrame.Characters.Font.Size = 14
   With .TextFrame.Characters(Start:=1, Length:=X).Font
    .Name = "Calibri Light": .Bold = True
    .ColorIndex = 3
    End With
    With .TextFrame.Characters(Start:=X + 1, Length:=Len(Signature) + 1).Font
    .Name = "Bradley Hand ITC": .Bold = True
    .ColorIndex = 23
    End With
End With
End Sub

Je précise que je débute tout juste et que je suis loin de comprendre encore l'ampleur de ce qu'est le code VBA. J'ai bien tenter de contourner le problème en essayant un rechercher/remplacer, mais sans succès, et il doit y avoir plus direct j'imagine!
Bref, un grand merci d'avance à qui voudra bien me porter secours :D
 

Pièces jointes

  • Excel-Downloads.xlsm
    141.5 KB · Affichages: 64

Staple1600

XLDnaute Barbatruc
Bonsoir à tous

Creusons, creusons chez Tonton Bill
Ce lien n'existe plus
NB: Remplacer le début de la macro par celui-ci pour tester l'exemple sur Excel
Sub AddTextBoxShape()
Dim textShape As Shape
Dim reportName As String
reportName = "Textbox report"
Set theReport = ActiveSheet

Bref tout cela pour dire qu'il faut tâtonner en farfouillant dans le Dev Center d'Office ;)
 

WaïRa

XLDnaute Nouveau
Bonjour tous, et bonjour Staple1600,

(Tonton, il s'est fait la malle y a un bout de temps, et il a bien eu raison ;) )

Si j'avais les notions de base, et savais ce que je recherchais exactement, je serais bien aller "farfouiller" chez tonton ou même papi moi-même, mais à mon niveau (si niveau il existe!) même ce code que tu me transmets généreusement, je ne sais pas quoi en faire...

Le code VBA et les macros, ca s'apprend pas en un w.e (jm'en suis drôlement aperçu^^), et n'ayant pas assez de temps actuellement, je remets mon initiation à plus tard (Et oui: procrastination, quand tu nous tiens!)

En attendant, ben pas autre choix que de compter sur le partage d'initiés à la macro, ou bien de laisser tomber et de retourner sur l'utilisation de mes petites fonctions excel :p

Dans tous les cas, merci pour ta réponse, et pour ton temps partagé: c'est bien gentil de ta part, et je t'en suis reconnaissant!

Morphée m'appelle ;) Adishaatz!
 

WaïRa

XLDnaute Nouveau
Je viens de tenter un:
VB:
Sub AddTextBoxShape()
Dim textShape As Shape
Dim reportName As String
reportName = "Textbox report"
Set theReport = ActiveSheet
Comm = ActiveSheet.Shapes("Suivi").TextFrame2.TextRange
Signature = ("NouveauNom") & Format(Date, "\_dd/mm")
Commentaires = Commentaires & Comm & ("--> ") & InputBox("Saisir commentaire suivi:")
X = Len(Commentaires) * 1
With ActiveSheet.Shapes("Suivi")
    .TextFrame2.TextRange = Commentaires & vbCrLf & Signature
    .TextFrame.Characters.Font.ColorIndex = 3
    .TextFrame.Characters.Font.Size = 14
    With .TextFrame.Characters(Start:=1, Length:=X).Font
    .Name = "Calibri Light": .Bold = True
    End With
    With .TextFrame.Characters(Start:=X + 1, Length:=Len(Signature) + 1).Font
    .Name = "Bradley Hand ITC": .Bold = True
    End With
End With
ActiveWorkbook.Save
End Sub
mais sans succès: même résultat qu'avant: ma mise en forme précédente change et je me retrouve avec mes signatures/dates en même police/couleur/taille que le reste des commentaires! La mise en forme inscrite dans la macro ne s'applique qu'au dernier commentaire rentré dans l'inputBox, et disparaitra aussitôt une nouvelle exécution de la macro réalisée. Bref ;)
Tchussssssss
 

Staple1600

XLDnaute Barbatruc
Bonsoir à tous

Moi aussi, je viens de mettre mon pyjama en pilou et zou au dodo de suite.
Juste avant je dépose cet essai où il y a un léger mieux ;)
VB:
Sub LeGrasEstMis()
Dim Comm$, Signature$, Commentaires, Z As Long
Signature = "WaiRa" & Format(Date, "\_dd/mm")
With ActiveSheet.Shapes("Suivi")
If .TextFrame2.HasText Then
Comm = Comm & .TextFrame2.TextRange.Text & vbCrLf
End If
Commentaires = "-->  " & InputBox("Saisir commentaire suivi:")
.TextFrame2.TextRange.Characters.Text = Comm & Commentaires & vbCrLf & Signature
.TextFrame.Characters.Font.ColorIndex = 9
Z = .TextFrame2.TextRange.Lines.Count
For i = 1 To Z
If i Mod 2 = 0 Then
.TextFrame2.TextRange.Lines(i).Font.Bold = True
End If
Next
End With
End Sub

EDITION: Sinon quand je disais de remplace, c'était dans la macro de Microsoft et juste pour la tester car je pensais tenir une piste avec cela
textShape.TextFrame2.TextRange.Characters(1, 15).ParagraphFormat.FirstLineIndent = 10
textShape.TextFrame2.TextRange.Characters(16).InsertBefore vbCrLf
 

WaïRa

XLDnaute Nouveau
Quelle réponse rapide ^^ c'est le pouvoir du pyjama, ça, c'est sûr ;)
Je pense que ma demande n'a pas dû être clair...
La nuit portant conseil, je mettrai demain un excel en exemple et tenterai d'être "cristal" :D
Sinon, c'est pas bien grave: la macro que tu m'as pondu ce W.E. marche très bien: je pinaille juste pour une petite mise en forme
Bref ;) Bonne nuit à toi :)
 

WaïRa

XLDnaute Nouveau
Salut le fofo, Salut Staple1600 :)

Un exemple valant mieux que moult explications, j'ai refait un excel avec une zone texte expliquant le pb; les macros concernées sont enregistrées dans ce classeur, et signalées par des vilaines flèches oranges et rouges :p
Comme dit dans cette zone texte, un collage spécial qui respecte la mise en forme source ne réglerait il pas ce pb? Je dis ca, mais je suis incapable d'utiliser correctement le collage spécial, et je ne saurais pas où l'intégrer....

Bonne journée!
 

Pièces jointes

  • Excel-Downloads.xlsm
    160.9 KB · Affichages: 56

Staple1600

XLDnaute Barbatruc
Bonjour à tous

Pourquoi faire simple quand on peut faire compliqué
J'ai fait maigrir ma première macro
VB:
Sub MacroNoFatNoGluten()
Dim sh As Shape
Signature = "WaiRa" & Format(Date, "\_dd/mm")
Set sh = ActiveSheet.Shapes("Suivi")
sh.Fill.ForeColor.RGB = RGB(245, 200, 255)
sh.TextFrame2.TextRange.InsertAfter _
Chr(13) & "==>: " & InputBox("Commentaires, svp!", "Saisie du commentaire", "Saisir ICI votre texte.") & Chr(13) & Signature
End Sub
Reste toujours cette histoire de format, mais ce n'est là que fioritures et coloriages, non ? ;)
 

WaïRa

XLDnaute Nouveau
Bonsoir JM, Fofo,
aaaahhhhh le gluten, ca n'a rien de bon!!! ;)
Maigrie mais d'autant plus efficace! Elle conserve le texte précédant l'inclusion!!! Cool!!!

E, jeune apprenti, j'ai tenté d'utiliser un With pour appliquer une mise en forme à la signature: résultat des comptes, je crois que j'ai pété plus haut que mon c.... :p

Petite question: existe t'il sous vba une fonction du style Recherche() (fonction que j'affectionne particulièrement, avec Si(), pour nombres de formules). Je sais que oui, vu que j'ai tenté, sans grands résultats, à rechercher dans la zone texte "WaiRa_date" pour lui appliquer une mise en forme.

Oui, j'aime les paillettes :p

Merci en tout cas encore pour ton aide Mr. Staple

PS: dernière question! J'imagine que le fait que ce sur quoi porte mon attention se trouve dans une zone texte complique les opérations, non? Car du peu que j'ai vu, les modifs à faire dans les cellules ou tableaux m'ont paru beaucoup plus simples! Mais c'est certainement dû au fait que je n'encadre encore pas grand chose aux macros... Bref, merci!
 

Staple1600

XLDnaute Barbatruc
Bonsoir à tous

J'imagine que le fait que ce sur quoi porte mon attention se trouve dans une zone texte complique les opérations, non?
C'est ton classeur, ton mode opératoire. ;)
Personnellement, j'ai pas trop compris l'utilité de ce que tu cherches à faire, ni pourquoi tu as choisi une zone de texte plutôt qu'une plage de cellule.
En écrivant cette phrase, je viens de penser à un truc, je teste et je te redis.
 

WaïRa

XLDnaute Nouveau
Concernant ce que je cherche à faire, c'est répondre à une demande d'un collègue qui oublie tout le temps de signer dater ;)
Et pour la zone texte, comme dis, ce n'est pas moi qui est crée la feuille, je me base sur quelque chose qui existait déjà!
Vu que c'était le gros b**del, j'ai demandé l'autorisation de pouvoir simplifier les procédures (autorisation qui m'a été donné avec enthousiasme ^^), mais je n'ai pas voulu trop apporter de modifs non plus. Mais on est bien d'accord tous les deux pour dire qu'un tableau réservé aux différents commentaires de suivi aurait amplement simplifié et clarifié la chose. J'y ai pensé quelque fois à faire sauter cette zone de texte! Surtout qu’avec une simple formule utilisant Si(), et(), recherche(), le problème aurait vite été résolu...
Mais ca a été l'occasion pour moi de découvrir l'univers des macros, ainsi que certains forums et membres sympathiques ;)
 

Staple1600

XLDnaute Barbatruc
Re

Donc voici un biais qui utilise l'outil Appareil Photo
1) Sur un feuille ici la feuille 3 (que j'ai masquée à la fin de la manip)
je formate les cellules A2 et A3 comme je souhaite
Sur une autre feuille grâce à l'appareil photo, je crée une image de cette plage
Je créé également un CommandButton qui a ce code VBA
VB:
Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
Signature = "WaiRa" & Format(Date, "\_dd/mm")
Feuil3.Rows("2:3").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
With Feuil3.Cells(2, 1)
    .Value = "'==>: " & InputBox("Commentaires, svp!", "Saisie du commentaire", "Saisir ICI votre texte.")
    .Font.Bold = True
    .Font.ColorIndex = 33
    .Borders.LineStyle = 1
End With
With Feuil3.Cells(2 + 1, 1)
    .Value = Signature
    .Interior.ColorIndex = 3
End With
End Sub
Et voilà ce que cela donne
Waira.jpg
 

WaïRa

XLDnaute Nouveau
Salut tous,

Là, on se passe carrément de la zone texte quoi ;) Merci pour cette dernière ponte.
Pensant que ma demande serait beaucoup plus simple, je vais m'arrêter là et utiliser la NoFatNoGluten qui a l'avantage de ne pas casser une mise en forme qui aurait été voulue pour attirer l'attention sur un point important.

En tout cas merci beaucoup encore, Staple1600, pour ton temps et tes différentes pontes :)

Bonne journée,

Bien cordialement,

WaiRa
 

WaïRa

XLDnaute Nouveau
Re tout le monde, Staple1600,

Ne comprenant pas pourquoi avec une macro1, d'un côté, qui réalisait la première partie de mes besoins, et une macro2, de l'autre, qui réalisait la seconde partie de mes besoins nous ne parvenions pas à réaliser une macro arrivant à tout faire en une fois (il n'y avait rien de logique au fait de ne pas parvenir à faire ce que je voulais), j'ai bataillé sur différentes macro que tu m'as proposé, et à force de temps et de bidouille (et oui! débutant oblige!!!), je suis parvenu à pondre cette macro qui fait exactement ce que je souhaitais :
VB:
Sub WaiRa()
'
' test3009 Macro
' test réalisé sur les moult pontes du renommé JM, alias Staple1600 ;)
'
Dim sh As Shape, Comm$, Signature$, Commentaires, X As Long
Comm = ActiveSheet.Shapes("Suivi").TextFrame2.TextRange
Signature = "WaiRa" & Format(Date, "\_dd/mm") & " "
Commentaires = Comm & Suivi
Suivi = Chr(13) & "--> " & InputBox("Commentaires, svp!", "Saisie du commentaire", "Saisir ICI votre texte.") & Chr(13) & Signature
X = Len(Commentaires) * 1
Set sh = ActiveSheet.Shapes("Suivi")
sh.TextFrame2.TextRange.InsertAfter _
Suivi

With ActiveSheet.Shapes("Suivi").TextFrame.Characters(Start:=X + Len(Suivi) - Len(Signature), Length:=Len(Signature) + 1).Font
    .Name = "Bradley Hand ITC": .Bold = True
    .ColorIndex = 33
End With
With ActiveSheet.Shapes("Suivi").TextFrame.Characters(Start:=X + Len(Suivi), Length:=Len(Signature) + 1).Font
    .Name = "Calibri Light": .Bold = True
    .ColorIndex = 3
End With

End Sub
:D
Je suis sûr qu'il y a tout plein de détours inutiles, mais bon, elle marche: c'est le principal :)
Merci pour ton soutien Staple en tout cas! A fouiner et re fouiner dans toutes tes pontes et autres recherches sur le net, j'ai avancé un peu dans mon apprentissage des macros, et suis parvenu à faire ce que je voulais dans mon classeur, donc cool :)

Bon WE!!!
 
Dernière édition:

Statistiques des forums

Discussions
292 981
Messages
1 927 687
Membres
183 587
dernier inscrit
loulou1338