Copier des colonnes d'un planning par jour, pour faire un planning par semaine.

Eldorai

XLDnaute Nouveau
Bonjour,

J'ai créé un petit fichier d'emploi du temps pour la gestion des postes de surveillance d'un lycée/collège.

Or cette gestion se fait par jour, en affichant les postes de chaque surveillants.

Donc Feuille 1=Lundi, Feuille 2=Mardi etc.

Je souhaiterais pouvoir établir le planning de chaque surveillants, pour qu'ils aient leurs poste sur la semaine.

J'ai donc créé une nouvelle feuille "EDT par AED", et j'y ai créé un nouvel emploi du temps avec une case en validation des données où l'on rentre le non du Surveillant.

Et à partir de là il faudrait chercher dans les feuilles de journée si il y a des postes à faire pour ce surveillant, et les copier.

J'ai bien essayé avec une RECHERCHE H, mais cela m'a l'air très fastidieux, et pas adapté, car quand je copie/colle la formule, il n'incrémente pas les données de recherche comme je le souhaite, et je dois tout reprendre à la main.
 

Pièces jointes

  • EDT VIESCO_AED.xlsx
    21 KB · Affichages: 36
  • EDT VIESCO_AED.xlsx
    21 KB · Affichages: 40

vgendron

XLDnaute Barbatruc
Re : Copier des colonnes d'un planning par jour, pour faire un planning par semaine.

Hello
voir PJ
j'ai modifié la facon de définir la zone "Surveillants" --> de facon dynamique
attention.. dans les planning, les surveillants doivent apparaitre dans le meme ordre (pour l'instant)
 

Pièces jointes

  • EDT VIESCO_AED.xlsx
    26.7 KB · Affichages: 46
  • EDT VIESCO_AED.xlsx
    26.7 KB · Affichages: 34

Eldorai

XLDnaute Nouveau
Re : Copier des colonnes d'un planning par jour, pour faire un planning par semaine.

Merci Beaucoup C'est déjà pas mal, je vais intégrer mes dernières modification à ce fichier.

Du coup que faudrait il faire pour que je puisse placer mes surveillants dans n'importe quel ordre?
 

vgendron

XLDnaute Barbatruc
Re : Copier des colonnes d'un planning par jour, pour faire un planning par semaine.

avec une version qui n'impose pas l'ordre des surveillants

par contre. je ne comprend pas pourquoi il y a des 0 qui apparaissent ... sur une seule cellule..??

PS: est ce normal que dans EDT par AED il y a deux fois le mercredi?
 

Pièces jointes

  • EDT VIESCO_AED.xlsx
    30.7 KB · Affichages: 31
  • EDT VIESCO_AED.xlsx
    30.7 KB · Affichages: 40

Eldorai

XLDnaute Nouveau
Re : Copier des colonnes d'un planning par jour, pour faire un planning par semaine.

Merci, je comprend pas tout le code, mais ca marche.

Voilà la nouvelle version du fichier avec vos modifications du code de "EDT par AED".

EDIT: J'aimerais modifier votre formule pour qu'au lieu de définir la plage de la fonction INDIRECT par les case B3 et L32, celà soit définis par mes horaires de début de journée (7h45) et de fin de journée (18H00), pour pouvoir rajouter/supprimer des lignes dans les horaires. Et le must du must serait de pouvoir rajouter ou supprimer des colonnes pour que le nombre de surveillants maximum puisse varier.
Mais je ne vois pas comment le faire...

EDIT 2: J'ai presque réussi à reproduire le système sur le tableau des nuits d'internat. Mais je pense que je dois remplacer ma formule SI(RECHERCHE($E$1;Lundi!$B$35:$I$35)=$E$1;"Lundi";"") dans la première ligne de ce tableau.
La deuxième ligne qui indique l'étage à surveiller fonctionne parfaitement.

Pour l'histoire du zéro...
En réalité il affiche un Zéro sur toutes les cases vides, c'est juste que la mise en forme conditionnelle cache le zéro des cases, après la premières.

J'avais le même soucis avec ma Recherche H.

Dans ce fichier j'ai fait en sorte que la mise en forme cache cette erreur. Donc le 0 est toujours là, mais on ne le vois pas, en attendant de comprendre pourquoi la fonction donne ce résultat.

PS: Comment ca deux fois le mercredi? Mais non... pas dans cette version voyons... :eek:
 

Pièces jointes

  • EDT VIESCO_AED.xlsx
    39.9 KB · Affichages: 29
  • EDT VIESCO_AED.xlsx
    39.9 KB · Affichages: 32
Dernière modification par un modérateur:

vgendron

XLDnaute Barbatruc
Re : Copier des colonnes d'un planning par jour, pour faire un planning par semaine.

Re

ok pour les 0..j'avais bien vu les Mises en forme conditonnelles.. mais sans creuser ;-)

pour le point 1:
il "suffit" de nommer deux cellules "fixes" dans EDT: A2: Debut et A34: Fin et récuperer leurs positions par ligne(Debut) et ligne(Fin)

et tu remplaces donc les case B3 et L32 par les "ligne(..)
si tu insères ou supprime des lignes entre les deux, la formule fonctionnera

ce qui donne. voir PJ

pour le point 2: je ne comprend pas trop ce que tu es censée avoir..
si dans la feuille de vendredi, je met Florian sur le créneau Etude 20h-21, dans l'onglet EDT (Florian sélectionné), je retrouve bien son créneau à la colonne du Vendredi..
par contre. si le vendredi. je met Florian AUSSI sur le créneau B1: seul le premier créneau Etude20h21 est reporté..(il n'y a de la place que pour 1

à moins que tu veuilles modifier la formule pour ne plus avoir à écrire "vendredi" jeudi ou etc..
dans ce cas.. idem. avec la fonction indirect
 

Pièces jointes

  • EDT VIESCO_AED (1).xlsx
    39.9 KB · Affichages: 41
  • EDT VIESCO_AED (1).xlsx
    39.9 KB · Affichages: 28

Eldorai

XLDnaute Nouveau
Re : Copier des colonnes d'un planning par jour, pour faire un planning par semaine.

Le fichier en PJ n'était apparemment pas modifié. J'ai donc testé
J'ai mis comme valeur dans les cases A2 DEBUT, A34 FIN, puis dans le gestionnaire de nom, j'ai nommé A2 DEBUT, et A34 FIN.

J'ai modifié la formule comme suit:

Code:
=SIERREUR(INDEX(INDIRECT(B$2&"!LIGNE(DEBUT):LIGNE(FIN)");LIGNE()-2;EQUIV($E$1;INDIRECT(B$2&"!$B$2:$l$2");0));"")

Et ca ne marche pas...
Je n'ai toujours pas compris pourquoi il y a l'argument LIGNE()-2 dans la fonction INDEX.

Pour le point 2, j'ai oublié de préciser qu'un surveillant ne peux pas effectuer deux étages en même temps. Donc on ne peux pas faire Etude + Etage. Je vais bosser sur cette partie pour mieux faire.
 
Dernière modification par un modérateur:

vgendron

XLDnaute Barbatruc
Re : Copier des colonnes d'un planning par jour, pour faire un planning par semaine.

pour l'explication de la formule.. j'avais commencé à te faire une explication pas à pas. et puis.. j'ai abandonné..
mais comme je suis de bonne humeur aujourd'hui ;-)

commençons par le début avec un exemple: avec Florian
En I3 de la feuille EDT, on va aller chercher le planning de Florian le Lundi à 7h45
dans ta feuille EDT, cellule I3 tu tapes donc "=" puis va dans la feuille Lundi, en cellule B3 (parce que Florian a été saisi dans la colonne B)
tu obtiens donc la formule
Code:
=Lundi!B3
le but de la formule est donc de trouver toute seule Lundi, la colonne B ainsi que la ligne 3

pour renvoyer vers la feuille dont le nom est en B2 on utilise la fonction Indirect() avec une syntaxe incluant le "!"
la formule devient
Code:
=INDIRECT(B2&"!B3")

pour la colonne B, il faut chercher Florian (sélectionné en E1)

pour ca. c'est la fonction Equiv(quoi, ou);0)
quoi: on cherche la position de Florian,
ou: on cherche dans la zone B2:L2 DE LA FEUILLE lundi (d'ou encore un indirect qui passe par la)
Code:
EQUIV($E$1;INDIRECT(B$2&"!$B$2:$l$2");0)

si tu tapes uniquement cette ligne, ca te renvoie 1: Florian est dans la première colonne de la range B2:L2

donc ici on sait qu'il faut ce qui est contenu en ligne 3 colonne 1 de la zone (B3:L33) en feuille Lundi
on utilise la fonction Index(zone, ligne colonne)

comme tu souhaites ajouter ou supprimer des lignes dans la zone B3L33, il faut indiquer les numéros de lignes de début et de fin

le tout.. avec un Sierreur qui evite d'avoir des #ref quand il n'y a rien à trouver
et voila !!

pfff.. j'ai mal au crane ;-)
 

vgendron

XLDnaute Barbatruc
Re : Copier des colonnes d'un planning par jour, pour faire un planning par semaine.

tu y étais presque

Code:
=SIERREUR(INDEX(INDIRECT(B$2&"!$B$"&LIGNE(Debut)+1 &":$L$" &LIGNE(Fin)-1);LIGNE()-2;EQUIV($E$1;INDIRECT(B$2&"!$B$2:$l$2");0));"")

le ligne()-2, c'est parce qu'il y a un décalage entre la ligne 7h45 (3) de EDT. et la position de la ligne 7h45 DANS la matrice B3:L33: (en position 1)

je te remets le fichier à jour..
 

Pièces jointes

  • EDT VIESCO_AED (1).xlsx
    41.3 KB · Affichages: 33
  • EDT VIESCO_AED (1).xlsx
    41.3 KB · Affichages: 32

Eldorai

XLDnaute Nouveau
Re : Copier des colonnes d'un planning par jour, pour faire un planning par semaine.

Ca marche nikel, et effectivement j'y était presque, j'allais modifier le code pour remplacer 2 par Ligne(debut) et 33 par ligne(FIN) mais, il m'aurait manqué quelques caractères pour que cela fonctionne.

Du coup j'ai un nouveau soucis, connaissant les compétences des gens qui vont utiliser ce fichier, il me faudrait un système qui ajoute automatiquement des lignes sur tout les classeurs concernés, si j'en ajoute une sur l'un des classeurs.

Mais là il doit falloir taper dans le VB que je ne connais pas.

J'ai trouvé ca, sans grande conviction que ca aide...


Code:
Sub Test()
'-----------------------------------------------------
'-----------Insertion d'une nouvelle ligne------------
'-----------------------------------------------------
    Rows("10:10").Insert Shift:=xlDown
 
 
'-----------------------------------------------------
'-------------Copie de la cellule "B9"----------------
'-----------------------------------------------------
    Range("B9").Copy
 
 
'-----------------------------------------------------
'---Colle la cellule "B9" en "B10" avec la formule----
'-----------------------------------------------------
    Range("B10").PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
 
 
'-----------------------------------------------------
'--------Ajout de la nouvelle valeur en "A10"---------
'-----------------------------------------------------
    Range("A10").FormulaR1C1 = "100"
 
 
'-----------------------------------------------------
'Selection la cellule "A1" (Pas vraiement obligatoire)
'-----------------------------------------------------
    Range("A1").Select
 
 
'-----------------------------------------------------
'-----------Déselctionne la cellule copiée------------
'-----------------------------------------------------
    Application.CutCopyMode = False
 
 
End Sub
 

Eldorai

XLDnaute Nouveau
Re : Copier des colonnes d'un planning par jour, pour faire un planning par semaine.

J'ai obtenue ce que je voulais pour mon tableau des nuit d'internat.

Me reste donc ce problème d'insertion de ligne automatisé.

Et ensuite je m'attaque au calcul des heures des surveillants.

EDIT: Donc pour mon système de calcul des heures, j'ai réfléchi à ca comme système:

Dans la ligne 41, je veux qu'il fasse la soustraction entre L'horaire de fin, et l'horaire de début pour chaque jour.

Par exemple pour lundi:
Je dois trouver dans la colonne B, la référence de la ligne de la première case où il y une valeur. Trouver la référence de la ligne+1 de la case où il y a la dernière valeur. Puis Je lui dis de calculer A LIGNE(dernière valeur) - A LIGNE(Première Valeur).
 

Pièces jointes

  • EDT VIESCO_AED.xlsx
    41 KB · Affichages: 35
  • EDT VIESCO_AED.xlsx
    41 KB · Affichages: 28
Dernière modification par un modérateur:

vgendron

XLDnaute Barbatruc
Re : Copier des colonnes d'un planning par jour, pour faire un planning par semaine.

Hello..

j'ai bien une idée de code pour l'insertion de ligne automatique.. MAIS j'ai un gros problème d'incompréhension sur ce qui se passe

Code:
Sub Macro2()
'
' Macro2 Macro
'

'
    Set ligne = Application.InputBox("selectionnez la ligne pour insertion", Type:=8)
    'MsgBox ligne.Row
    NouveauCreneau = InputBox("donnez le nouveau créneau")

    For Each feuille In Sheets(Array("Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi","EDT par AED"))
        
        feuille.Activate
        Range(ligne.Address).EntireRow.Insert , CopyOrigin:=xlFormatFromLeftOrAbove
        Range("A" & ligne.Row) = NouveauCreneau
        
    Next feuille

End Sub

la ligne s'insère bien dans toutes les feuilles. avec recopie du créneau SAUF pour la dernière feuille
la ligne est insérée. mais le créneau est recopié à la ligne du dessous !!!! ????? !!!!

quand j'aurai compris ce mystère.. il faudra recopier les formules de la ligne..
 

vgendron

XLDnaute Barbatruc
Re : Copier des colonnes d'un planning par jour, pour faire un planning par semaine.

bon. voila.. j'ai légèrement contourné le problème....

Code:
Sub Macro2()
'
' Macro2 Macro
'

'
    Do
        Set ligne = Application.InputBox("selectionnez une cellule unique pour insertion au dessus", Type:=8)
    Loop Until ligne.Count = 1
    'MsgBox ligne.Row
    'ajoutter un test pour vérifier que le créneau n'existe pas déjà? et qu'il est à la bonne place?
    NouveauCreneau = InputBox("donnez le nouveau créneau")

    For Each feuille In Sheets(Array("Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi"))
        
        With feuille '.Activate
        .Range(ligne.Address).EntireRow.Insert , CopyOrigin:=xlFormatFromLeftOrAbove
        .Range("A" & ligne.Row) = NouveauCreneau
        .Range("M" & ligne.Row) = NouveauCreneau
        End With
    Next feuille
    
    With Sheets("EDT par AED")
        .Range(ligne.Address).EntireRow.Insert , CopyOrigin:=xlFormatFromLeftOrAbove
        .Range("A" & ligne.Row - 1) = NouveauCreneau
        .Range("G" & ligne.Row - 1) = NouveauCreneau
        
'recopie de la formule
         .Range("B" & ligne.Row - 2 & ":F" & ligne.Row - 2).Select
        Selection.AutoFill Destination:=.Range("B" & ligne.Row - 2 & ":F" & ligne.Row - 1), Type:=xlFillDefault
    End With
    
End Sub
 

Eldorai

XLDnaute Nouveau
Re : Copier des colonnes d'un planning par jour, pour faire un planning par semaine.

hmmmmmm je suis perdu là. C'est bien une macro?
Je test ca comment? Elle se déclenche automatiquement en faisant une insertion de ligne? Ou il faut un bouton?

Pour mon calcul des heures.

J'en suis a ca pour ma formule... Je bloque. Dans mes recherche j'ai vue que beaucoup de monde utilise VB pour déterminer le numéro de la première ou dernière case non vide d'une colonne.

Code:
SIERREUR(INDIRECTE(A$"LIGNE(MAX(SI("B$"&LIGNE(Debut)+1 &":$B$" &LIGNE(Fin)-1"<>"";("B$"&LIGNE(Debut)+1 &":$B$" &LIGNE(Fin)-1"<>"")+1)+1)-INDIRECTE("A$"LIGNE(MIN(SI(B$"&LIGNE(Debut)+1 &":$B$" &LIGNE(Fin)-1"<>"";("B$"&LIGNE(Debut)+1 &":$B$" &LIGNE(Fin)-1"<>"")+1)));"")

J'admire ton savoir et ta logique. Et je pleure de ne pas avoir continué la programmation quand j'étais plus jeune.:(
 

vgendron

XLDnaute Barbatruc
Re : Copier des colonnes d'un planning par jour, pour faire un planning par semaine.

oui, c'est bien une macro à lancer avec un bouton
regarde la pj:
j'ai mis deux boutons dans la feuille AED (il faudra ajouter ou supprimer les lignes à partir de cette feuille. sinon. ca ne marchera pas

pour supprimer une ligne. c'est simple. il suffit de cliquer sur la ligne désirée
pour ajouter. idem. ca demande ensuite quelle heure il faut ajoutter (pour l'instant. aucun controle si tu t'amuses à écrire papa maman ou autre plutot qu'une heure au format hh:mm)

pour voir le code: Alt+F11 pour ouvrir l'éditeur vba, et normalement. avec les commentaires que je mets (apparaissent en vert) tu devrait comprendre la "logique"

pour ta formule. je regarde ca plus tard..
 

Pièces jointes

  • EDT VIESCO_AED Rev3.xlsm
    56.4 KB · Affichages: 45
  • EDT VIESCO_AED Rev3.xlsm
    56.4 KB · Affichages: 35

Discussions similaires