Simplification de code
Bonjour, j'aurai voulu savoir s'il été possible d'améliorer ces codes :
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 Sub
Sub 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 Sub
Merci
bonjour,
Un code est étroitement lié à la feuille et au classeur auquel il se rapporte...
Difficile d'optimiser juste avec le code...
Si j'en juge par le temps mis pour naviguer dans ton planning sur l'avant dernier fil (dans le dernier classeur que j'ai téléchargé) il doit y avoir matière à gain de temps...
Moi je déteste les devinettes : S'il faut chercher entre tous les modules ou est la macro et dans quel feuille est le bouton qui lance cette macro...
C'est à toi d'apporter ces précisions. En plus du classeur à joindre c'est à toi de préciser sur la feuille "blabla", quand la cellule B12bis est sélectionnée, si on exécute la macro sub truc() en appuyant sur le bouton bleu....
Faute de ces précisions comment veux-tu qu'on améliore quelque chose. ActiveCell dans un code VBA : ça dit pas ou tu habites ni dans quelle feuille on travaille...
Enfin bref... vala !
[Edit] Il en va de même avec les usf s'il y a une demi douzaine de formulaire il doit y avoir à peu près autant de CommandButton1 alors pour savoir comment aller à la pêche !
A+
J'ai une feuille("Commentaires") avec 3 colonnes (NOM - DATE - COMMENTAIRE)
ex: NOM - DATE - COMMENTAIRE
Mr JEAN - 01/04/2017 - Lille
Mme MARIE -12/07/2017 - Bordeaux
J'essai de transposer les commentaires de ma feuille ("Commentaires") dans mon planning ("E9:AW" & DernièreLigne)
- les noms ("D9:D" & DernièreLigne)
- les dates("E7:AW7")
PS: en faisant clic droit dans le planning, on peux inserer des commentaire via un userform.
J'ai vu que l'on pouvais le faire avec LBound et UBound mais je n'y arrive pas.
Cordialement
Benoist
Désolé, j'ai zappé ta réponse... Je vais essayé de me pencher dessus mais je ne suis pas certain de pouvoir faire grand chose avant le 25 Avril, à partir de mercredi je serai absent !
A+
Te casses pas la tête Galopin01,
J' ai réussi à trouver un code à base de fonctions et il est ultra rapide et fonctionne parfaitement.
Un grand merci à toi et à tout ceux qui on pris le temps de s' occuper de mon problème.
Amicalement
Benoist
Bah, je me faisais pas trop de souçi... J'ai vu bien pire que ça !
Ya juste quelques lourdeurs que je me serais bien fait un plaisir de corriger.
Mébon j'aurai visiblement pas le temps avant de partir !
A+
J'avais pris le problème à l' envers nais je voyais pas comment faire autrement. Dans mon code je cherchais pour chaque cellule si un commentaire existait alors qu'il il fallait faire le contraire, trouver pour tout les commentaires compris entre la date de début et la date de fin du planning, la cellule correspondante. Il y aura toujours moins de commentaires que de cellule.