Probleme sous excel
je sui larissa, je découvré votre site et il est vraiment primordial pour aider lew gens en difficulté !!
Aujrdui j'ai moi meme un petit probleme que j'espere que vous pourriez le résoudre !!!
Alr je suis sous excel, et je dois automatiser mon tableau de données a partir de la date cad qu'a chaque changement de mois, on doi prendre en compt les jours etc...ceci est réglé enfin je crois mais mon probleme est d'initilaiser des cases précises de mon tableau et je bloque vraiment la dessus !!!
Encor merci d'avance !!!
Configuration: Windows XP Internet Explorer 6.0
74 réponses
L'enjeu est d'automatiser un tableau Excel au passage d'un mois et d'initialiser certaines cellules précises tout en garantissant que les formules et les mises en couleur restent cohérentes. Des solutions essentielles évoquent l'adaptation des plages utilisées par NBVAL (par exemple NBVAL(F8:BM8) plutôt que NBVAL(B8:BM8)) et la vérification de la cellule nommée « formule » ou son remplacement par une adresse précise. Pour le volet réinitialisation mensuelle, il convient de vider les cases cochées et de restaurer les couleurs d'origine, tout en conservant l'affichage sur six semaines et le déplacement du mois en cours.
-
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+. -
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 ????
++ -
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+. -
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 -
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. -
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+. -
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 !!! -
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 !!! -
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+. -
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 !!! -
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+. -
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 !!! -
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 !!! -
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 !! ++ -
La mise en page du tableau il semblerait qu'il soit tel qu'il est et en ce qui concerne les éventualités, effectivement la
première une personne ne pourra pas avoir 2 périodes de congés dans le même mois et pour le chevauchement il suffit
de faire un rajout bout à bout cad : une personne qui prend ses congés du 25/06/2008 au 05/07/2008 par exemple,
dans le tableau on aura : 25/06/2008 - 31/06/2008 pour le mois de juin et 01/07/2008 - 05/07/2008 pour le mois de
juillet !!!
Voila j'espere que mon explication fut assez claire lool !!
Merci !!! -
Bonjour,
En observant le tableau congés, je m'aperçois qu'on ne peut y inscrire qu'une seule période par agent et pour un mois donné.
Que se passe-t-il, si une personne demande plusieurs congés pour le même mois?
Que se passe-t-il si la période de congés est à cheval sur deux mois?
Est-ce que ces éventualités sont à envisager?
Je pense qu'il faut revoir la mise en forme de ton tableau de saisie. Pose la question autour de toi pour savoir quelle serait la présentation qui répondrait le mieux aux besoins.
J'attends confirmation
A+. -
Alors je te ici le lien : http://www.cijoint.fr/cjlink.php?file=cj200806/cijnJ0shJs.xls.
Voila c'est bien la le principe, lorsque qu'on ouvre la nouvelle feuille du mois de juillet, il y des cases mauves qui doivent apparaitre selon les dates indiquées dans le tableau de congés.
J'ai profité aussi pour te faire un exemple de ce que ca doit en résulter en fait et apparamment ce qu'il faut c'est que lors du remplissage manuel du tableau des congés par la suite pour les mois a venir, que cela soit pris en considération mais on peut deja commencer par les 2 premiers présentés.
Je t'explique, les dates des mois de juillet et aout sont définis et pour le mois d'octobre, novembr etc... ils seront rempli ultérieurement mais je pense que si l'on fais pour un exemple, cela doit fonctionner pour tout le reste !
Voila j'espere que mes explications ont été claires et simple Merci !!! -
OK,
Je résume, tu as un tableau avec des dates de congés, et tu voudrais visualiser par des couleurs les périodes de congés sur le tableau qu'on a vu ensemble.
C'est faisable, il me faudrait connaitre le format du tableau avec les dates, mieux si je pouvais avoir une copie sans données confidentielles.
A+. -
Ca y est j'ai tout conclue correctement !!! Beh amigo tu sais quoi la j'ai une tache a faire qui tient d'un niveau conséquent j'aurais encore besoin de toi si tu es toujours d'accord !!!
Alors la, mm pour l'explication cela est délicat !!!
Donc j'ai un tableau avec des dates définies pour chak mois, des dates de congé pour etre plus précise et ce que je dois faire c'est que tu vois je dois reporter ces dates en cases colorées des lors qu'une nouvelle feuille est crée, je te donne un exemple :
regarde pr le mois de juin, il y a d cases mauves pour les congés ben ce sont des dates bien précises é en fait j'ai un tableau définit avec des dates pour le mois de juin, juillet, aout etc....et je dois reporter ces dates dans le tableau du mois de juillet lorqu'il est créé, dis moi si j'ai été assez claire sinon je tenterais de me reformuler !!! -
Re,
Je peux te proposer déja deux procédures, l'une pour réduire l'affichage et l'autre qui rétablit l'affichage.
Pour imprimer , c'est plus délicat, ça va dépendre de la mise en page, du format de la page ...
Il faudrait que fasses cette macro avec enregistrer une macro. Quand c'est au point, je te dirais ou la placer.Sub reduire_affichage() Columns("F:BM").Select Selection.EntireColumn.Hidden = True End Sub Sub Rétablir_affichage() afficher_colonnes masquer_colonnes End Sub
A+.
- 1
- 2
- 3
- 4