Code pour commentaires
Bonjour à tous.
J'aurais aimé savoir s'il vous paraît possible de réduire la taille d'un code pour ajouter un commentaire dans plusieurs cellules. J'ai cherché, mais je crois bien, d'après ce que j'ai trouvé ici et là, qu'il faut faire cellule par cellule.
Je mets un fichier d'exemple en PJ avec un (long) bout de code dans le module 1 qui fait le travail pour la semaine 1. Jusque là, ça va.
Mais sachant qu'il y a 52 semaine, vous voyez le topo!!!
Me faut-t'il copier 52 fois ce code (en changeant de plus le "Range" et "Text" pour chaque case) ?
Cela ne me dérange pas plus que ça, le seul souci, c'est la longueur du code qui va m'obliger aussi à insérer tout ceci dans d'autres modules et faire des "Call" sur au moins 9 macros, je crois.
Merci par avance pour vos aimables éclairages sur le sujet.
Bonjour marcache
- Le commentaire est-il particulier à chaque cellule d'une même colonne ?
- Le commentaire est-il le même quelque soit la colonne ?
- La ligne de fin est-elle toujours la même ou bien varie-t-elle ?
Sinon pour effacer, une seule ligne suffit :
Sub EFFACECOMMENTAIRES()
Sheets("s1").Range("d4:d18").ClearComments
End SubBonjour "mafraise". (Cool comme pseudo)...
Premièrement, merci pour votre lecture et ce retour plus que rapide.
Pour répondre à vos questions :
Question 1 : Le commentaire est-il particulier à chaque cellule d'une même colonne ?
Réponse : Chaque colonne est une semaine, donc chaque cellule de cette colonne dans la plage reçoit le même commentaire.
Par exemple, dans la colonne semaine 1, dans les cellules de D4 à D18, le commentaire sera toujours "Semaine 1". Dans la colonne semaine 2, dans les cellules de C4 à C18, le commentaire de sera toujours "Semaine 2", et ainsi jusqu'à 52 (voire 53 pour certaines années).
Question 2 : Le commentaire est-il le même quelque soit la colonne ?
Réponse : En rapport avec ce que je viens d'écrire, non. Chaque colonne à son commentaire mais c'est le même pour chaque cellule d'une même colonne.
Question 3 : La ligne de fin est-elle toujours la même ou bien varie-t-elle ?
Réponse : Oui, la ligne de fin est toujours la même, ligne 18.
J'ajoute à vos questions une précision :
Pour la taille du commentaire, sa police , le style de la police et la taille de police, ce serait bien que chaque commentaire ait le même format que celui dans le code du module 1, à savoir :
With .Shape
.Width = 200
.Height = 50
With .TextFrame
.Characters.Font.Name = "Calibri"
.Characters.Font.FontStyle = "Gras"
.Characters.Font.Size = 36En espérant avoir répondu avec suffisamment de précision, je vous remercie encore pour votre regard sur ma requête.
Bonjour à tous,
Si j'ai bien compris, le code ci-dessous permet de générer les commentaires pour les colonnes D à (M ou dernière cellule pleine) :
Public Sub AJOUTCOMMENTAIRES()
Application.ScreenUpdating = False
Dim enTeteRng As Range
With ThisWorkbook.Worksheets("S1").Range("D3")
Set enTeteRng = Range(.Cells, .End(xlToRight))
End With
Dim eT As Range, i As Long
For Each eT In enTeteRng
For i = 1 To 15
With eT.Offset(i).AddComment(eT.Value)
.Visible = False
With .Shape
.Width = 200
.Height = 50
With .TextFrame.Characters.Font
.Name = "Calibri"
.FontStyle = "Gras"
.Size = 36
End With
End With
End With
Next i
Next eT
Application.ScreenUpdating = True
End SubAttention : vu qu'on est obligé d'ajouter les commentaires "cellule par cellule", ne vous inquiétez pas si la macro rame un peu pour les 52 semaines… Ce sont 52*15 = 780 commentaires à ajouter, qui infine sont des formes (donc assez lourd).
Re marcache, bonjour saboh12617
Une autre méthode suite au commentaire à la fin du message de saboh12617 . On ne crée que les commentaires de la ligne n°4 puis on fait un "copier / collage spécial... Commentaires". Je ne sais pas si c'est plus rapide.
edit : bon, j'ai vérifié. Pour 53 semaines, c'est environ 8 fois plus rapide.
Le code dans module1 :
Public Sub AjouterCommentaires()
Dim xcell As Range
Application.ScreenUpdating = False
EffacerCommentaires
For Each xcell In Range([d3], Cells(3, Columns.Count).End(xlToLeft)).Offset(1)
xcell.AddComment
With xcell.Comment
.Visible = False
.Text Text:=xcell.Offset(-1).Value
.Shape.Width = 200
.Shape.Height = 50
.Shape.TextFrame.Characters.Font.Name = "Calibri"
.Shape.TextFrame.Characters.Font.FontStyle = "Gras"
.Shape.TextFrame.Characters.Font.Size = 36
End With
Next xcell
Range([d3], Cells(3, Columns.Count).End(xlToLeft)).Offset(1).Copy
Range([d3], Cells(3, Columns.Count).End(xlToLeft)).Offset(2).Resize([d4:d18].Rows.Count - 1).PasteSpecial xlPasteComments
Application.CutCopyMode = False:[d3].Select
End Sub
Sub EffacerCommentaires()
Application.ScreenUpdating = False
Range([d3], Cells(3, Columns.Count).End(xlToLeft)).Offset(1).Resize([d4:d18].Rows.Count).ClearComments
Application.CutCopyMode = False: [d3].Select
End SubRe marcache, bonjour saboh12617
, Une autre méthode suite au commentaire à la fin du message de saboh12617 . On ne crée que les commentaires de la ligne n°4 puis on fait un "copier / collage spécial... Commentaires". Je ne sais pas si c'est plus rapide.
edit : bon, j'ai vérifié. Pour 53 semaines, c'est environ 8 fois plus rapide.
Ah c'est très malin @mafraise, je n'y avais pas pensé !
Excellente solution, à privilégier.
Bonjour "saboh12617" (on dirait le nom d'une nouvelle planète, sympa!).
Que vous dire, à vous et à "Mafraise" sinon : Chapeau les artistes!
C'est tout simplement parfait!
Votre gentillesse n'a d'égal que vos connaissances et aptitudes.
Encore merci, je vais essayer de comprendre vos façons de procéder.
Bon courage dans vos œuvres respectives.