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

14cp-test.xlsm (41.62 Ko)

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.

6cp-test-gvs.xlsm (50.64 Ko)

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.

3cp-test-gvs.xlsm (49.53 Ko)

Merci beaucoup

Bonsoir Fanini,

Nouvelle version avec positionnement correct des congés dans la feuille "cp".

9cp-test-gvs2.xlsm (51.39 Ko)

super, merci beaucoup Gerard

Rechercher des sujets similaires à "fichier automatique code vba"