Modifier tous les commentaires d’une sélection

mumusse

XLDnaute Nouveau
Bonjour
Je suis très novice en VBA. Je souhaite modifier les commentaires d’une sélection (alignement auto)
J’arrive à modifier tous les commentaires de la feuille active
For Each c In ActiveSheet.Comments
c.Shape.TextFrame.AutoSize = True
Next c
J’arrive à modifier le commentaire de la cellule active je sélectionne une cellule et lance la macro
With ActiveCell.Comment
.Shape.TextFrame.AutoSize = True
End With
J’essaie, sans y parvenir, de faire une macro qui modifie les commentaires d’une plage sélectionnée à la souris
1. Je sélectionne une plage à la souris
2. Je lance la macro
3. Cette macro modifie tous les commentaires présents dans ma sélection
Merci d’avance pour votre aide.
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Modifier tous les commentaires d’une sélection

Bonjour

Un fichier exemple serait le bienvenu pour que nous puissions tester nos propositions.

EDITION: Salut Robert, oui on s'est juste frôlé. On a évité la collision à 2 minutes près ;)
 
Dernière édition:

Robert

XLDnaute Barbatruc
Repose en paix
Re : Modifier tous les commentaires d’une sélection

Bonjour Mumusse, bonjour le forum,

Essaie comme ça :
Code:
Dim cel As Range
For each cel in selection
     With cel.Comment
     '...
     End With
Next cel

[Édition]
Bonjour JM on s'est croisé...
 

mumusse

XLDnaute Nouveau
Re : Modifier tous les commentaires d’une sélection

bonjour et merci
j'ai essayé mais mon niveau est proche de zéro
Dim cel As Range
For Each cel In Selection
With cel.Comment
.Shape.TextFrame.AutoSize = True
End With
Next cel
End Sub

mais
erreur d'exécution "91"
variable objet ou variable de bloc with non définie
j'ai oublié quoi ?
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Modifier tous les commentaires d’une sélection

Bonsoir Mumusse, bonsoir le forum,

Tu n'as rien oublié, c'est moi... Si dans ta sélection une cellule n'a pas de commentaire ça plante ! Pour éviter ça, le code corrigé et commenté :
Code:
Sub Macro1()
Dim cel As Range 'déclare la variable cel (CELlule)

For Each cel In Selection 'boucle sur toutes les cellules cel de la sélectoin
    On Error Resume Next 'gestion des erreurs (en cas d'erreur, passe à la ligne suivante)
    With cel.Comment 'prend en compte le commentaire de la cellule cel (provoque une erreur si cel n'a pas de commentaire)
        If Err <> 0 Then Err = 0: GoTo suite 'si un erreur a été générée, annule l'erreur, va à l'étiquette "suite"
        .Shape.TextFrame.AutoSize = True 'taille automatique du commentaire
    End With 'fin de la prise en compte du commentaire de la cellule cel
suite: 'étiquette
On Error GoTo 0 'annule la gestion des erreurs
Next cel 'prochaine cellule de la boucle
End Sub
 

compta compta

XLDnaute Nouveau
Bonjour,
J'ai besoin de votre précieuse aide.
Je ne connais rien au VBA ni aux macros:(, mais je pense que la macro fournie à Mumusse en 2012 :oops:pourrait résoudre mon soucis.
Je souhaite mettre à jour une information à l'intérieur des commentaires qui se trouvent sur ma feuille de calcul.
J'ai toute une plage qui contient pour chaque cellule un même commentaire que je souhaiterai modifier pour l'ensemble de la plage de cellules concernée.
Exemple : pour la plage J11:J278
le commentaire #DC-1{-&706804-&706805=4}@EXP!$J$5@EXP!$J$6@CA:' CENTRES - NATURES'!$B$2@DC:VALL contient la valeur $B$2 qui doit être remplacée par la valeur $B$9
(Le commentaire provient du paramétrage de la cellule par un complément provenant de notre logiciel de compta et qui nous permet d'extraire des données de notre logiciel directement dans un tableau Excel mis en forme librement par nous).
Ce paramétrage insert un commentaire dans la cellule concernée. Je n'ai pas de moyens de mettre à jour de façon globale la totalité des cellules, je dois les traiter unes à unes (ce qui fait beaucoup de travail :confused:...)
Quelqu'un pourrait-il m'aider S.V.P ?
D'avance merciiiii :)
 

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour Compta compta, bonjour le forum,

Si ta plage est fixe, remplace Selection par Range("J11:J278"), sinon, sélectionne d'abord la plage et lance la macro ensuite :
Sub Macro1()
Dim cel As Range 'déclare la variable cel (CELlule)

For Each cel In Selection 'boucle sur toutes les cellules cel de la sélectoin
On Error Resume Next 'gestion des erreurs (en cas d'erreur, passe à la ligne suivante)
With cel 'prend en compte le commentaire de la cellule cel (provoque une erreur si cel n'a pas de commentaire)
If Err <> 0 Then Err = 0: GoTo suite 'si un erreur a été générée, annule l'erreur, va à l'étiquette "suite"
.Comment.Shape.TextFrame.AutoSize = True 'taille automatique du commentaire
.Comment.Delete
.AddComment
.Comment.Text Text:="#DC-1{-&706804-&706805=4}@EXP!$J$5@EXP!$J$6@CA:' CENTRES - NATURES'!$B$9@DC:VALL"
End With 'fin de la prise en compte du commentaire de la cellule cel
suite: 'étiquette
On Error GoTo 0 'annule la gestion des erreurs
Next cel 'prochaine cellule de la boucle
End Sub
 

compta compta

XLDnaute Nouveau
Merci pour ta réponse Robert !
Le soucis (et je ne l'ai peut-être pas précisé :oops:) c'est que chaque cellule contient un commentaire différent.
C'est à dire, dans l'exemple que j'ai pris, le début du commentaire #DC-1{-&706804-&706805=4}....... 706804 et 706805 correspondent à des comptes comptables. Dans une autre cellule, il peut très bien y avoir #DC-1{&601104+&626000=4}.......
Ta solution peut-elle fonctionner dans ce cas ?
 

Robert

XLDnaute Barbatruc
Repose en paix
Re,

Non ça ne marchera pas ce que je t'ai proposé. Essaie comme ça :


Sub Macro1()
Dim cel As Range 'déclare la variable cel (CELlule)

For Each cel In Selection 'boucle sur toutes les cellules cel de la sélectoin
On Error Resume Next 'gestion des erreurs (en cas d'erreur, passe à la ligne suivante)
With cel 'prend en compte le commentaire de la cellule cel (provoque une erreur si cel n'a pas de commentaire)
If Err <> 0 Then Err = 0: GoTo suite 'si un erreur a été générée, annule l'erreur, va à l'étiquette "suite"
.Comment.Shape.TextFrame.AutoSize = True 'taille automatique du commentaire
.Comment.Text Text:=Replace(.Comment.Text, "$B$2", "$B$9")
End With 'fin de la prise en compte du commentaire de la cellule cel
suite: 'étiquette
On Error GoTo 0 'annule la gestion des erreurs
Next cel 'prochaine cellule de la boucle
End Sub
 

Discussions similaires

Réponses
0
Affichages
148
Réponses
1
Affichages
164

Statistiques des forums

Discussions
312 206
Messages
2 086 203
Membres
103 157
dernier inscrit
youma