Copier coller des commentaires de feuille à feuille
Bonjour à tous,
Je désire faire un copier-coller des commentaires certaines cellules d'une feuil1 sur les cellules correspondantes d'une feuille2.
Voici mon code :
For i = 1 to 10
If Not Sheets("feuille1").Cells(I, "C").Comment Is Nothing Then
com = Cells(I, "C").Comment.Text
Sheets("feuille2").Cells(I, "C").AddComment com
End If
Next I
Les commentaires de la feuille1 sont bien copiés mais impossible de les coller sur la feuille2. Il y a certainement une erreur sur la ligne <br>
Sheets("feuille2").Cells(I, "C").AddComment com
car on me dit : "Erreur d'excécution 1004 : erreur définie par l'objet ou l'application"
Je ne comprends pas ! merci de bien vouloir m'éclairer
Bien cordialement
Bonjour,
Est-il possible de joindre le fichier concerné ? Car chez moi votre macro fonctionne correctement.
Cdlt,
Mon fichier contient de nombreuses données personnelles, donc je l'ai édulcoré et réduit à sa plus simple expression. mais maintenant il y a de quoi devenir fou, je me heurte à une autre erreur "variable objet ou variable de bloc With non définie". Un peu fatigué je ne trouve pas la raison de cette nouvelle erreur qui certainement est ridicule.
Dans le cas où ce fichier édulcoré ne vous serait d'aucune utilité je me propose de vous faire parvenir le fichier sur lequel je travaille mais en Message Privé ou au moyen de votre adresse e-mail selon votre souhait.
merci
Bonjour,
Deux choses :
- Préférez mettre les macros de types Sub dans un module standard (ici module 1) et non dans le code d'un objet. Les codes d'un objet sont le plus souvent réservés à des procédures événementielles (de type change, open, activate, etc etc ...)
- Cells se qualifie la plupart du temps, il est donc conseillé d'utiliser l'objet Worksheets devant. D'où le message d'erreur, le code ne sait pas a quel est l'objet parent (donc la feuille) de l'objet cells (donc avec la cellule de la feuille 1, etc ... d'où le message d'erreur with)
Ci contre votre fichier corrigé fonctionnel.
Cdlt,
D'abord merci pour ces explications que je shunte trop facilement
Je les donc appliquées à mon code et que nenni j'ai toujours la même erreur : "Erreur d'excécution 1004 : erreur définie par l'objet ou l'application" . Je commence à fatiguer et ne vois plus très clair.
Comme je vous l'ai dit je suis prêt à vous envoyer mon fichier en privé si cela, évidemment, ne vous dérange pas.
Encore merci
Bien cordialement
Bonjour,
Suite à notre échange ci-contre votre code modifié. J'en ai profité pour rajouter des incrémentations With afin de ne pas répéter les noms de feuilles à chaque fois, ça aère un peu le code. Pour vos commentaires en fait la subtilité est qu'un commentaire dans votre cellule de destination peut déjà être présent, dans lequel cas on ne peut en rajouter un par dessus, sinon cela génère une erreur. Il faut donc nettoyer la cellule de son commentaire avant d'en rajouter un.
Sub Miseajour_Mariages()
Dim I As Integer
Dim der As Integer
Dim com As String
With Worksheets("tout")
der = .Range("A65536").End(xlUp).Row
For I = 4 To der ' copie des données Mariages dans la feuille Mariage
Worksheets("Mariages").Cells(I, "A") = .Cells(I, "A")
Worksheets("Mariages").Cells(I, "B") = .Cells(I, "B")
Worksheets("Mariages").Cells(I, "D") = .Cells(I, "F")
Worksheets("Mariages").Cells(I, "D").Interior.ColorIndex = .Cells(I, "F").Interior.ColorIndex
Worksheets("Mariages").Cells(I, "E") = .Cells(I, "G")
If Not .Cells(I, "C").Comment Is Nothing Then
com = .Cells(I, "C").Comment.Text
Worksheets("Mariages").Cells(I, "C").Comment.Delete
Worksheets("Mariages").Cells(I, "C").AddComment com
End If
Next I
End With
With Worksheets("Mariages")
' copie des totaux
.Cells(der + 2, "C") = "nombre d'individus"
.Cells(der + 3, "C") = "nombre d'actes"
.Cells(der + 4, "C") = "nombre d'actes recopiés"
.Cells(der + 2, "D") = Worksheets("tout").Cells(der + 2, "F")
.Cells(der + 3, "D") = Worksheets("tout").Cells(der + 3, "F")
.Cells(der + 4, "D") = Worksheets("tout").Cells(der + 4, "F")
' création des bordures
For K = 3 To 9
For I = 4 To der
If Worksheets("tout").Cells(I, K).Borders.LineStyle <> xlLineStyleNone Then
.Cells(I, K).Borders(xlEdgeLeft).LineStyle = xlContinuous
.Cells(I, K).Borders(xlEdgeTop).LineStyle = xlContinuous
.Cells(I, K).Borders(xlEdgeRight).LineStyle = xlContinuous
.Cells(I, K).Borders(xlEdgeBottom).LineStyle = xlContinuous
End If
Next I
Next K
End With
End Sub
PS : Si jamais, pour vous exercer, je pense que vous auriez peut être plus vite fait de copier coller colonne par colonne entre vos deux feuilles. Mais comme ce n'est pas le sujet, je vous laisse y réfléchir de votre côté.
Cdlt,
Super sympa, je ne sais comment vous remercier.
En effet de petites astuces peuvent parfois nous faire tourner en rond pendant des heures, je ne savais pas qu'il était indispensable de supprimer les commentaires avant d'en copier d'autres, je pensais que les nouveaux commentaires écrasaient les anciens.
Certes mon code est lourd, car ayant pour habitude de le compléter petit à petit en fonction d'idées qui me passent par la tête, je ne prend pas le temps de le relire afin de l'aérer. Ce n'est pas très sérieux n'est ce pas.
Enfin votre remarque est pertinente, une copie colonne par colonne serait plus judicieuse, mais comme vous le dites là n'était pas le sujet.
Encore un grand merci et au plaisir de vous retrouver dans les méandres du VBA.
Jacky