Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
bonjour le forum
je vous demande de bien vouloir m'aider comment modifier la macro inclue dans le fichier joint
dans le classeur modif_macro je voudrais inserer une ligne dans feuil3 (comme l'exemple de la feuil3_1)
puis mettre un seul surveillant au lieu de deux et supprimer la matiere completement
la macro dans feuil3 s'execute normalement sauf que je veux mettre 4 sessions au lieu de 3 ,supprimer la matiere , et ne laisser qu'un seul surveillant par salle
bonjour le forum
je vous demande de bien vouloir m'aider comment modifier la macro inclue dans le fichier joint
dans le classeur modif_macro je voudrais inserer une ligne dans feuil3 (comme l'exemple de la feuil3_1)
puis mettre un seul surveillant au lieu de deux et supprimer la matiere completement
la macro dans feuil3 s'execute normalement sauf que je veux mettre 4 sessions au lieu de 3 ,supprimer la matiere , et ne laisser qu'un seul surveillant par salle
merci pour votre réponse
j'ai modifié la macro seulement je veux aussi si c'est possible supprimer la matière , c'est de placer seulement les x1 , x2 ... x45
voici la macro après modification
# Sub remplitSalles()
Dim c As Range
Dim d As Range
Dim e As Range
MaxRow = [B65536].End(xlUp).Row 'colonne B,les créneaux
MaxCol = [IV2].End(xlToLeft).Column 'ligne2, les salles
Matière = 0
For Each c In Range([C3], Cells(MaxRow, MaxCol))
re: Matière = Matière + 1: If Matière > [Matières].Count Then Matière = 1
If c.Row > 3 Then
Sheets("Feuil3").Activate
Set e = Range(Cells(3, c.Column), c).Find(What:=Range("Matières").Cells(Matière).Value, LookIn:=xlFormulas, LookAt:=xlPart)
End If
If Not e Is Nothing Then GoTo re
[filtre].AutoFilter Field:=3, Criteria1:=[Matières].Cells(Matière)
Set d = [filtre].Offset(1, 0)
Do While d.EntireRow.Hidden = True
Set d = d(2, 1)
Loop
c = d & vbLf & d(1, -1) & "+" & vbLf & d(2, -1)
d(1, 0) = d(1, 0) + 1
d(2, 0) = d(2, 0) + 1
[filtre].AutoFilter Field:=3
c = d & vbLf & d(1, -1)
d(1, 0) = d(1, 0) + 1
d(2, 0) = d(2, 0) + 1
d(3, 0) = d(3, 0) + 1
[filtre].Sort Key1:=Sheets("Data").[C2], Order1:=xlAscending, Key2:=Sheets("Data").[B2], Order2:=xlAscending, Header:=xlGuess
Set e = Nothing
Next
Range([C3], Cells(MaxRow, MaxCol)).EntireColumn.AutoFit
End Sub
très bien merci d'avoir répondu
effectivement j'aimerai augmenter la vitesse du code si vous voulez bien m'aider
excusez moi j'ai oublier de vous dire que j'ai changé le code comme vous m'avez indiquez mai la matière est aussi générée par le code!! ce que je veux c'est ne doit pas figurer dans la cellule
OK pour accélerer le code et prendre en compte les changements:
J'essaie de comprendre ce que tu veux faire :
tu as 45 personnes divisés en 15 matiéres ,
si je prend Lundi 1ere session salle 1 je mets X1, salle 2 X4
donc en salle 16 X2, salle 17 X5,
donc en salle 10 2eme session X3t, salle 11 2eme session X6 et ainsi de suite ...
Tiens regardes testes ceci pour voir si j'ai bien compris ce que tu voulais.
J'ai redéfinis Nomprofs avec un decaler, ça évite les blancs ..
Je passe par un tableau VBA comme cela on écrit qu'une fois dans la feuille => c'est ça qui accélère le code.
J'explique peu le code ci dessous , regardes le KikideZon pour des explications sur les variables tableau
Code:
Const PlageProf$ = "NomsProfs" 'NOm de la liste définie
'J'ai redéfini avec =DECALER(data!$A$2;;;NBVAL(data!$A:$A)-1), comme cela tu peux ajouter
'ou supprimer des profs le nom défini contiendra que des noms
'Tu peux faire la même chose pour les matières ou les classes
Dim TabProf 'Tableau des Profs
Dim T 'tableau du Planning
Sub InitTab()
With Feuil5 'ou sheets("planning"),+2 puisque cellule fusionnée en colonne B
T = Range(.[C3], .Cells(.[B65536].End(xlUp).Row + 2, _
.[IV2].End(xlToLeft).Column)).Value
End With
TabProf = Range(PlageProf).Value 'ou range("NomsProfs").value
End Sub
Sub RempliSallesZon()
Dim I&, J&, K&
InitTab
K = 1
For I = LBound(T) To UBound(T) Step 3 'On parcourt les lignes de 3 en 3
For J = LBound(T, 2) To UBound(T, 2) 'On parcourt les colonnes 1 à 1
If T(I, J) <> "" And T(I + 1, J) <> "" Then 'a condition que les cellules C3 et C4 ou D3 et D4
T(I + 2, J) = TabProf(K, 1) ' jusqu'a W3 et W4 ne soient pas vides
K = IIf(K = UBound(TabProf), 1, K + 1)
End If
Next J
Next I
With Feuil5
.[C3].Resize(UBound(T), UBound(T, 2)) = T
End With
End Sub
Si c'est ok pour toi, on attaquera ensuite l'autre partie que tu demandes dans le fichier, peut être quand te plongeant dans les tableaux VBA tu auras un début de piste à me donner si tu as envie de mettre les mains dans le camboui sinon je te le ferai à ma façon sans explication(ce qui n'est pas l'objectif du forum).
Salut
Effectivement c'est ce que je veux de cette macro a part que un professeur ne peut être dans deux salle en même temps.
ca me range et ca me met en colère de ne pas connaitre le VBA ,pourrai-je vous demandé un lien ou on peut apprendre mais en multimédia!
merci de votre aide et de votre gentillesse .
Dans la feuille Data, je n'ai mis que 4 professeurs pour nomprofs, si tu mets au moins le même nb de profs que de salle y a rien à modifer ça fonctionne.
Dès que j'ai le temps, je te fais la 2 eme partie.
Dans la feuille Data, je n'ai mis que 4 professeurs pour nomprofs, si tu mets au moins le même nb de profs que de salle y a rien à modifer ça fonctionne.
Dès que j'ai le temps, je te fais la 2 eme partie.
Je t'ai fait la 2 eme partie, j'en ai profité pour créer à la volée tous tes tableaux de présence avec le nom des profs définis en feuille data
Code:
Sub Princ()
InitTab 'initialisation des données
CopierColler 'à partir du tableau A1:E10 on crée chaque tableau de présence pour chaque prof
RemplirNomprofesseur 'mets les noms de professeurs stockés en feuille data
' EffaceIndiv 'on efface les données dans tableau individuel, ne sert que si on sépare les procédures
RempliSallesZon 'remplissage de la feuille planning
RempliIndividuel 'remplissage de la feuille tableau indiduel
End Sub
Tu peux utiliser ces procédures indépendamment des unes des autres , par contre il faut penser à initiliaser les tableaux avec inittab en début de chacune d'elle.
J'ai pas modifié la proc associée au bouton GO.
Une piste, améliorer la saisie dans planning avec le clic droit par exemple que toutes ces listes de validation...Pratique mais pas forcémment du goût de certains utilisateurs.
salut;
Super ! effectivement c'est ce que je voulais de cette macro seulement des fois j'ai des messages d'erreurs 13"For I = LBound(T) To UBound(T) Step 3 'On parcourt les lignes de 3 en 3" et quand je lance la macro avec le bouton Go tout ce que j'ai mis comme salle et matière s'efface !!! je ne comprends pas ce qui ce passe.
autre chose est qu'il serait possible de programmer des séances de surveillances pour un prof la matinée de 8h a 12 ou de 13h a17h.mais pas les deux c'est a dire qu'un prof X1 le mieux pour lui c'est de surveiller de 2 séances consécutives de 8a10 et de 10 a 12 et le soir il sera libre et l'autre par exemple X2 la matinée serait libre mais il surveille deux séances consécutives aussi de 13 a 15 et de 15 a17.
S'il y a une astuces c'est oui pour faciliter la saisie et milles merci de cette aide
salut;
Super ! effectivement c'est ce que je voulais de cette macro seulement des fois j'ai des messages d'erreurs 13"For I = LBound(T) To UBound(T) Step 3 'On parcourt les lignes de 3 en 3" et quand je lance la macro avec le bouton Go tout ce que j'ai mis
S'il y a une astuces c'est oui pour faciliter la saisie et milles merci de cette aide
Dans mon dernier post je disais
Tu peux utiliser ces procédures indépendamment des unes des autres , par contre il faut penser à initiliaser les tableaux avec inittab en début de chacune d'elle.
autre chose est qu'il serait possible de programmer des séances de surveillances pour un prof la matinée de 8h a 12 ou de 13h a17h.mais pas les deux c'est a dire qu'un prof X1 le mieux pour lui c'est de surveiller de 2 séances consécutives de 8a10 et de 10 a 12 et le soir il sera libre et l'autre par exemple X2 la matinée serait libre mais il surveille deux séances consécutives aussi de 13 a 15 et de 15 a17.
S'il y a une astuces c'est oui pour faciliter la saisie et milles merci de cette aide
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD