Probleme sous excel - Page 4

  1. Bonjour ReBonjour,

    alors je t'ai posté ici un exemple de chevauchement de congé pour les mois de juillet-aout c'est comme ca que cela se présente, j'espère qu'il te sera utile et aussi que mon probleme n'est pas trop prise de tete.....!!!

    http://www.cijoint.fr/cjlink.php?file=cj200806/cijuEWwLEz.xls.

    Voila wala, encore merci !! ++
    0
    1. Hello Amigo,

      ben voila je voulais juste m'informer si tu avais eu un peu de temps pour jeter un oeil sur le fichier que je t'ai envoyé et penses tu qu'il y ait possibilité de faire ce qui est dit, moi de mon côté j'ai réussie a fiare l'algo, mais au niveau du code j'ai quand meme pas mal de difficulté, je compte beaucoup sur ton aide pour y arriver !!!

      Merci beaucoup !!!
      0
      1. Coucou Amigo,

        alors sans vouloir te brusquer, je voulais juste m'informer si tu avais eu un peu de temps pour te pencher sur mon probleme s'il te plait ! Mwa j'y suis depui quelques jours mais je n'ai pas l'impression de beaucoup avancer en fait, j'aurais vraiment besoin de ton aide parce que moi je commence à désespérer looool !!!

        Merci !!!
        0
        1. Bonjour,

          Je n'ai pas eu beaucoup de temps ces derniers jours, mais j'ai réussi à me dégager quelques heures pour terminer la procédure de mise à jour des congés.

          Cette procédure s'apelle Mise_a_jour_conge()

          pour le test:
          -vider le tableau (effacer_tableau)
          -executer mise_a_jour_conges
          -modifier quelques dates dans la feuille "congés", supprimer une date, mettre des dates erronées
          -revenir sur la feuille du mois et executer mise_a_jour_conges

          cette procédure s'execute automatiquement avec copier_feuille ou au changement de mois.

          j'ai du changer quelques lignes de code dans les procédures copier_feuille et masquer_colonnes

          alors il faut reprendre le module_initialisation en entier.

          le serveur de ci-joint.fr ne fonctionne pas, j'ai déposé le fichier sur cjoint.com

          https://www.cjoint.com/?gsjeaQOQkj

          A+.
          0
          1. RE bonojour,

            désolée de n'avoir pu répondre plus tot, j'avais des petits soucis de connexion !

            Alors j'ai fait comme tu m'as dit pour les tests et j'ai aussi retoucher la procédure copier_feuille pour retomber sur le tableau comme il faut !!!

            La il y aurait éventuellement un petit bonus a rajouter a la procédure mise_a_jour_conges() s'il est éventuellement possible que tu y jette un p'ti d'oeil pour me donner un p'ti coup de main s'il te plait, je te l'explique vite fait : en fait après la colonne NOM, il faut rajouter une colonne CONGES et dans cette colonne doit y figurer le nombre de jours que chaque agent a pris dans le mois courant en tenant compte que les dimanches et jours fériés ne sont pas comptés. Voila si vraiment tu peux m'aider la dessus !!

            Mais en tout cas, je n'oublies pas tout l'investissement et tout le temps que tu y a consacrer afin de mettre a terme la procédure de congés et de tout ca, je t'en suis vraiment reconnaissante merci beaucoup beaucoup !!!
            0
            1. Bonjour,

              Insérer une colonne CONGES en colonne "B" va nécessiter de revoir toutes les procédures.
              Le plus facile serait de l'inserer en colonne "BN", là il n'y a rien à modifier.

              Pour décompter les dimanches et jour fériés, ça se complique. Passe pour les dimanches qui sont faciles à repérer sur le calendrier, mais les jour fériés doivent etre listés quelque part, car ils varient d'une année à l'autre, d'une région à l'autre et meme d'une entreprise à l'autre. Donc il faut faire ce petit travail de réflexion avant, et tenir cette liste à jour chaque année.

              A+.
              0
              1. SAlut,

                j'ai ormis de te préciser que cette colonne "CONGES" était à insérer dans la feuille de congé car cela facilite beaucoup plus le travail et tout doit figurer sur cette feuille.

                On m'a fait penser à éventuellement rajouter par fonction pour trouver les dimanches. Alors j'ai réfléchi et j'ai pensé à la fonction suivante :

                Function NB_jours_ouvrés(Date_début As Date, Date_fin As Date) As Integer
                Dim Cpt As Date
                Dim Nb_jours As Integer

                For Cpt = Date_début To Date_fin
                If Weekday(Cpt, vbMonday) <> 7 Then
                NB_jours_ouvrés = NB_jours_ouvrés + 1
                End If
                Next

                End Function

                Une fois de plus mon probleme est de savoir maintenant comment l'utiliser !!!

                Et maintenant, je réfléchis à pour les jours fériés !!!

                A bientot !!!
                0
                1. Aussi, j'ai jugé utile de ne m'intéresser qu'à la feuille "congés", donc j'ai éventuellement mis la date d'aujourd'hui en B3 que l'on comparera par la suite avec les dates de la ligne 6 ensuite lorsque la condition sera remplie, on parcours la 1ere colonne, on vérifie la présence de la date, on la mémorise (c la procédure date_début comme on l'a vu précédemment) et pareil pour "Date_fin". Ensuite, on appelle la fonction qui calcule le nb de jours entre ces 2 dates et on demande à la reporter dans la colonne B a la ligne correspondante.

                  Voila l'algo que j'ai pensé, est-ce que cela pourrait éventuellement convenir ???

                  Cordialement !!!
                  0
                  1. Re,

                    La fonction que tu as écrite est correcte. Reste à déterminer les jours non travaillés autre que le dimanche.
                    Il y a les dates fixes : 1er janvier, 1er mai, 14 juillet,...25 décembre. A ne décompter que si ça ne tombe pas un dimanche.
                    Il y a les dates mobiles: Lundi de Paques, Lundi de Pentecote, .... qui ne tombent pas toujours à la même date.

                    C'est cette liste qu'il faut créer et tenir à jour chaque année.(Voir ou peut la caser)

                    La date du jour en B3 n'est pas franchement utile. La fonction Date() du VBA suffirait.

                    La colonne B va changer chaque mois. Ne faudrait-il pas plutot, pour chaque mois avoir une colonne Début, Fin, et Jour ouvrés? La colonne Jours Ouvrés serait calculée ( appel de la fonction NB_jours_ouvrés() ) lorsque la colonne Fin change.

                    Je vais partir sur cette hypothèse, et on verra ce que ça donne.

                    A+.
                    0
                    1. Bonjour,

                      Voici la solution que j'ai apporté à ton problème

                      1) Module Initialisation
                      Procédure Mise_a_jour_conges()
                      '...
                      'balayer la ligne 6 et rechercher le mois en cours
                      Do
                      mois_conge = Month(ActiveCell.Value)
                      If mois_orig = mois_conge Then
                          col = i  'le mois est trouvé on mémorise la colonne
                          Exit Do
                      End If
                      i = i + 3 '<---------------------Modifier ici
                      Cells(6, i).Select
                      Loop While ActiveCell.Value <> "" 'boucler jusqu'à la fin de la ligne 6
                      '...


                      Ajouter ces deux Fonctions

                      'calculer le nombre de jours ouvrés entre deux dates
                      Function NBJO(Date_début As Date, Date_fin As Date) As Integer
                      Dim Cpt As Date
                      Application.Volatile
                      If Date_fin = 0 Or Date_début = 0 Or Date_fin < Date_début Then
                          NBJO = 0
                          Exit Function
                      End If
                      For Cpt = Date_début To Date_fin
                      If Weekday(Cpt, vbMonday) <> 7 Then
                      NBJO = NBJO + 1
                      End If
                      Next
                      End Function
                      
                      
                      'calculer le nombre de jours fériés entre deux dates (sauf dimanche)
                      Function NBJF(Date_début As Date, Date_fin As Date) As Integer
                      Dim Cpt As Date, JF As Range, cel As Range
                      Application.Volatile
                      If Date_fin = 0 Or Date_début = 0 Or Date_fin < Date_début Then
                          NBJF = 0
                          Exit Function
                      End If
                      Set JF = Range("JoursFériés!B2:B20")
                      For Cpt = Date_début To Date_fin
                      For Each cel In JF
                      If Weekday(Cpt, vbMonday) <> 7 Then
                         If Cpt = cel.Value Then NBJF = NBJF + 1
                      End If
                      Next
                      Next
                      End Function


                      2) Ajouter une feuille, renommer "JoursFériés"
                      (attention à l'orthographe, le nom figure dans la fonction NBJF)
                      Colonne "A"-----Colonne "B"
                      Année	         2008
                      Jour de l'an	  01/01/2008
                      Lundi Pâques      24/03/2008
                      Fête Travail       01/05/2008
                      Fête Victoire     08/05/2008
                      Fête Nationale  14/07/2008
                      Ascension        15/08/2008
                      Toussaint         01/11/2008
                      Armistice         11/11/2008
                      Noel               25/12/2008

                      Eventuellement compléter ou corriger, tu peux aller jusqu'a la ligne 20

                      3) Modifier la feuille congés
                      Pour chaque mois ajouter une colonne, exemple:
                      +---------------------------------+---------------------------------+
                      :          juillet 2008           :            Aout 2008            :
                      +----------+----------+-----------+----------+----------+-----------+
                      :   Debut  :   Fin    : Nbr Jours :   Debut  :   Fin    : Nbr Jours :
                      +----------+----------+-----------+----------+----------+-----------+

                      dans la colonne Nbr Jours, mettre la formule:
                      =NBJO(Debut;Fin)-NBJF(Debut;Fin)

                      en fait, Debut et Fin sont les cellules à passer aux fonctions
                      exemple en G8 : =NBJO(E8;F8)-NBJF(E8;F8)

                      copier la formule sur toute la colonne
                      recommencer pour les colonnes suivantes

                      Bon courage.
                      0
                      1. Bonjour Amigo,

                        alors je me suis penché sérieusement sur mon problme, j'ai fini par trouver une solution, "je pense", mais l'inconvénient est que lorsque je compile il me dit "Incompatibilité de type", je te laisse voir si tu peux faire quelque chose la dessus s'il te plait !!!

                        Je te remercie !!!

                        https://www.cjoint.com/?gAip5VkfcE
                        0
                        1. Bonjour,

                          ça se complique sérieusement, ton tableau.

                          Voici les corrections à aporter à la procédure Mise_a_jour_conges()
                          '....
                          'Recherche colonne du mois en cours dans feuille congés
                          'Se positionner sur la feuille congés en B6
                          Sheets(f_conge).Select
                          Range("C6").Select
                          i = 3: col = 0' initialiser i à 3 (colonne C)
                          '....
                          '....
                          'Rechercher nom de l'agent
                                  If nom_agent <> "" Then ' ne pas rechercher une case vide
                                      On Error Resume Next
                                      Selection.Find(What:=nom_agent, After:=ActiveCell, LookIn:=xlFormulas, _
                                      LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
                                      MatchCase:=False).Activate
                                      On Error GoTo 0
                                  End If
                          


                          A+.
                          0
                          1. Bonjour Amigo,

                            je tiens tout d'abors a te remercier pour la petite correction que tu as apporté merci, et je voulais éventuellement revenir à ta solution sur la feuille "JoursFériés", je suppose que je dois mettre les jours fériés annuels manuellement par exemple pour 2010, 2011...alors dans ce cas ca modifiera les années précédentes si j'ai bien compris ????

                            ++
                            0
                            1. Bonjour,

                              La solution que j'avais imaginé est sensiblement pareille à la tienne, éxepté que j'ai utilisé des fonctions personnalisées plutot que des formules attachée à des cellules nommées.

                              Il n'en reste pas moins que la feuille ou sont listés les jours fériés de l'année en cours comportera toujours une part de saisie manuelle, sauf si comme tu l'a fait, tu sais calculer les dates mobiles Paques et Pentecote. Les autres dates sont fixes, je crois.

                              De plus, dans ma région, nous avons des fetes locales particulières qui s'ajoutent, je ne sais pas si c'est vrai ailleurs.

                              Encore un cas particulier eventuellement à prendre en compte, par exemple dans ma société nous fermons certains jours de l'année (on fait le pont certains week-ends). Donc il faut gérer ça aussi.

                              Il reste la journée de solidarité, le jour férié travaillé, qui peut être un n'importe quel jour férié à condition que ça ne tombe pas un dimanche.

                              C'est pour ça que moi, si j'avais à faire ce travail, je saisirai à la main une fois pour toutes en début d'année le tableau des jours fériés. Ce n'est pas un gros travail et au moins c'est juste.

                              Ceci dit, les fontions personnalisées s'utilisent comme les fonctions Excel standard, il faut juste leur passer les bons paramètres séparés par des ";". Donc tu peux revoir la mise en forme du tableau si tu préfères voir les jours affichés juste à près la colonne nom. L'avantage des fonctions personnalisées c'est qu'elle profitent de toute la puissance du VBA.

                              Bon assez bavardé, à toi de voir. Si tu as un souci, je serai là.
                              A+.
                              0
                              Précédent
                              • 1
                              • 2
                              • 3
                              • 4