Aide Planning VBA

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

4 réponses

  1. 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
    1. 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
    2. 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
    3. Et je remarque que ta solution et la mienne se ressemble :-)
      0
  2. 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
    1. 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
  3. 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
    1. 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