IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

planning des congés pour un calendrier [XL-2016]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Février 2006
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Février 2006
    Messages : 110
    Points : 79
    Points
    79
    Par défaut planning des congés pour un calendrier
    Bonjour à tout le monde,
    Je souhaiterais automatiser ma gestion des jours de congé pour les inclure dans un calendrier.
    Pour cela, j'ai une feuille pour encoder les jours (congé) et une feuille (planning) dans laquelle se retrouvera tous les jours à la suite, pour l'affichage dans un calendrier.
    Dans la feuille "congé', en C5, je mets mon 1er jour et le dernier jour en D5. Par exemple, en C5, la valeur 12/10/2020 et en D5, la valeur 23/10/2020.
    Ce que je cherche à faire, c'est retrouver sur la feuille planning, dans la 1ère cellule vide de la colonne G (dans ce cas, G3), la valeur 12/10/2020 et dans la cellule vide vers le bas, 13/10/2020 et ainsi de suite jusque G14 avec la valeur 23/10/2020.
    Ensuite, dans la feuille congé, s'il y a une date en C6 et D6, refaire le même processus avec la valeur C6 qui se retrouve sur la feuille planning en G15. Si C6 est vide, la boucle s'arrête.
    Je vois ce que je souhaiterais faire mais je n'arrive pas à trouver le début.
    Dans mon exemple (calendrier), les jours de congé sont en bleu et les jours fériés en jaune.
    Ca fonctionne déjà. Mon problème, c'est automatiser les jours de congé de la feuille congé vers la feuille planning.
    En vous remerciant pour votre aide.
    Images attachées Images attachées    

  2. #2
    Membre chevronné Avatar de mfoxy
    Homme Profil pro
    Automation VBA
    Inscrit en
    Février 2018
    Messages
    752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Automation VBA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2018
    Messages : 752
    Points : 1 971
    Points
    1 971
    Par défaut
    Bonjour,

    Pour t'aider et te mettre sur la bonne voie, je te conseil la lecture de ce tuto de Pierre Fauconnier.

    Calendrier Perpétuel

    https://fauconnier.developpez.com/tu...el/calendrier/
    Michaël

    Si mon aide/avis vous a été profitable , n'hésitez pas à cliquer sur , ça fait toujours plaisir...
    _________________________________________________________________________________________________________________

    "Tout le monde est un génie. Mais si on juge un poisson sur sa capacité à grimper à un arbre, il passera sa vie à croire qu'il est stupide..."
    Albert Einstein

  3. #3
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 240
    Points : 5 655
    Points
    5 655
    Par défaut
    Bonjour,

    Essayez ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    Sub Copie_congés()
        Dim f1 As Worksheet, f2 As Worksheet
        Dim i As Long, DerLig_f1 As Long, DerLig_f2 As Long, Annee As Long
        Dim Col_f2 As Range
     
        Application.ScreenUpdating = False
        Set f1 = Sheets("congé")
        Set f2 = Sheets("planning")
        Annee = f1.Range("C1").Value
     
        DerLig_f1 = f1.Range("C" & Rows.Count).End(xlUp).Row
        Set Col_f2 = f2.Rows(2).Find(Annee)
        LCol_f2 = Split(Col_f2.Address, "$")(1)
        DerLig_f2 = f2.Range(LCol_f2 & "3:" & LCol_f2 & Rows.Count).End(xlUp).Row + 1
     
        For i = 5 To DerLig_f1
            Date_Deb = f1.Cells(i, "C")
            Date_fin = f1.Cells(i, "D")
            Ind = 0
            Do
                f2.Range(LCol_f2 & DerLig_f2).Value = Date_Deb + Ind
                Ind = Ind + 1
                DerLig_f2 = DerLig_f2 + 1
            Loop While f2.Range(LCol_f2 & DerLig_f2 - 1) < Date_fin
        Next i
    End Sub
    Cdlt

  4. #4
    Membre régulier
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Février 2006
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Février 2006
    Messages : 110
    Points : 79
    Points
    79
    Par défaut
    Citation Envoyé par mfoxy Voir le message
    Merci mais je ne trouve pas la solution à ce que je souhaiterais arriver

    Citation Envoyé par ARTURO83 Voir le message

    Merci mais j'ai une erreur sur le code:
    Erreur d'exécution 91
    Variable objet ou variable de bloc with non définie sur la ligne "LCol_f2 = Split(Col_f2.Address, "$") (1)"

  5. #5
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 240
    Points : 5 655
    Points
    5 655
    Par défaut
    Bonjour,

    Merci mais j'ai une erreur sur le code:
    Erreur d'exécution 91
    Variable objet ou variable de bloc with non définie sur la ligne "LCol_f2 = Split(Col_f2.Address, "$") (1)"
    La variable LCol_f2 n'a pas été déclarée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    Option Explicit
     
    Sub Copie_congés()
        Dim f1 As Worksheet, f2 As Worksheet
        Dim i As Long, DerLig_f1 As Long, DerLig_f2 As Long, Annee As Long, Ind As Long
        Dim Col_f2 As Range
        Dim LCol_f2 As String
        Dim Date_Deb As Date, Date_fin As Date
     
        Application.ScreenUpdating = False
        Set f1 = Sheets("congé")
        Set f2 = Sheets("planning")
        Annee = f1.Range("C1").Value
     
        DerLig_f1 = f1.Range("C" & Rows.Count).End(xlUp).Row
        Set Col_f2 = f2.Rows(2).Find(Annee)
        LCol_f2 = Split(Col_f2.Address, "$")(1)
        DerLig_f2 = f2.Range(LCol_f2 & "3:" & LCol_f2 & Rows.Count).End(xlUp).Row + 1
     
        For i = 5 To DerLig_f1
            Date_Deb = f1.Cells(i, "C")
            Date_fin = f1.Cells(i, "D")
            Ind = 0
            Do
                f2.Range(LCol_f2 & DerLig_f2).Value = Date_Deb + Ind
                Ind = Ind + 1
                DerLig_f2 = DerLig_f2 + 1
            Loop While f2.Range(LCol_f2 & DerLig_f2 - 1) < Date_fin
        Next i
    End Sub
    Le fichier en exemple pour comparer avec le vôtre, notamment au niveau des colonnes
    Pièce jointe 573193

    Cdlt

  6. #6
    Membre régulier
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Février 2006
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Février 2006
    Messages : 110
    Points : 79
    Points
    79
    Par défaut
    Merci, c'est exactement cela que je cherchais.
    Cela fonctionne très bien si je mets manuellement l'année dans la feuille "congé", colonne G (Dans ce cas, 2020)
    Si je passe par =annee(A1) ou A1 est la date du jour, cela ne fonctionne plus.
    J'ai mis la cellule en format date, en format standard, rien à faire.
    J'ai une erreur sur la ligne LCol_f2 = Split(Col_f2.Address, "$") (1).
    Pour résumer, dès que je fais référence à une cellule pour avoir l'année, ça plante.

  7. #7
    Membre régulier
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Février 2006
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Février 2006
    Messages : 110
    Points : 79
    Points
    79
    Par défaut
    je joins une copie de mon fichier excel avec une explication sur la page infoTest calendrier-01.xlsm

  8. #8
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 240
    Points : 5 655
    Points
    5 655
    Par défaut
    Bonjour,

    Comment voulez-vous que ça fonctionne, vous voulez l'adapter au vrai fichier en modifiant des paramètres, mais vous en oubliez au passage, c'est normal que ne marche pas.
    j'avais mis Set f2 = Sheets("planning") et vous vous avez mis Set f2 = Sheets("Feuil1"),
    j'avais mis Annee = f1.Range("C1").Value, si vous voulez prendre la cellule A1, il faut remplacer "C1" par "A1"

    En ce qui concerne l'année en "G4" de "Planning", elle doit bien être au format standard.

    Commencez par revoir de plus près votre code et comparez avec celui que j'avais déposé. Positionnez-vous dans votre code et essayez de comprendre en faisant du pas à pas avec la touche F8.

    Il n'y pas de raison que ça marche dans un cas et pas dans l'autre.

    Cdlt

  9. #9
    Membre régulier
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Février 2006
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Février 2006
    Messages : 110
    Points : 79
    Points
    79
    Par défaut
    Pour les congés et les fins de carrière, cela fonctionne très bien mais pas avec les congés de département.
    J'ai dû passer par des feuilles intermédiaires (feuil1 , feuil2 et feuil3) pour récupérer les valeurs dans "planning".
    Après, je vais essayer d'adapter le code sur une version plus longue, sur un calendrier de 3 ans.

  10. #10
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 240
    Points : 5 655
    Points
    5 655
    Par défaut
    Dans le rapatriement par département, vous recherchez la dernière ligne de la colonne S avec la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DerLig_f1 = f1.Range("S" & Rows.Count).End(xlUp).Row
    hors il y a des formules un peu plus bas à partir de S13 et qui ne sont pas des dates, évidemment cela coince.
    remplacez cette ligne par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        DerLig_f1 = f1.Range("S5").End(xldown).Row

  11. #11
    Membre régulier
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Février 2006
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Février 2006
    Messages : 110
    Points : 79
    Points
    79
    Par défaut
    Voilà, pour un expert, cela semble si simple.
    Un grand merci.

  12. #12
    Membre régulier
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Février 2006
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Février 2006
    Messages : 110
    Points : 79
    Points
    79
    Par défaut
    Par contre, si j'efface les valeurs dans les cellules S et T du département, l'erreur revient

  13. #13
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 240
    Points : 5 655
    Points
    5 655
    Par défaut
    Bonjour,

    Remplacez la ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     DerLig_f1 = f1.Range("S4").End(xlDown).Row
    par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        DerLig_f1 = f1.Range("S3").End(xlDown).Row
        If DerLig_f1 = 4 Then
            MsgBox "il n'y a pas de date dans la feuille ""Congé"""
            Exit Sub
        End If
    Cdlt

  14. #14
    Membre régulier
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Février 2006
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien réseau

    Informations forums :
    Inscription : Février 2006
    Messages : 110
    Points : 79
    Points
    79
    Par défaut
    Voilà, tout fonctionne super bien.
    Je vais faire la même chose sur un calendrier de 3 ans, ce qui correspond aux congés de fin de carrière.)1
    je vais juste l'améliorer en récupérant la valeur d'une cellule (qui représente les différentes années avant la pension), car comme j'aurai 4 x l'onglet congé, ce sera "congé" avec l'année pension(1), pension (2).... etc, et modifier le code pour que le nom de la feuille soit exact dans le code, sinon, rien ne fonctionnera.
    Un tout grand merci pour l'aide des experts.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 17
    Dernier message: 17/02/2009, 22h37
  2. Logiciel pour concevoir les plans des maisons
    Par WELCOMSMAIL dans le forum Autres Logiciels
    Réponses: 7
    Dernier message: 23/12/2008, 08h38
  3. Réponses: 0
    Dernier message: 26/11/2008, 12h20
  4. [MSSQL2005] Quel plan de maintenance pour des performances?
    Par david_chardonnet dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 12/03/2008, 12h51
  5. Planning et estimation des charges pour un projet de site Intranet
    Par rad_hass dans le forum Gestion de projet
    Réponses: 1
    Dernier message: 08/02/2008, 11h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo