Mettre le contenu d'une cellule en commentaire sur une autre feuille.

moi_ces_moi

XLDnaute Nouveau
Bonjour,

je voudrai bien mettre en commentaire le contenu d'une cellule d'une autre feuille.
Il faudrait retirer la protection de la feuille avant et ensuite la remettre.

J'ai trouvé un code mais impossible de modifier pour mon classeur.

merci pour votre aide.

VB:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim co As Range 'plage copier

For Each co In Feuil6.Range("b12:nc38") 'Je voudrai selectionner le range b10:nc10, b12:nc12,... de la feuil6
    With Feuil5.Range(co.Address) 'Et le mettre en commantaire le range b12:nc38 sur la feuil5
    On Error Resume Next
        .Comment.Delete
        If Not IsEmpty(co) Then
        With .AddComment
            .Text co.Text
            .Visible = False
            .Shape.TextFrame.AutoSize = True
        End With
        End If
    End With
Next
End Sub
 

Pièces jointes

  • question test planning V19 avec macro.xlsm
    168.1 KB · Affichages: 5

Xtian_Québec

XLDnaute Occasionnel
RE moi_ces_moi
Tu peux essayer le code suivant. Il te faudra l'ajuster à tes besoins.
J'ai fait un exemple qui ajoute un commentaire dans la feuille 1 à la colonne B (à partir de la ligne 8) en récupérant les données (texte) qui se trouvent dans la feuille 2 (colonnes C à N, lignes 10 à 15)

En plus, si tu veux, un autre petit fichier pour traiter toutes tes 366 colonnes (b à nc).

J'espère que c'est ce que tu recherchais.

@+
Xtian_Quebec

VB:
Sub TextInComment()
    Dim strMonTexte As String
    Dim intRow As Integer
    
    For intRow = 10 To 20 'Traite les lignes 10 à 20 de la feuille 2
        'Le texte à mettre dans le commentaire
        strMonTexte = Sheets("Feuil2").Range("C" & intRow).Value & _
                      Sheets("Feuil2").Range("D" & intRow).Value & _
                      Sheets("Feuil2").Range("E" & intRow).Value & _
                      Sheets("Feuil2").Range("F" & intRow).Value & _
                      Sheets("Feuil2").Range("G" & intRow).Value & _
                      Sheets("Feuil2").Range("H" & intRow).Value & _
                      Sheets("Feuil2").Range("I" & intRow).Value & _
                      Sheets("Feuil2").Range("J" & intRow).Value & _
                      Sheets("Feuil2").Range("K" & intRow).Value & _
                      Sheets("Feuil2").Range("L" & intRow).Value & _
                      Sheets("Feuil2").Range("M" & intRow).Value & _
                      Sheets("Feuil2").Range("N" & intRow).Value
        If strMonTexte <> vbNullString Then 'Si un texte existe, on créé le commentaire
            Sheets("Feuil1").Range("B" & intRow - 2).Select 'On insère le commentaire à la ligen 8 de la feuille 1 (introw = 10-2 = 8)
            Sheets("Feuil1").Range("B" & intRow - 2).AddComment
            Sheets("Feuil1").Range("B" & intRow - 2).Comment.Visible = False
            Sheets("Feuil1").Range("B" & intRow - 2).Comment.Text Text:=strMonTexte
        End If
    Next intRow
End Sub

Tu peux aussi utiliser une boucle pour récupérer ton texte. Voir autre fichier joint.
Sub GrouperTexte()
Dim intCol As Integer
Dim strTexte As String

strTexte = vbNullString
For intCol = 2 To 367
strTexte = strTexte & Cells(1, intCol).Value 'Récupérer les valeurs de la ligne 1 - colonne B à NC
Next intCol
Range("G5").Value = strTexte
Range("I7").Select
End Sub
 

Pièces jointes

  • Ajouter_un_commentaire.xlsm
    18.8 KB · Affichages: 7
  • Grouper_Texte.xlsm
    17.8 KB · Affichages: 7

moi_ces_moi

XLDnaute Nouveau
Bonjour,

Je crois que je me suis mal exprimé.
Je voudrai bien mettre le contenu de la cellule B10 de la feuille "Absence" en commentaire dans la cellule B12 de la feuille "Année"
Faire ça pour chaque cellule de la ligne 10 de B a NC (feuille Absence) vers la ligne 12 de B a NC (feuille Année)
Puis ligne 12 de B a NC (feuille Absence) vers la ligne 13 de B a NC (feuille Année)
Et continuer jusqu'à la ligne 68 de B a NC (feuille Absence) vers la ligne 41 de B a NC (feuille Année)

La formule que j'ai prend le range de (b10:nc38) de la feuille "absence" et met en commentaire dans le meme range de la feuille "année"
Je l'ai modifier comme ça mais sans succès.

VB:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim co As Range 'plage copier

For Each co In Feuil6.Range("B10:NC10,B12:nc12,B14:nc14,B16:nc16,B18:nc18,B20:nc20,B22:nc22,B24:nc24,B26:nc26,B28:nc28,B30:nc30,B32:nc32,B34:nc34,B36:nc36,B38:nc38,B40:nc40,B42:nc42,B44:nc44,B46:nc46,B48:nc48,B50:nc50,B52:nc52,B54:nc54,B56:nc56,B58:nc58,B60:nc60,B62:nc62")
     'Je voudrai selectionner le range b10:nc10, b12:nc12,... de la feuil6
    With Feuil5.Range(B12:nc38) 'Et le mettre en commantaire le range b12:nc38 sur la feuil5
    On Error Resume Next
        .Comment.Delete
        If Not IsEmpty(co) Then
        With .AddComment
            .Text co.Text
            .Visible = False
            .Shape.TextFrame.AutoSize = True
        End With
        End If
    End With
Next
End Sub

Et si c'est possible de retirer la protection de la feuille "année" exécuter le macro et remettre la protection après.

Merci d'avance pour votre aide.
 

Pièces jointes

  • question test planning V19 avec macro.xlsm
    164.6 KB · Affichages: 4
Dernière édition:

Xtian_Québec

XLDnaute Occasionnel
RE moi_ces_moi
Voici un autre fichier. Je crois que celui là fera ton affaire avec le code suivant
VB:
Sub NouveauCode()
    Dim intRow As Integer
    Dim intRowAnnee As Integer
    Dim intCol As Integer
    Dim strCommentaire As String
    
    'Identifier la ligne de départ dans la feuille ANNÉE
    intRowAnnee = 12
        
    'On masque l'affichage du processus
    Application.ScreenUpdating = False
    
    'On traite toute les colonnes de la feuille ABSENCE à chaque 2 lignes (10-12-14-...)
    For intRow = 10 To 68 Step 2
        
        'Pour chaque ligne de la feuille ABSENCE, on traite toute les colonnes (B à NC)
        For intCol = 2 To 367
            
            'Première validation se fait dans B10
            If Sheets("Absence").Cells(intRow, intCol).Value <> vbNullString Then
                'Il y a une valeur dans la cellule,on ajoute le commentaire dans la feuille ANNÉE (Ligne sera ligne de ABSENCE + 2 (10 ira dans 12 et ainsi de suite)
                'Valeur identifiée dans la feuille ABSENCE
                strCommentaire = Sheets("Absence").Cells(intRow, intCol).Value
                'Sélection de la cellule correspondante dans la feuille ANNÉE (intRowAnnee + 1 pour les lignes suivantes, intCol pour la colonne à traiter)
                Sheets("Année").Activate
                Sheets("Année").Unprotect
                Sheets("Année").Cells(intRowAnnee, intCol).Select
                'On efface le commentaire précédent
                Selection.ClearComments
                'Ajout du commentaire dans la feuille ANNÉE
                ActiveCell.AddComment
                ActiveCell.Comment.Visible = False
                ActiveCell.Comment.Text Text:=strCommentaire
                'On passe à la cellule suivante
            Else
                'Il n'y a pas de valeur dans la cellule,on valide la prochaine cellule
            End If
        
        'On valide la prochaine colonne
        Next intCol
        
        'Identifier la prochaine ligne de la feuille ANNÉE
         intRowAnnee = intRowAnnee + 1
    
    'On valide la prochaine ligne de la feuille ABSENCE (Step 2 pour sauter une ligne - 10-12-14-...)
    Next intRow
    
    'On réinitialise l'affichage du processus
    Application.ScreenUpdating = True
    
    'On reprotège la feuille ANNÉE
    Sheets("Année").Protect
End Sub


Xtian_Quebec
 

Pièces jointes

  • Ajouter_un_commentaire_en_boucle.xlsm
    170.6 KB · Affichages: 8

Xtian_Québec

XLDnaute Occasionnel
RE moi_ces_moi
Heureux d'apprendre que ça répond à ton besoin...
Si tu comprends plus ou moins le code je pourrais t'expliquer si tu me poses des questions précises...
Moi aussi j'ai débuté il y a plusieurs années sans trop comprendre toute la logique des codes et j'ai eu de l'aide pour mieux comprendre.
Je ne suis pas un expert mais je suis content d'aider selon mes connaissances...

Xtian_Quebec
 

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 943
Membres
101 849
dernier inscrit
florentMIG