Fichier Automatique code VBA
Bonjour,
J'essaye de créer un code VBA pour mettre en automatique les demandes de congés via une base de donnée sur un calendrier mensuel.
J'ai tapé ce code mais pour l'instant il ne fonctionne pas. Pouvez-vous m'aider? Je mets le fichier en pièce jointe également (je ne suis qu'une débutante en VBA)
Private Sub Worksheet_Change(ByVal Target As Range) 'mise à jour du document quand changement la target'
If Target.Address = "$E$6" Then 'définition de la target = le numéro du mois'
Application.ScreenUpdating = False
debPlan = DateSerial([Annee], [E6], 1) 'correspond à la date du premier jour du mois selectionné'
FinPlan = DateSerial([Annee], [E6] + 1, 1) - 1 ' correspond à la date du dernier jour du mois selectionné'
Dim freport As Worksheet
Set freport = Sheets("report") 'attribution de la variable'
Dim fcp As Worksheet
Set fcp = Sheets("cp") 'attribution de la variable'
fcp.Activate ' activation de la feuille fcp'
[M10:AQ21].ClearContents 'suppresion des données de M10 à AQ21'
[M10:AQ21].Interior.ColorIndex = xlNone 'suppression des couleurs'
[M10:AQ21].ClearComments 'suppression des commentaires'
nblignes = freport.[A1].CurrentRegion.Rows.Count 'comptage du nombre de ligne de la base de donnée des congés'
For i = 2 To nblignes
nom = freport.Cells(i, 1)
Set result = fcp.Range("K9:K20").Find(What:=nom, LookIn:=xlValues) 'comparaison entre les noms de la base de donnée et les noms de l'équipe 1'
If Not result Is Nothing Then
If freport.Cells(i, 2) >= debPlan And freport.Cells(i, 2) <= FinPlan Then
debut = freport.Cells(i, 2) - debPlan + 2 'date de début'
fin = freport.Cells(i, 3) - debPlan + 2 'date de fin'
Stage = freport.Cells(i, 4) 'stage correspond au commentaire'
fcp.Cells(result.Row, debut) = Stage
With fcp.Cells(result.Row, debut)
.AddComment
.Comment.Shape.AutoShapeType = msoShapeRoundedRectangle
temp = freport.Cells(i, 1) & vbLf 'dans le commentaire nom du collaborateur'
temp = temp & freport.Cells(i, 5)
.Comment.Text Text:=temp
.Comment.Shape.TextFrame.Characters(Start:=1, Length:=Len(freport.Cells(i, 1))).Font.Bold = True
.Comment.Shape.TextFrame.AutoSize = True
.Resize(, fin - début + 1).Interior.ColorIndex = [couleurs].Find(Stage, LookAt:=xlWhole).Interior.ColorIndex
End With
End If
End If
Next i
End If
End Sub
un grand merci
Bonjour Fanini,
Je te retourne ton EXCEL dont j'ai rectifié le code VBA.
Pour obtenir un code sans erreur de compilation, en dehors du Module_4, j'ai dû rectifier les autres modules et certaines fois, invalider des séquences de code.
Au moment du changement de mois, les congés du premier collaborateur (Bernard) ne sont pas RAZ comme sur les autres lignes.
Je te laisse voir ce point. En cas de difficulté, je regarderai ce point.
Super, merci Gérard
Je vais regarder ce point
Bonjour,
Les procédures événementielles, comme ici, worksheet change, doivent rester dans les lignes de code de la feuille à laquelle o nveut affecter la procédure, ici ta feuille cp, j'ai donc déplacer le code dedans.
Maintenant un autre soucis intervient, c'est que tu ne changes pas la cellule E6, tu modifies la cellule D6, puis Excel recalcule le résultat de la cellule D6, mais ne change pas la formule de la cellule. Autre point, on préfère utiliser la fonction intersect pour savoir si la Target croise ou non une plage de cellules, de cette façon, tu peux traiter une colonne entière, ou encore des zones, plus pratique que de passer par l'adresse
Je te laisse essayer avec ça:
Je te préviens aussi que j'ai détecté un bug, tu ajoutes des commentaires mais n'en supprimes jamais, ça rentre en colision du coup quand tu veux en ajouter un sur une cellule qui en contient déjà.
Re-Bonjour GVIALLES,
J'ai supprimé les quelques modules qui ne servaient pas.
Et j'ai rectifié pour qu'au changement de mois, les congés du premier collaborateur s'effacent.
J'ai encore une question, comment je peux faire correspondre les dates de ma base de donnée à mon fichier cp? Par exemple, Bernard qui souhaite prendre congé du 26 au 28 décembre, cela apparaît à la date du 16 décembre sur mon fichier cp.
Merci beaucoup
Bonsoir Fanini,
Nouvelle version avec positionnement correct des congés dans la feuille "cp".
super, merci beaucoup Gerard