Re,
Macro avec commentaire
Option Explicit
'Déclaration des variables
Dim lig%, col%, Nb%
Dim mois, annee, feuille, dDate, RdV$, temp$, monText$, F$
Dim Sh As Worksheet
'Macro pour récupèrer le format de la cellule et la Formater
Private Sub Formater(RngDest As Range, RngSce As Range, n As Integer)
Dim d%, i%
Dim Tb
Tb = Split(RngSce)
'Récupère dans un tableau les mots de la cellule
For i = 0 To UBound(Tb) 'Boucle sur tous les caractères du mots
d = d + 1
'Mémorise les styles de police, taille, couleur, soulignement
With RngDest.Characters(d + n, d + n + Len(Tb(i))).Font
.FontStyle = RngSce.Characters(d, 1).Font.FontStyle
.Size = RngSce.Characters(d, 1).Font.Size
.Color = RngSce.Characters(d, 1).Font.Color
.Underline = RngSce.Characters(d, 1).Font.Underline
End With
d = d + Len(Tb(i))
Next i
End Sub
'Pour l'ouverture de l'onglet de la liste déroulante
Private Sub ComboBox1_Change()
On Error Resume Next
F = ComboBox1
Sheets(F).Select
End Sub
'Effacement d'une donnée par double clic
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'Récupère le texte en regard de la date
monText = ActiveCell.Offset(0, -4) & " : " & ActiveCell.Offset(0, -3) & " - " & ActiveCell.Offset(0, -2) & " - " & ActiveCell.Offset(0, -1)
dDate = ActiveCell 'Date de la donnée
mois = Month(ActiveCell) 'Mois de la donnée
If Len(mois) = 1 Then mois = "0" & mois 'Si le mois est inférieur à 10 je rajoute un "0" devant le chiffre
annee = Year(ActiveCell) 'Année de la donnée
feuille = annee & "-" & mois 'Nom de l'onglet
With Sheets(feuille)
For lig = 6 To 16 Step 2 'Boucle toutes les 2 lignes
For col = 3 To 9 'Boucle sur les colonnes
If Sheets(feuille).Cells(lig, col).Value = dDate Then 'Si la date est trouvée
'Je remplace monText par rien
Sheets(feuille).Cells(lig, col).Offset(1, 0) = Replace(Sheets(feuille).Cells(lig, col).Offset(1, 0), monText, "")
Exit For 'et je sort de la boucle
End If
Next col
Next lig
End With
ActiveCell.Interior.Color = RGB(255, 255, 255) 'ôte la couleur de la cellule date
End Sub
'Ajoute la donnée par clic droit
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
If Not Application.Intersect(Target, Range("E2:E65000")) Is Nothing Then 'sur clic droit dans une des cellules colonne D
Cancel = True
ActiveCell.Interior.Color = RGB(198, 224, 180) 'colorise la cellule date
Nb = 0 '
dDate = ActiveCell
mois = Month(ActiveCell)
If Len(mois) = 1 Then mois = "0" & mois
annee = Year(ActiveCell)
feuille = annee & "-" & mois
With Sheets(feuille)
For lig = 6 To 16 Step 2
For col = 3 To 9
If Sheets(feuille).Cells(lig, col).Value = dDate Then
With Worksheets("base")
If Sheets(feuille).Cells(lig, col).Offset(1, 0) <> "" Then 'Si la cellule correspondant à la date n'est pas vide
temp = Sheets(feuille).Cells(lig, col).Offset(1, 0).Value 'Je mémorise sa donnée
Nb = 1
End If
'J 'inscrit le texte concaténé dans la cellule décalée d'une ligne de la date correspondante
Sheets(feuille).Cells(lig, col).Offset(1, 0) = ActiveCell.Offset(0, -4) & " : " & ActiveCell.Offset(0, -3) & " - " & ActiveCell.Offset(0, -2) & " - " & ActiveCell.Offset(0, -1)
'J'envoi dans la macro FORMATER la données de la cellule colonne A (RngSce) et la colle dans la cellule de la date (RngDest)avec le format
Formater Sheets(feuille).Cells(lig, col).Offset(1, 0), ActiveCell.Offset(0, -4), 0
'Idem pour la colonne B, mais avec le format qui sera actif après le Nb de caractères (Len=NbCar) de la colonne A + 3 pour " : "
Formater Sheets(feuille).Cells(lig, col).Offset(1, 0), ActiveCell.Offset(0, -3), Len(ActiveCell.Offset(0, -4)) + 3
'Idem que ci-dessus + 6 pour " : " (3 caract.) et " - " (3 caract.)
Formater Sheets(feuille).Cells(lig, col).Offset(1, 0), ActiveCell.Offset(0, -2), Len(ActiveCell.Offset(0, -3)) + Len(ActiveCell.Offset(0, -4)) + 6
Formater Sheets(feuille).Cells(lig, col).Offset(1, 0), ActiveCell.Offset(0, -1), Len(ActiveCell.Offset(0, -4)) + Len(ActiveCell.Offset(0, -3)) + Len(ActiveCell.Offset(0, -2)) + 9
If Nb = 1 Then 'Si la cellule n'est pas vide, je colle la donnée et l'ancienne donnée (Temp) avec un retour à la ligne et un interligne
Sheets(feuille).Cells(lig, col).Offset(1, 0).Value = Sheets(feuille).Cells(lig, col).Offset(1, 0).Value & Chr(10) & Chr(10) & temp
Nb = 0
End If
End With
Exit For
End If
Next col
Next lig
End With
End If
Sheets("Base").Activate
End Sub