Macro ne fonctionne pas
Bonjour le forum,
Je vais être franc, j'ai posé une question sur un autre forum sur lequel j'ai mieux l'habitude.
La question était: Comment copier des commentaires dans tout un classeur?
En réponse, une seule. Cette macro super bien expliquée mais petit souci, copie que le rectangle.
Les onglets vont de Janvier 2018 à Décembre 2018.
Les onglets sont identiques et toujours la même cellule A3.
Le texte est le suivant sur deux lignes dans Janvier 2018:
Cliquez cellule A3
Distance Mois Précédent
Sub CopieCommentaires()
Dim R As Worksheet 'déclare la variable R (onglet de Référence)
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim TC As String 'déclare la variable TC (Texte du Commentaire)
Set R = Worksheets("Janvier 2018") 'définit l'onglet de référence R (celui où il y a le commentaire, à adapter)
On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne suivante)
TC = R.Range("A3").Comment.Text 'définit le texte du commentaire TC (génère une erreur si A3 ne contient pas de commentaire)
If Err <> 0 Then 'condition : si une erreur a été générée
MsgBox "il n'y a pas de commentaire ! Action terminée." 'message
Exit Sub 'sort de la procédure
End If 'fin de la condition
For Each O In Worksheets 'boucle sur tous les onglets O du classseur
If O.Name <> R.Name Then 'condition : si le nom de l'onglet O est différent du nom de l'onget de référence R
With O.Range("A3") 'prend en compte la cellule A3 de l'onglet de la boucle
.Comment.Delete 'supprime un éventuel commentaire déjà existant
.AddComment 'ajoute un commentaire
Comment.Text = TC 'définit le texte du commentaire ajouté
End With 'fin de la prise en compte de la cellule A3
End If 'fin de le condition
Next O 'prochain onglet de la boucle
End SubMerci pour vos éventuelles réponses
Cordialement
Bonjour,
En effet le programme est bien expliqué et ne sert qu'à copier le commentaire, tu souhaites également copier la valeur de la cellule, c'est bien´ça?
Bonjour Ausecour
Non non que les commentaires.
Sauf que ça recopie bien le rectangle des commentaires mais qu'il est vide sans commentaire
Complément:
Je clique sur cette cellule et s'affiche cellule A5
Dans ThisWorkbook
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal R As Range) 'Cliquez cellule A4 La distance du Mois Précédent s'affiche (Pas de Double Clic)
If R.Address = "$A$3" And R.Count = 1 Then Rows(5).Hidden = Not Rows(5).Hidden: R(1, 2).Select
End SubCurieux
Merci à toi
Cordialement
Bonjour,
vérifie le contenu du commentaire à copier et vérifie qu'il n'y a pas d'erreur au moment de l'ajout du commentaire
Sub CopieCommentaires()
Dim R As Worksheet 'déclare la variable R (onglet de Référence)
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim TC As String 'déclare la variable TC (Texte du Commentaire)
Set R = Worksheets("Janvier 2018") 'définit l'onglet de référence R (celui où il y a le commentaire, à adapter)
On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne suivante)
TC = R.Range("A3").Comment.Text 'définit le texte du commentaire TC (génère une erreur si A3 ne contient pas de commentaire)
If Err <> 0 Then 'condition : si une erreur a été générée
MsgBox "il n'y a pas de commentaire ! Action terminée." 'message
Exit Sub 'sort de la procédure
End If 'fin de la condition
msgbox "commentaire à copier : " & TC
For Each O In Worksheets 'boucle sur tous les onglets O du classseur
If O.Name <> R.Name Then 'condition : si le nom de l'onglet O est différent du nom de l'onget de référence R
With O.Range("A3") 'prend en compte la cellule A3 de l'onglet de la boucle
.Comment.Delete 'supprime un éventuel commentaire déjà existant
on error goto 0
.AddComment 'ajoute un commentaire
Comment.Text = TC 'définit le texte du commentaire ajouté
End With 'fin de la prise en compte de la cellule A3
End If 'fin de le condition
Next O 'prochain onglet de la boucle
End SubRebonjour,
Ça doit être la ligne Comment.text = TC qui ne fonctionne pas, il ne manque pas un . avant le Comment?
Parce que si il manque le point ça ne fait pas Range("A3").Comment.text = TC
ça doit juste déclarer une variable ça se trouve, à vérifier, ça peut être tout bête, je trouvais ça étrange le fait qu'il manque un point à cet endroit...
Merci de me dire si ça résoud
EDIT : je pensé sincèrement que ça vient de ça, le commentaire est enregistré dans TC via ça :
TC = R.Range("A3").Comment.Text
du coup il faudrait que ce soit O.Range("A3").Comment.Text
C'est bien le point qui manque d'après moi
Bonjour Ausecour,
il ne manque pas un . avant le Comment
bien vu !
Bonjour tous les deux
J'ai ajouté le . à .Comment.Text = TC 'définit le texte du commentaire ajouté
Ce qui donne:
Sub CopieCommentaires()
Dim R As Worksheet 'déclare la variable R (onglet de Référence)
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim TC As String 'déclare la variable TC (Texte du Commentaire)
Set R = Worksheets("Janvier 2018") 'définit l'onglet de référence R (celui où il y a le commentaire, à adapter)
On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne suivante)
TC = R.Range("A3").Comment.Text 'définit le texte du commentaire TC (génère une erreur si A3 ne contient pas de commentaire)
If Err <> 0 Then 'condition : si une erreur a été générée
MsgBox "il n'y a pas de commentaire ! Action terminée." 'message
Exit Sub 'sort de la procédure
End If 'fin de la condition
MsgBox "commentaire à copier : " & TC
For Each O In Worksheets 'boucle sur tous les onglets O du classseur
If O.Name <> R.Name Then 'condition : si le nom de l'onglet O est différent du nom de l'onget de référence R
With O.Range("A3") 'prend en compte la cellule A3 de l'onglet de la boucle
.Comment.Delete 'supprime un éventuel commentaire déjà existant
On Error GoTo 0
.AddComment 'ajoute un commentaire
.Comment.Text = TC 'définit le texte du commentaire ajouté
End With 'fin de la prise en compte de la cellule A3
End If 'fin de le condition
Next O 'prochain onglet de la boucle
End Subça bug
Erreur de compilation
Affectation à une constante non autorisée
bonjour
essaie avec
.addcomment TCet supprime la ligne
.comment.text=TCSinon avec l'enregistreur de macro j'ai trouvé ça pour changer le contenu d'un commentaire :
Range("A1").Comment.Text Text:="blabla"
du coup il faudrait plutôt mettre .Comment.Text Text:= TC
J'ai testé sur un classeur de test et ça fonctionne écrit comme ça.
Ça donnera donc :
Sub CopieCommentaires()
Dim R As Worksheet 'déclare la variable R (onglet de Référence)
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim TC As String 'déclare la variable TC (Texte du Commentaire)
Set R = Worksheets("Janvier 2018") 'définit l'onglet de référence R (celui où il y a le commentaire, à adapter)
On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne suivante)
TC = R.Range("A3").Comment.Text 'définit le texte du commentaire TC (génère une erreur si A3 ne contient pas de commentaire)
If Err <> 0 Then 'condition : si une erreur a été générée
MsgBox "il n'y a pas de commentaire ! Action terminée." 'message
Exit Sub 'sort de la procédure
End If 'fin de la condition
MsgBox "commentaire à copier : " & TC
For Each O In Worksheets 'boucle sur tous les onglets O du classseur
If O.Name <> R.Name Then 'condition : si le nom de l'onglet O est différent du nom de l'onget de référence R
With O.Range("A3") 'prend en compte la cellule A3 de l'onglet de la boucle
.Comment.Delete 'supprime un éventuel commentaire déjà existant
On Error GoTo 0
.AddComment 'ajoute un commentaire
.Comment.Text Text:= TC 'définit le texte du commentaire ajouté
End With 'fin de la prise en compte de la cellule A3
End If 'fin de le condition
Next O 'prochain onglet de la boucle
End SubEnfin!!!
Merci à toux ceux qui m'ont aidé
Je m'excuse de n'avoir pu fournir de fichier même épuré
Bonne fin de soirée à tous
Option Explicit
Sub CopieCommentaires()
Dim R As Worksheet 'déclare la variable R (onglet de Référence)
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim TC As String 'déclare la variable TC (Texte du Commentaire)
Set R = Worksheets("Janvier 2018") 'définit l'onglet de référence R (celui où il y a le commentaire, à adapter)
On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne suivante)
TC = R.Range("A3").Comment.Text 'définit le texte du commentaire TC (génère une erreur si A3 ne contient pas de commentaire)
If Err <> 0 Then 'condition : si une erreur a été générée
MsgBox "il n'y a pas de commentaire ! Action terminée." 'message
Exit Sub 'sort de la procédure
End If 'fin de la condition
MsgBox "commentaire à copier : " & TC
Application.EnableEvents = False
For Each O In Worksheets 'boucle sur tous les onglets O du classseur
If O.Name <> R.Name Then 'condition : si le nom de l'onglet O est différent du nom de l'onget de référence R
R.Range("A3").Copy O.Range("A3")
End If 'fin de le condition
Next O 'prochain onglet de la boucle
Application.EnableEvents = True
End Sub