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
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 SubOui 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 ?
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 SubLe 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 SubS'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 =) )