Avertissement si chevauchement de dates

Bonjour le forum,

Je voudrais faire (mais je n’y arrive pas) une macro qui m’afficherait un message avec les personnes qui se seraient inscrites sur des formations avec des dates qui se chevauchent.

Par exemple dans mon fichier exemple j’ai Dupont Eric (surligné en jaune pour l’exemple) qui c’est inscrit sur une formation du 01/06/2017 au 15/12/2017 (RI83) et en même temps sur une formation du 02/12/2017 au 06/02/2018 (QZ17) ce qui n’est pas possible puisqu’il n’aura pas fini la première formation. Je voudrais une macro qui me permet de savoir quelle(s) personne(s) et sur quelle(s) formation(s) il y a eu une inscription avec un chevauchement de date. Les personnes sont identifiées par un code unique qui se trouve en colonne « N » ce qui permet de ne pas confondre avec des homonymes. Les formation sont identifiées également par un code unique qui est en colonne "E".

Je ne sais pas si j’ai été assez clair et si ma requête est possible.

Cordialement.

Bonjour,

plutôt qu'un contrôle à-posteriori autant alerter à la saisie.

Effectué à la saisie de l'identifiant (je suppose qu'à terme les noms-prénoms seront remplis avec un recherchev().

Vu l'heure je n'ai pas fignolé les contrôles de chevauchement, essaie tous les cas de figure.

eric

Salut eriic

La saisie des nouveaux noms est faite sous manuellement. Ta macro donne me donne un bon début de résultat mais ce qui serait bien c'est qu'elle me donne le nom au lieu de la ligne de "chevauchement" et qu'elle me donne toutes les lignes où pour la même personne à des formations qui se chevauche.

Dans mon exemple lorsque je rentre de nouveau Dupont Eric (Id 1000) dans la formation QZ17 (ligne 24) il me dit qu'il y a un chevauchement avec la ligne 3 or il y a aussi chevauchement à la ligne 10.

Mais cela dit ta macro m'aide déjà dans l'orientation qu'il faut prendre pour obtenir le résultat que je recherche. Merci pour ton travail.

Cordialement.

Bonjour,

La saisie des nouveaux noms est faite sous manuellement.

tu pourrais te faire un tableau de correspondance et l'utilisateur n'a que son id à saisir, nom et prénom se complètent tous seuls.

mais ce qui serait bien c'est qu'elle me donne le nom au lieu de la ligne de "chevauchement"

Le nom ? quel nom ? C'est lui-même... Je peux sélectionner la ligne en cause si tu veux

et qu'elle me donne toutes les lignes où pour la même personne à des formations qui se chevauche.

A partir du moment où le contrôle se fait à la saisie il ne peut y en avoir qu'une seule puisque les autres ont été refusées.

eric

Salut eriic

Tu as raison mais il y a deux éléments (c'est de ma faute car je ne les ai pas précisés) qu'il faut prendre en compte.

Le premier élément : c'est que la saisie dans mon fichier "principal" est effectivement manuelle mais c'est moi qui saisit l'information et non la personne qui s'inscrit (d'où la précision de faire apparaître le nom du candidat) MAIS les informations peuvent être mises en masse par un copier coller. Je m'explique : un extrait du fichier principal d'inscription (le mien) est transmis à des responsables (il y a environ 5) qui me le retournent complété des informations concernant les candidats qu'ils voeulent positionner sur des formations et je ne fais que copier et coller ces informations qui m'ont transmises dans mon fichier principal. Là il faudrait lorsque j'ai fini la concaténation des nouvelles informations reçues des différents responsables que je sache si il n'y a pas des chevauchements de dates pour des candidats identiques et que je connaissent qui est concerné par ce chevauchement pour les prévenir afin qu'il modifie le choix de la période de la ou les formations.

Le deuxième élément : c'est que les dates d'une formation peut varier dans le temps (problème d'instructeur, de matériels pédagogiques...) donc je peux avoir une situation correcte (c'est à dire sans chevauchement de date) qui peut devenir incorrecte car une personne inscrite sur deux ou plusieurs formations sans chevauchement peut se retrouver avec un chevauchement de dates. Donc si la macro me donne l'info je peux prévenir la ou les personnes concernées par ce chevauchement de date pour leur demander de ce désinscrire sur la ou les formations qui causent le chevauchement afin de repositionner sur une nouvelle formation.

En conclusion c'est pour ça que je souhaite avoir une macro qui m’afficherait un message avec les personnes qui seraient positionnées sur des formations avec des dates qui se chevauchent.

J'espère que mes explications ne sont pas trop brouillon.

Cordialement.


eriic

Point particulier : J'ai remarqué que ta macro m'empêche d'inscrire un même candidat MEME si il n'y a pas de chevauchement de date.

Cordialement

Re salut eriic

J'ai corrigé le petit "bug" du point particulier en modifiant les lignes :

If Not (per1(1) > per2(2) And per1(2) < per2(1)) Then

MsgBox "Chevauchement avec session " & Cells(c.Row, 5) & ", ligne " & c.Row

par :

If Not (per1(1) > per2(2) Or per1(2) < per2(1)) Then

MsgBox "Chevauchement avec session " & Cells(c.Row, 5) & ", ligne " & c.Row & ", concernant " & Cells(c.Row, 12)

Maintenant j'ai le nom de la personne en ayant ajouté "", concernant " & Cells(c.Row, 12)[/b]" ET je peux inscrire un candidat plusieurs fois lorsqu'il n'y a pas de chevauchement de dates en ayant remplacé "AND" par "OR" dans "If Not (per1(1) > per2(2) Or per1(2) < per2(1)) Then"

Maintenant reste le problème de m'avertir lorsque les périodes de dates changes (ce qui arrive souvent) et qu'elles occasionnent un chevauchement dans l'ensemble de mon fichier qui pour info n'a pas que 50 lignes comme inscrit dans ton code avec [N3:N50] mais actuellement 3000 lignes et ce n'est pas fini.

Peut-être une macro qui cherche les chevauchement de dates pour une même personne (même identification) sur deux ou plusieurs formation différentes où cette dernière s'est positionnée ?

Tu aurais dû tout décrire dès le début.

Je revois ça plus tard.

eric

Désolé et merci par avance.

Est-ce qu'une colonne supp avec les ident répétés sur les lignes en chevauchement t'irais ?

Ca te permettrai de filtrer tous les pb d'un ident parce que si tu dois te balader sur 3000 lignes tu vas t'amuser...

Ca sera plutôt début semaine prochaine parce que comparer 3000 lignes 2 à 2 voire plus il faut optimiser pour ne pas que ça dure 1h.

eric

Salut

Oui pourquoi pas. Je mettrais cette colonne "supp" en "AI" dans mon fichier réel (toutes les colonnes avant sont déjà occupées).

Cordialement.

Bonjour,

Voilà, ça me parait pas trop mal (vu le peu de cas je n'ai pas pu tester grand chose), à toi de tester.

Par contre comme le code est un peu complexe, si tu as moyen de remonter les bugs rapidement tant je me rappelle ce que j'ai fait ça m'arrangerait.

Ta fusion sur les dates n'a pas facilité pas. Du coup j'ai anticipé des fusions en A et E.

Par curiosité dis-moi combien de temps ça met pour tes 3000 lignes.

eric

Salut eriic,

Merci pour ton travail sur la macro.

J'ai incorporé ta macro dans le fichier de départ qui correspond à un extrait de mon fichier principal de travail (qui comporte les colonnes A à BA de remplies et les ligne 3 à 2400 de renseignées) et j'ai eu pour l'instant 2 messages d'erreur.

Le 1er msg je l'ai compris et j'ai pu le corriger. Il fallait que je créer un onglet "TCD". J'ai donc copié celui que tu as fait dans ton fichier car les tableaux dynamiques je ne sais pas faire. Alors si tu peux m'expliquer comment on les fait au passage

Le 2e message d'erreur là je n'ai pas compris son origine.

Je te mis en PJ le fichier de départ avec ta macro et les copies d'écran des messages d'erreur.

Point particulier : dans le fichier de départ les données commencent à partir de la ligne 3 et non 2 comme tu as fait dans ton fichier.

Cordialement et merci encore.

msg1 msg2 msg2 suite

Bonjour,

Point particulier : dans le fichier de départ les données commencent à partir de la ligne 3 et non 2 comme tu as fait dans ton fichier.

C'est plus simple si on peut commencer les données en ligne 1.

C'est pour le TCD justement : Tableau Croisé Dynamique (TCD) : http://www.mdf-xlpages.com/modules/smartsection/item.php?itemid=109 , et ça évite de se balader un décalage tout le long de la macro.

C'est très puissant, ça vaut le coup de s'y mettre comme disais la girafe.

Tu ne peux pas copier le mien dans ton classeur car il est lié aux données de mon classeur.

Il faut le créer à partir de tes données.

Si on sélectionne les colonnes entières (avec obligatoirement les titres en 1ère ligne, c'est une bonne habitude à prendre) il prend en compte toutes les lignes, y compris celles ajoutées.

Si tu sélectionnes une plage pour le faire, il faut qu'elle soit dynamique pour tenir compte des ajouts.

Quel type de données y as-tu ? Si c'est une ligne d'introduction tu peux peut-être remplacer par une zone texte.

Sinon on peut faire autrement, tu dis...

L'erreur c'est que tu as une donnée non numérique (chaine) à la place d'une date, en l’occurrence le titre en ligne 2 au lieu de 1.

J'attend donc ta réponse sur cette ligne 1.

eric

Salut,

Commencer à ligne 1 m'obligerait à revoir toutes les macros déjà mise en place et je pense que ça serait trop long et source d'erreur. Je te mets en PJ un extrait de mon fichier principale avec toutes ses colonnes et quelques macros qui s'y trouvent.

J'ai ajouté ta macro dans le module 3 et j'ai copié de nouveau ton onglet "TDC" (en attendant de bien comprendre le principe des TCD)

Cordialement

j'ai donc ajouté un nom dynamique plDatas et modifié la macro en conséquence. J'espère n'avoir rien oublié.

J'ai aussi changé la source de donnée du TCD dessus.

Test limité aux données présentes, à compléter par tous les cas possibles.

eric

PS quand les tests et le débogage seront terminés tu pourras masquer la feuille TCD si tu le souhaites.

Re salut eriic

Ta macro dans le fichier que tu m’as envoyé bug au 1er lancement (1er message erreur en PJ). Après débugage si je relance ça marche. Ouf.

Par contre lorsque j’insère toutes mes lignes de formation dans le fichier là la macro bug de nouveau mais impossible d’aller plus loin. Copie écran du deuxième message d’erreur en PJ.

Je t’ai inséré dans le fichier que tu m’as envoyé l’onglet « TCD » créé lorsque j’insère toutes les lignes de mon tableau principal dans celui où tu m’as mis ta nouvelle macro.

A quoi est dû ce deuxième message d’erreur surtout que je pense qu’il ne doit pas avoir grand-chose pour que la macro fonctionne (enfin je pense).

Cordialement

1er message erreur 2e message erreur 2e message erreur ligne code

Repars du précédent fichier v1 et contente-toi d'y coller tes données pour tester.

Là tu as ajouté un TCD et dupliqué le nom plDatas inutilement et apparement tu l'embrouilles en plus.

En reprenant le fichier V1 que tu m'as envoyé et si j'y colle mes données j'ai les même message que je t'ai décrit dont le dernier est :

message erreur

Je n'arrive pas à comprendre ????

Là il me faut le fichier avec les données.

Si trop gros zippe-le.

eric

Je ne peux pas de fournir le fichier avec les données.

Est-ce que tu peux me dire à quoi correspond la ligne qui bug :

"formiD(id).nbIns = formId(iD).nbIns + i" (ligne en jaune dans le dernier message)

Peut-être que j'arriverai à comprendre qu'est-ce qui cause ce bug ?

Cordialement.

Rechercher des sujets similaires à "avertissement chevauchement dates"