Commentaire dans planning
Bonjour à tous, j'ai un petit soucis, voici le problème:
J'ai un tableau: sheets("Planning") range("E9:AW" & DerniereLigne)
De "E7" à "AW7" il y a des DATES variables
De "D9" à "D & DerniereLigne" il y a des NOMS
Ce que j'essaie de faire c'est que:
1. Lorsque je rentre un commentaire dans le tableau, les valeurs NOM-DATE et le commentaire se copient sur la feuille "Commentaire" à la dernière ligne
2.Lorsque la date en ("E7") change, les commentaires du tableau s'effacent et se rechargent via la feuille "Commentaire"
Merci.
Bonjour,
s'il y a un commentaire en cellule E9 et celui-ci a été archivé sur la feuille "Commentaire", à la date 1 par exemple,
si la date de E9 change pour (2) est-ce que le commentaire est remit à date 2 ?
Bonjour SabV,
Je n'ai pas tout compris à ta question, le commentaire doit appartenir à un nom et une date, quand la date change, à chaque croisement de ce même nom et de cette date le commentaire doit apparaître. Merci
quand la date change, à chaque croisement de ce même nom et de cette date le commentaire doit apparaître
par exemple on ouvre le fichier
cellule E7 = 1
cellule E4 = mars17
je met un commentaire en E9 vis-à-vis Mr DUPOND Jean
ce commentaire est copier su la feuille "commentaire"
A2 = Mr DUPOND Jean
B2 = 1 mars 2017
C2 = le commentaire
puis je reviens sur la feuille planning et j'appuis sur le bouton "Triangleisocèle12_Cliquer"
action - tous les commentaires de la feuille "planning" sont effacer
et les donnée "date sont modifier
cellule E7 =2
cellule E4 = mars17
action - rapatrier tous les commentaires de la feuille "commentaire" sur la feuille "planning"
mais le commentaire suivant
A2 = Mr DUPOND Jean
B2 = 1 mars 2017
C2 = le commentaire
ne peut être copier vis-à-vis la date 1 mars 2017 puisque cette date n'est plus là
je pense qu'il faut rapatrier seulement les commentaires des date actuellement présente sur la feuille planning
est-ce bien ça ?
ps/ ton planning est beau, je trouve que c'est une très belle présentation
Bonjour sabV,
sabV a écrit :ne peut être copier vis-à-vis la date 1 mars 2017 puisque cette date n'est plus là
je pense qu'il faut rapatrier seulement les commentaires des date actuellement présente sur la feuille planning
est-ce bien ça ?
Oui,tu as tout compris, il ne faut rapatrier que que les commentaires des date actuellement présente sur la feuille planning .
Merci pour ton aide.
Bonjour,
Voici mon premier test "réussi" j'ai fait le transfert des commentaires directement dans les cellules concernées,
je trouve le code trop lent, peut être vaudrait-il essayé avec un Array
le code suivant est aussi dans le fichier joint
Sub Triangleisocèle10_Cliquer()
s = Val(Right(ActiveSheet.Shapes(Application.Caller).Name, 2))
TriangleIsocèle s
End Sub
Sub Triangleisocèle12_Cliquer()
s = Val(Right(ActiveSheet.Shapes(Application.Caller).Name, 2))
TriangleIsocèle s
End Sub
Sub TriangleIsocèle(clik)
Application.ScreenUpdating = False
Dim DicoNom As New Scripting.Dictionary
Dim DicoComment As New Scripting.Dictionary
Dim LastRw1 As Long, LastRw2 As Long
Dim sh1, sh2, rw As Long, cl As Integer, i As Integer
Dim val1, val2, cle1, t1, t2, cmt
Set sh1 = Sheets("Planning")
Set sh2 = Sheets("Commentaire")
LastRw1 = sh1.Cells(Rows.Count, 4).End(xlUp).Row
LastRw2 = sh2.Cells(Rows.Count, 1).End(xlUp).Row + 1
For Each cmt In ActiveSheet.Comments
Set isect1 = Application.Intersect(Range(cmt.Parent.Address), Range("E9:E" & LastRw1))
Set isect2 = Application.Intersect(Range(cmt.Parent.Address), Range("AW9:AW" & LastRw1))
If Not isect1 Is Nothing Or Not isect2 Is Nothing Then
'val1 = Nom val2 = date
val1 = sh1.Cells(cmt.Parent.Row, 4)
val2 = Format(sh1.Cells(7, cmt.Parent.Column).Value, "0")
t = "Match(""" & val1 & """&" & val2 & "," & sh2.Name & "!" & Range("A:A").Address(0, 0) & "&" & sh2.Name & "!" & Range("B:B").Address(0, 0) & ",0)"
n = Evaluate(t)
If IsError(n) Then
' 'ajout de Nom date et comment sur la feuille Commentaire
sh2.Cells(LastRw2, 1) = val1
sh2.Cells(LastRw2, 2) = val2
sh2.Cells(LastRw2, 3) = cmt.Text
LastRw2 = sh2.Cells(Rows.Count, 1).End(xlUp).Row + 1
End If
End If
Next
Select Case clik
Case 10: ' déplacement arrière
sh1.Range("E9:AV" & LastRw1).Copy
sh1.Range("F9").PasteSpecial xlPasteComments
Application.CutCopyMode = False
sh1.Range("E9:E" & LastRw1).ClearComments
sh1.Range("E7").Value = sh1.Range("E7").Value - 1
For i = 9 To LastRw1
val1 = sh1.Cells(i, "D")
val2 = Format(sh1.Cells(7, "E").Value, "0")
t = "Match(""" & val1 & """&" & val2 & "," & sh2.Name & "!" & Range("A:A").Address(0, 0) & "&" & sh2.Name & "!" & Range("B:B").Address(0, 0) & ",0)"
n = Evaluate(t)
If Not IsError(n) Then
With sh1
.Cells(i, "E").AddComment sh2.Cells(n, "C").Value
End With
End If
Next
Case 12: ' déplacement avant
sh1.Range("F9:AW" & LastRw1).Copy
sh1.Range("E9").PasteSpecial xlPasteComments
Application.CutCopyMode = False
sh1.Range("AW9:AW" & LastRw1).ClearComments
sh1.Range("E7").Value = sh1.Range("E7").Value + 1
For i = 9 To LastRw1
val1 = sh1.Cells(i, "D")
val2 = Format(sh1.Cells(7, "AW").Value, "0")
t = "Match(""" & val1 & """&" & val2 & "," & sh2.Name & "!" & Range("A:A").Address(0, 0) & "&" & sh2.Name & "!" & Range("B:B").Address(0, 0) & ",0)"
n = Evaluate(t)
If Not IsError(n) Then
With sh1
.Cells(i, "AW").AddComment sh2.Cells(n, "C").Value
End With
End If
Next
End Select
sh1.Range("D9").Select
Application.ScreenUpdating = True
End Sub
Bonjour SabV,
J'ai essayé ton code, il fonctionne parfaitement mais c'est vrai qu'il est un peu lent.
J'ai réussi à faire ceci, un peu plus rapide:
Private Sub CommandButton1_Click()
Dim DerLigne%, Derligne3%
DerLigne = Sheets("Commentaires").Range("A" & Rows.Count).End(xlUp).Row + 1
Derligne3 = Sheets("Planning").Range("D" & Rows.Count).End(xlUp).Row
If Not Application.Intersect(ActiveCell, Range("E9:AW" & Derligne3)) Is Nothing Then
NoLigne = ActiveCell.Row
NoColonne = ActiveCell.Column
'Ajouter le commentaire
With Sheets("Commentaires")
.Range("A" & DerLigne).Value = Cells(NoLigne, 4).Value
.Range("B" & DerLigne).Value = Cells(7, NoColonne).Value
.Range("C" & DerLigne).Value = TextBox1.Value
.Range("E" & DerLigne).Value = Now()
End With
End If
'Supprimer les doublons les plus anciens
For L = Sheets("Commentaires").Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1
For j = Sheets("Commentaires").Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1
If Sheets("Commentaires").Cells(j, 4) = Sheets("Commentaires").Cells(L, 4) Then
If Sheets("Commentaires").Cells(j, 5) < Sheets("Commentaires").Cells(L, 5) Then
Sheets("Commentaires").Cells(j, 1).EntireRow.Delete
End If: End If
Next j: Next L
'Supprimer les commentaires (lignes vides)
With Sheets("Commentaires")
For i = .Range("A" & .Rows.Count).End(xlUp).Row To 2 Step -1
If .Range("C" & i).Value = "" Then
.Rows(i).Delete
End If
Next i
End With
Call AjoutCommentaires
Unload Me
End SubSub AjoutCommentaires()
On Error Resume Next
Dim DerLigne%, DerLigne2%
Dim Comm As String
DerLigne = Sheets("Planning").Range("D" & Rows.Count).End(xlUp).Row
DerLigne2 = Sheets("Commentaires").Range("D" & Rows.Count).End(xlUp).Row
Application.ScreenUpdating = False
With Sheets("Planning")
.Range("E7:AW7").NumberFormat = "General" 'Je mets les dates en format standard
.Range("E9:AW" & DerLigne).ClearComments 'Je supprime les commentaires de la plage
For Each cell In .Range("E9:AW" & DerLigne) 'Je fais une boucle : si commentaire DATE/NOM alors insertion planning
For NoLigne = 9 To DerLigne
For NoColonne = 5 To 49
Comm = ((Cells(NoLigne, 4)) & (Cells(7, NoColonne)))
For i = 2 To DerLigne2
If Sheets("Commentaires").Range("D" & i) = Comm Then
.Cells(NoLigne, NoColonne).AddComment
.Cells(NoLigne, NoColonne).Comment.Text Text:=Sheets("Commentaires").Range("C" & i).Value
End If
Next i
Next NoColonne
Next NoLigne
Next
.Range("E7:AW7").NumberFormat = "dd" Je remets les date en format "jj"
End With
Application.ScreenUpdating = True
End SubJe vais voir si je peux encore l’améliorer afin qu'il soit encore plus rapide.
Un grand merci pour ton aide et le temps que tu m'as accordé.
Cordialement
Benoist