Concaténer du texte dans la zone commentaire d'une cellule

manuthemalicious

XLDnaute Nouveau
Bonjour,

Je souhaite réaliser une macro qui concatènerai le contenu des cellule B2, C2, D2 dans la zone "commentaire" de la cellule A2.

Cette fonctionnalité est à étendre pour toutes les cellules, soit concaténer le contenu des cellules Bn, Cn, Dn dans la zone commentaire de la cellule An.

Si une bonne âme veut bien me donner un coupe de pouce...

D'avance merci.
 

pierrejean

XLDnaute Barbatruc
Re : Concaténer du texte dans la zone commentaire d'une cellule

bonjour manuthemalicious

Tu peux t'inspirer de ceci

Code:
For Each cel In Selection
  cel.ClearComments
  cel.AddComment
  cel.Comment.Text Text:=cel.Offset(0, 1) & cel.Offset(0, 2) & cel.Offset(0, 3)
 Next cel
 

manuthemalicious

XLDnaute Nouveau
Re : Concaténer du texte dans la zone commentaire d'une cellule

bonjour manuthemalicious

Tu peux t'inspirer de ceci

Code:
For Each cel In Selection
  cel.ClearComments
  cel.AddComment
  cel.Comment.Text Text:=cel.Offset(0, 1) & cel.Offset(0, 2) & cel.Offset(0, 3)
 Next cel

Bonjour et merci pour ce début de code.

Je l'ai modifié de la sorte:
Code:
Range("P10:P400").Select
For Each cel In Selection
  cel.ClearComments
  cel.AddComment
  cel.Comment.Text Text:=cel.Offset(0, 7) & cel.Offset(0, 24)
 Next cel

ce qui fonctionne correctement mais m'oblige à lancer la macro manuellement.
J'ai déjà vu des macros se lancer automatiquement lors de la modification de la feuille (Private sub etc...), peux tu m'en apprendre un peu plus à ce sujet?
Peut être même me conseiller de la lecture?

D'autre part, existe t'il un moyen de sélectionner la colonne entière sans en spécifier les limites (P10:p400)? j'ai essayé en nommant la colonne P mais lorsque je réalise la sélection, et comme une cellule fusionnée passe par P, c'est l'ensemble des colonnes couvertes par la cellule fusionnée qui est sélectionnée.
 

Dull

XLDnaute Barbatruc
Re : Concaténer du texte dans la zone commentaire d'une cellule

Salut manuthemalicious, pierrejean:), le Forum

PierreJean étant déconnecté je te propose de mettre ce code dans le Worksheet_SelectionChange de ta Feuille

soit

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
For Each cel In Range("P10:P400")
  cel.ClearComments
  cel.AddComment
  cel.Comment.Text Text:=cel.Offset(0, 7) & cel.Offset(0, 24)
 Next cel
End Sub
Évite autant que possible les .Select cela ralentit le Code

Pour ta deuxième question

je te propose de mette
Code:
For Each Cell In Range("P10:P" & Range("P65536").End(xlUp).Row)
à la place de
Code:
For Each cel In Range("P10:P400")
cela te permettra de sélectionner de la cellule P10 à la dernière cellule non vide de la colonne P.

deuxième Solution: Enlèves la Fusion des Cellules et remplace les par Centrer sur Plusieurs Colonnes

Sélectionnes tes Cellules
Click Droit
Onglet Alignement
Horizontal: Centrer sur plusieurs Colonnes

Et Voila

L'esthétisme sera le même mais la colonne P pourra être sélectionnée sans les autres colonnes fusionnées.

Bonne Journée
 
Dernière édition:

pierrejean

XLDnaute Barbatruc
Re : Concaténer du texte dans la zone commentaire d'une cellule

Re

Il me parait excessif de selectionner toute la colonne soit tout de même 65536 cellules

je te suggere (a mettre dans le module de la feuille)
sera declenchée par un changement en colonne P et evitera les cellules fusionnées
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 16 Then
For Each cel In Range("P1:P400")
 If Not cel.MergeCells Then
  cel.ClearComments
  cel.AddComment
  cel.Comment.Text Text:=cel.Offset(0, 7) & cel.Offset(0, 24)
 End If
Next cel
End If
End Sub

Edit : Salut ami Dull :)
 

manuthemalicious

XLDnaute Nouveau
Re : Concaténer du texte dans la zone commentaire d'une cellule

Bonjour et merci à vous de passer du temps sur ce post.

J'ai modifié la macro de la sorte:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)

For Each cel In Range("P1:P400")
 If Not cel.MergeCells Then
  cel.ClearComments
  cel.AddComment
  cel.Comment.Text Text:=cel.Offset(0, 7) & Chr(10) & cel.Offset(0, 24)
cel.Comment.Shape.TextFrame.AutoSize = True
    End If
Next cel

End Sub

Afin que les dimensions du commentaire s'adapte automatiquement au contenu.
Cela fonctionne mais le temps de traitement est "relativement" long.
Est-il possible de limiter cet "autosize" au commentaire de la ligne en cours?

De plus, cette macro se lance dès lors qu'un changement est effectif dans la feuille, est-il possible de restreindre son execution aux seules modifications dans les colonnes contenant les textes à insérer dans les commentaires? (Cela pour des questions de temps de traitement).

Ou alors plus simplement définir l'option autosize=true comme valeur par défaut de l'ensemble des commentaires de la feuille?

D'avance merci.
 

pierrejean

XLDnaute Barbatruc
Re : Concaténer du texte dans la zone commentaire d'une cellule

Re
tu as un exemple de limitation dans le code que je t'ai donné:
If Target.Column = 16 Then
:limitation au changement des cellules de la colonne P
on peut tout aussi bien limiter la creation du commentaire a une seule ou plusieurs cellules (encore faut-il savoir la ou lesquelles)
Comme de coutume un petit fichier exemple sans données confidentielles nous en dirait beaucoup plus sur ton problème (et son eventuelle solution)
 

manuthemalicious

XLDnaute Nouveau
Re : Concaténer du texte dans la zone commentaire d'une cellule

Bonsoir et merci pour le temps passé à me faire progresser.

Le projet est en fait un assez banal tableau de suivi d'affaires...
Je joins un exemple avec une seule ligne renseignée. Actuellement, la base en comporte 300 et est amenée, espérons le, à croitre exponentiellement!!!

J'ai donc décidé d'optimiser un peu ce qui se faisait "à la mano" jusqu'alors.

Je passe pas mal de temps à lire des posts sur XLD et à glaner ici ou là des bouts de code que je tente d'adapter.

PierreJean, tu reconnaitras l'une de tes macros de suivi des modifications dans le sous ensemble "commercial", colonne "transmission du dossier complet" et "Etat".

Pour revenir à ma problématique du moment, vous remarquerez que chaque intervenant (commercial, administratif, planification, travaux et facturation) dispose d'une zone de texte "divers" qu'il renseigne avec ce que bon lui semble.
A l'utilisation, il m'a semblé que regrouper l'ensemble de ces informations dans le commentaire du "divers" général était une idée géniale: plus besoin de naviguer de cellules en cellules pour avoir une vision globale des commentaires.

Cependant, avec le code actuel, la zone commentaire ne "s'autosize" pas et la macro modifiée de la sorte:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)

For Each cel In Range("P1:P400")
 If Not cel.MergeCells Then
  cel.ClearComments
  cel.AddComment
  cel.Comment.Text Text:=cel.Offset(0, 7) & Chr(10) & cel.Offset(0, 24)
cel.Comment.Shape.TextFrame.AutoSize = True
    End If
Next cel

End Sub

Rend le délais de traitement (quelques secondes) insupportable.

Je vous sollicitait donc pour une macro qui, au lieu de réaliser un "autosize" de tous les commentaires de Range("P1:p400") se contenterai d'un autosize du commentaire de la ligne en cours de modification:
Par exemple, n étant le numéro de ligne, je modifie la zone de texte divers "Wn" alors le commentaire de la cellule "Pn" est mis à jour et s'autosize.

Enfin, j'embraye sur une autre question, vous remarquerez une zone en partie supérieure du tableau qui contient des contrôles.
Dans les propriétés, il est coché "ne pas déplacer ou dimensionner avec les cellules" et cela fonctionne bien...tant que l'on utilise pas "fractionner les volets", et là, il est ennuyeux de voir ses outils disparaitre au fur et à mesure du déplacement du curseur vers la droite...

Existe t'il une solution pour clouer définitivement ces contrôles?

Pour finir, dans ce code:
HTML:
 If Not Application.Intersect(Target, Range("u:u,v:v")) Is Nothing Then
    If Target.Comment Is Nothing Then Target.AddComment
        With Target.Comment
            .Text Text:=.Text & Target & " Modifié le :" & Format(Now, "dd/mm/yyyy ") & " Par:" & Environ("UserName") & vbLf
            .Visible = True
            .Shape.Select
            Selection.AutoSize = True
            .Visible = False
        End With
   End If

Pouvez vous m'expliquer les 3 premières lignes?

D'avance merci et n'hésitez pas pour toute demande de clarification.
 

Pièces jointes

  • Suivi_affaires.xlsm
    43.6 KB · Affichages: 79

manuthemalicious

XLDnaute Nouveau
Re : Concaténer du texte dans la zone commentaire d'une cellule

Bonsoir,

Rageant ce problème de compatibilité!
Dès demain je réitère l'envoi en supprimant toutes les macro.
C'est peut-être là la source de l'incompatibilité.

Dans l'interval, peux tu me commenter les 3 premières lignes de ce code:
Code:
 If Not Application.Intersect(Target, Range("u:u,v:v")) Is Nothing Then
    If Target.Comment Is Nothing Then Target.AddComment
        With Target.Comment
            .Text Text:=.Text & Target & " Modifié le :" & Format(Now, "dd/mm/yyyy ") & " Par:" & Environ("UserName") & vbLf
            .Visible = True
            .Shape.Select
            Selection.AutoSize = True
            .Visible = False
        End With
   End If

Hormis glaner des informations sur le forum, peux tu me conseiller un ouvrage sur la programmation et excel?

Bonne soirée.
 

pierrejean

XLDnaute Barbatruc
Re : Concaténer du texte dans la zone commentaire d'une cellule

Re

Target est la cellule qui a provoqué l'appel a la macro
Si Target appartient a la colonne U ou a la colonne V alors
If Not Application.Intersect(Target, Range("u:u,v:v")) Is Nothing Then
Si le commentaire de Target n'existe pas le creer
If Target.Comment Is Nothing Then Target.AddComment
With permet de repeter ce qui suit (on ne met plus ensuite que le point)
derriere With Target.Comment
.Visible = True vaut Target.Comment.Visible = True
 

pierrejean

XLDnaute Barbatruc
Re : Concaténer du texte dans la zone commentaire d'une cellule

Re

pour modifier les commentaires en colonne P suite a modification de la cellule meme ligne colonne W

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 23 Then
 If Target.Offset(0, -7).Comment Is Nothing Then Target.Offset(0, -7).AddComment
 With Target.Offset(0, -7).Comment
    .Text Text:=.Text & Target & " Modifié le :" & Format(Now, "dd/mm/yyyy ") & " Par:" & Environ("UserName") & vbLf
    .Visible = True
    .Shape.Select
    Selection.AutoSize = True
    .Visible = False
 End With
End If
End Sub

Pour clouer les controles je n'ai pas de solution mais ne desespere pas il y a des magiciens sur XLD
 

Discussions similaires

Statistiques des forums

Discussions
312 497
Messages
2 088 994
Membres
104 000
dernier inscrit
dinelcia