Automatiser des commentaires

Bonjour à tous,

Je vous explique mon problème.

Je souhaite automatiser des commentaires dans des cellules d'une colonne d'un tableau en fonction d'un autre tableau qui se trouve dans une autre page.

Pour explication du fichier joint :

Je veux pouvoir que pour chaque cellule désignation (feuille "Liste" colonne D) avoir un commentaire qui se rajoute automatiquement et qui se trouve (feuille "données" collone F).

Pour information, les 2 tableaux peuvent changer de longueur régulièrement

Etant limité en VBA(recherche sur google ), je demande votre aide pour réaliser une boucle qui me permettra de faire cela automatiquement sur toute la colonne D de ma feuille liste.

Pouvez-vous m'indiquer l'utilité de chaque ligne afin que je puisse apprendre en même temps, si ce n'est pas trop demandé.

En vous remerçiant d'avance pour votre aide,

Bonne journée,

Thibault.

bonjour,

cf pj

=affichecmt(D2;RECHERCHEV(D2;données!$A$2:$F$8;6;FAUX);3)

Ceuzin

Je vous remercie pour la rapidité,

Je fais évoluer mon fichier, je vous renvoi un fichier à jour avec une demande toujours sur le même sujet = automatiser la saisie des commentaires.

Thibault

Je reformule correctement ma demande et avec un fichier à jour.

Lors de la saisie de la désignation en B3, je souhaite pouvoir quand je vais sur la case L3 de ma feuille « liste » le commentaire en exemple.

Ce commentaire est structuré comme cela :

  • La première ligne devra faire référence à la colonne « fréquence » définie dans le tableau se trouvant dans la colonne E de la feuille « Données » en fonction de la désignation.
  • La deuxième ligne devra faire référence à la colonne « motif » définie dans le tableau se trouvant dans la colonne F de la feuille « Données » en fonction de la désignation.

Et je veux passer exclusivement par un code VBA car il y aura des centaines de ligne et des dizaines de colonne, les formules dont vous m’avez ajoutées « colonne en jaune » surcharge mon fichier …

Mais encore je vous remercie de votre aide car elle me permet de répondre à ma première demande mais je m'excuse mon besoin était mal défini …

Bonjour,

Reste à espérer que le fichier n'évolue plus trop à l'avenir (d'autant que là, l'évolution "décoiffait" un peu )

Un essai avec le code ci-dessous, à coller dans la fenêtre de code de la feuille "Liste"

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column <> 2 Then Exit Sub
    If Target.Count > 1 Then Exit Sub
    If Target = "" Then On Error Resume Next: Target.Offset(, 10).Comment.Delete: Exit Sub
    lig = Application.Match(Target, Sheets("données").[A:A], 0)
    On Error Resume Next
    Target.Offset(, 10).Comment.Delete
    Target.Offset(, 10).AddComment.Text "Fréquence: " & Sheets("données").Cells(lig, 5) & Chr(10) & Chr(10) & "Motif: " & Sheets("données").Cells(lig, 6)
    Target.Comment.Shape.Height = 25
End Sub

Oui je sais, c'était carrément une nouvelle demande par rapport à la première ^^, c'est pour cela que je me suis excusé.

En tout cas, un grand merci à vous deux (rapide et clair). C'est exactement ce que je voulais.

Bonne journée,

Thibault

Dernière question d'un point de vue esthétique, je suis arrivé à adapter la taille de la case commentaire en fonction de celui-ci en ajoutant cette formule.

Target.Offset(, 10).Comment.Shape.TextFrame.AutoSize = True

Par contre je voudrai mettre en Gras et souligner les deux parties ajoutées "Références : " et "Motif : "

Quelle formule permet de faire cela ?

kaizer48 a écrit :

Quelle formule permet de faire cela ?

Une formule, il y a peu de chances!

Essaie:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column <> 2 Then Exit Sub
    If Target.Count > 1 Then Exit Sub
    If Target = "" Then On Error Resume Next: Target.Offset(, 10).Comment.Delete: Exit Sub
    lig = Application.Match(Target, Sheets("données").[A:A], 0)
    On Error Resume Next
    Target.Offset(, 10).Comment.Delete
    Target.Offset(, 10).AddComment.Text "Fréquence: " & Sheets("données").Cells(lig, 5) & Chr(10) & Chr(10) & "Motif: " & Sheets("données").Cells(lig, 6)
    Target.Comment.Shape.TextFrame.AutoSize = True
    With Target.Offset(, 10).Comment.Shape.TextFrame.Characters(1, 10).Font
        .Bold = True
        .Underline = True
    End With
    debut = InStr(1, Target.Offset(, 10).Comment.Text, "Motif:", 1)
    With Target.Offset(, 10).Comment.Shape.TextFrame.Characters(debut, 6).Font
        .Bold = True
        .Underline = True
    End With
End Sub

Le code modifié en l'adaptant à mon fichier fonctionne très bien.

Je reviens vers vous car je modifie au fure et à mesure mon fichier en ajoutant des lignes de code VBA, le nom du post n'a plus rien à voir car je cherche à réaliser des liens hypertexte automatiquement.

J'ai deux problèmes sur mon code vba:

- sur ce que j'ai appelé "Lien Hypertexte DIM", je voudrais qu'en colonne AC, si du texte se trouve dans la cellule alors un lien hypertexte se crée automatiquement pour chaque ligne en prenant en compte la colonne C de cette même ligne. Dans la colonne C sont écrites les données "références de la pièce" qui ont la même appelation que le nom du fichier et qui me permettront d'ouvrir ce fichier.

mon lien sera donc"Lien du dossier" & "valeur de la colonne C (copier par un code que je n'arrive à trouver)" & ".xlsx"

Mon code actuel me prend en compte la dernière ligne remplie de la colonne C = tous les liens renvoient vers la même référence ...

En sachant que les autres liens automatiques fonctionnent correctement car ils ont été facile à créer.

- deuxième question si je veux actualiser mes différents liens hypertextes, je dois à chaque fois modifier ou juste actualiser ma deuxième colonne (B) qui me permet de relancer ma macro surement. Comment puis-je faire pour cela soit un boucle à part et dès que je modifie ma colonne AC (pour exemple) le lien se crée automatiquement.

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column <> 2 Then Exit Sub
    If Target.Count > 1 Then Exit Sub
    If Target = "" Then On Error Resume Next: Target.Offset(, 5).Comment.Delete: Exit Sub
    lig = Application.Match(Target, Sheets("Références").[A:A], 0)
    On Error Resume Next
    Target.Offset(, 5).Comment.Delete
    Target.Offset(, 5).AddComment.Text "Fréquence: " & Sheets("Références").Cells(lig, 5) & Chr(11) & Chr(11) & "Motif: " & Sheets("Références").Cells(lig, 6)

    Target.Offset(, 5).Comment.Shape.Height = 10

    Target.Offset(, 5).Comment.Shape.ScaleWidth 5, AutoSize = True
    Target.Offset(, 5).Comment.Shape.ScaleHeight 10, AutoSize = True
    Target.Offset(, 5).Comment.Shape.TextFrame.AutoSize = True

    With Target.Offset(, 5).Comment.Shape.TextFrame.Characters(1, 4).Font
        .Bold = True
        .Underline = True
    End With
    debut = InStr(1, Target.Offset(, 5).Comment.Text, "Motif:", 1)
    With Target.Offset(, 5).Comment.Shape.TextFrame.Characters(debut, 6).Font
        .Bold = True
        .Underline = True
    End With

    'Lien Hypertexte FIC

    Dim C As Range
    For Each C In Range([C3], [C65586].End(xlUp))

    ActiveSheet.Hyperlinks.Add C, "Lien d'un dossier informatique" & C.Value & ".xlsx#'Lien d'un onglet'!A1", TextToDisplay:=C.Value & ".xlsx"

    Next C

    'Lien Hypertexte AP

    Dim D As Range
    For Each D In Range([S3], [S65586].End(xlUp))

    If D = "" Then
    D = ""
    Else
    ActiveSheet.Hyperlinks.Add D, "Lien d'un dossier"
    End If
    Next D

 'Lien Hypertexte DIM

    Dim F As Range
    Dim G As Range
    For Each F In Range([C3], [C65586].End(xlUp))
    For Each G In Range([AC3], [AC65586].End(xlUp))

    If G = "" Then
    G = ""
    Else
    ActiveSheet.Hyperlinks.Add G, "Lien d'un dossier" & F.Value & ".xlsx#'Lien d'un onglet'!A1"
    End If

    Next G
    Next F

    'Lien Hypertexte FA

    Dim E As Range
    For Each E In Range([AH3], [AH65586].End(xlUp))

    If E = "" Then
    E = ""
    Else
    ActiveSheet.Hyperlinks.Add E, "Lien vers un dossier"
    End If
    Next E

End Sub

S'il vous plaît une personne peut m'aider ?

Je ne pense que cela soit difficile pour une personne qui sache programmer en VBA (même si l'explication est longue), je bloque sur cette partie...

Bonjour,

Si deux parties du code n'ont pas de rapport entre elles, il ne faut pas les associer!

Ce que tu as produit comme code s'apparente au travail d'un "apprenti sorcier" ... c'est toujours dangereux! La partie de code que tu as ajoutée va s'exécuter chaque fois que n'importe quelle cellule de la colonne B sera modifiée .

Dans ce code, il y a, en outre, 4 boucles distinctes, dont une avec une boucle à l'intérieur d'une boucle. Si tu as 200 lignes, certaines instructions vont donc s'exécuter 200 fois + 200 fois + 200 fois*200 fois + 200 fois et ce, à chaque changement de valeur en colonne B. C'est un monstre que tu es occupé à créer!!

Bref, ouvre une nouvelle discussion avec ton nouveau sujet, où tu (ré-)expliqueras ce que tu voudrais.

Merci pour la réponse, je vais créer un autre post pour ce sujet.

Désolé d'avoir fait comme cela, j'ai bien vu que cela chargé pendant 2/3 sec pour terminer la macro après chaque modification (mais ça fonctionnait dangereusement comme tu me disais) ...

Je modifierai la macro afin qu'elle soit plus allégée (par l'intermédiaire de l'aide de professionnelle VBA =) )

Rechercher des sujets similaires à "automatiser commentaires"