Aide Planning VBA

Fermé
Alex - 5 janv. 2013 à 12:58
 alex - 11 janv. 2013 à 09:07
Bonjour,

j'ai besoin d'aide pour de la conception d'un programme VBA.
Je souhaiterais juste que l'on puisse m'aider à concevoir l'algorithme

Mon projet :
Une équipe à choisir, ensuite celà amene dans une nouvelle feuille ou le calendrier de la semaine de travail est partagé du lundi au vendredi avec une colonne MATIN une colonne APRES MIDI .
Avant le lancement de la macro qui départage le planning, une macro va extraire de la BDD les absences et jour de non "activité" de chaque personne.
Et ensuite la MACRO va prendre en compte toute ces conditons ex :
- minimum la moitié de l'équipe de disponible le matin et une lapre midi
- qu'une personne ne soit pas du matin tout les jours de la semaine.
-congés



Au niveau de mon avancé j'ai fais toutes les taches en amont , même l'extraction grâce à un recordset, je galère un peu a concevoir la logique pour remplir le planning,

Idée perso : je comptais mettre des "0" pour indispo , 1 " matin" , et 2 "soir" et les compter a chaque fois pour remplir le tableau,

Qu'en-pensez vous ?


Merci




A voir également:

4 réponses

alena20 Messages postés 23 Date d'inscription lundi 23 juillet 2012 Statut Membre Dernière intervention 6 mai 2015 2
8 janv. 2013 à 14:30
Bonjour,

C'et interessante ton problem. Peut-etre tu peux mettre des lettres? c'est un peu trivial, mais ca peut etre un debut de brainstroming:)
M=matin
A=apres-midi
T=m+a
I=0m+0a

Apres on fais cas by cas pour la personne de l'equipe concernée

If cells(l,c)=m then m=0+1
if cells(l,c)=a then a=0+1
if cells(l,c)=t then m=0+1
and a=0+1
if cells(l,c)=i then go to mars

Apres tu peux calculer le numbre de chaque lettre pour chaque membre de chaque equipe et de le mettre dans le feuille resultat?


Ici le lien. https://www.cjoint.com/c/CAioDjhRGAR

Je n'ai pas ecrit le code mais pour l'instant juste une structure.
Tiens moi au courant pour la solution qui tu va choisir!
Bonne courage!
Cord, Alena
1
alena20 Messages postés 23 Date d'inscription lundi 23 juillet 2012 Statut Membre Dernière intervention 6 mai 2015 2
8 janv. 2013 à 14:42
Pour ta solution, sa serait bien, mais comment le code apres la calculation de la totalité de 1 , 0 et 2 va distanguer matin et l'apres midi? Ou peut etre il y a les choses, qui je n'ai pas capté..
0
Bonjour,

Bah en mettant un random qui attribue la plage (si du matin ou de l'apres midi ) et compteur, a chaque fois qui teste pour voir si l'un est plus petit que l'autre et faire le choix si le random+" case déja saisie par utilisateur " avantage trop l'un ou l'autre .

En fait j'ai kazi finis et avec des "SI" on peut tout faire ^^




J'ai par contre un nouveau besoin, ça serait que ce fichier se regénére tout seul car je l'ai maintenant ajouté un envoi de mail automatique, je souhaiterais qu'avec L'OS (ici windows) il envoi automatiquement un mail sans que je touche au fichier excel , important par exemple le samedi ou dimanche , j'ai pensé au planificateur, mais ne peut-on pas faire cela grâce au shell par exemple ?

Cdt
0
Et je remarque que ta solution et la mienne se ressemble :-)
0
alena20 Messages postés 23 Date d'inscription lundi 23 juillet 2012 Statut Membre Dernière intervention 6 mai 2015 2
9 janv. 2013 à 15:08
Bonjour Alex,

Je ne connais pas de ce planificateur de taches, mais ca sonne interessant. C'est qoui exactement?

Sinon je vois 2 solutions:

1. Execution de macro de generation + macro d'envoi à l'ouverture de fichier avec sub auto_open

2. Execetution de macro à l'heure exacte quand le fichier est ouverte avec Application.OnTime(EarliestTime, Procedure, [LatestTime], [Schedule])




Si la solution 1, voivi le code d'envoi email automatique de ton outlook à l'ouverture de fichier. https://www.cjoint.com/?CAjo7kgcWI

Apres il faut "negocier" avec windows:) comment ovrir le fichier par ex. à 12.00 am le samedi. Je vois 2 solutions:


1. Demarrer windows à l'heure specifique=> on peut ouvrir le fichier excel à la demarrage de windows

2. Lancer le fichier avec une application certaine quand windows est deja demarré(apres mahleuresement je ne connais pas cet type de l'application, si tu sais, n'hesites pas de me dire, je suis aussi curiouse:)

Que-est que t'en penses?
0
alena20 Messages postés 23 Date d'inscription lundi 23 juillet 2012 Statut Membre Dernière intervention 6 mai 2015 2
10 janv. 2013 à 14:24
Hello Alex

voici le code pour execture le macro quotidennement à 14:06:05 avec Application.OnTime.
Donc si t'as ton fichier ouvert entre 14:06:05 et 14:07:00 le jour quand tu veux generer le code et envoyer automatiquement par email (en fait t' as besoin 0,3 sec pour executer le macro), donc tu peux avoir le macro executé automatiquement.

https://www.cjoint.com/c/CAkovN54j6g

J'espere, que ces infos ont pu t'aider dans ton projet
Cordi
Alena
0
Bonjour Alena,

J'apprécies énormement, le petit brainstorming que l'on se fait ^^

Alors pour la méthode du mail, j'avais déjà trouvé une solution mais c'est exactement comme tu me l'as fournis, d'ailleurs ajouté une petite listbox qui est parcouru lors de l'envoi de mail en masse (nomdelalistebox.listindex(x)) c'est encore mieux ^^ .

Concernant l'ouverture automatique, et comme tu es intéréssé par le planificateur (comme moi sa tombe bien )
J'ai trouvé 2 solutions :

La premiere qui va créer des taches planifiés sous windows : http://cjoint.com/?0Akx41ppUr9
La seconde solution est de faire un .bat avec une ligne de commande .

Les 2 se rejoignent, pour les taches planifiées je l'ai fais et ça marche , l'autre j'ai laissé tombé même si d'apres mes tests cela semble aussi fonctionner.



Petite question, par hasard tu ne saurais pas comment copier directement la plage de cellule dans le corps et ne pas l'avoir dans l'attachement ?
Mon idée : Je pense à copier la plage en image et la recoller dans le corps, je le fais dans la journée et je te dis :-)


Cordialement,
0
Pour incorporer une image ou une plage de cellule dans un mail :

Sub Envoyer()

Dim ol As New Outlook.Application
Dim olmail As MailItem
Dim CurrFile As String
Dim No

'No = Workbooks("feuil1").Sheets("planning").Range("A1:K10")
ActiveSheet.Range("A4:K14").Select
ActiveWorkbook.EnvelopeVisible = True
With ActiveSheet.MailEnvelope
.Introduction = "This is a sample worksheet."
.Item.To = Sheets("feuil1").Range("A4").Value
.Item.Subject = "My subject"
.Item.Send
End With
End Sub


Marche à partir de windows XP , sinon autre version, je conseille de le faire passer en script HTML
0