ton fichier en retour ; sur "Feuil2", lis d'abord toutes les infos que j'ai notées, en particulier ce qu'il y a en i15 et i16 ; après avoir fait tous les tests nécessaires, merci de me donner ton avis. remarque : ne me demande pas de faire l'adaptation en "Feuil1" pour rajouter les 5 salles manquantes : c'est ton job de le faire ! selon le texte الحـــراس الاحتياطيــون de tes cellules fusionnées A23:A33, tu devras mettre plus bas tes gardes de réserve ! إلى اللقاء (= au revoir, ciao, sayonara)
code VBA (16 lignes) :
VB:
Option Explicit
'NumProf : Numéro d'un Prof (exemple : 91, 93, ou 113)
' NS...
tu a fait un grand travail ; c'est excellent ,la note complète
pour compter le nombre de séances pour chaque profs je mai la formule =NB.SI(Feuil1!$B$3:$AE$26;K3) en feuil2 ?
c'est dans mon post #7 que j'avais écrit « ok ! » ; c'était pour répondre à ton post #6, où tu étais content que ça marche puisque suite à mon post #5(que tu as cité), tu as écrit :
donc maint'nant tu as changé d'avis, et tu remets en cause mon post #5 ! a) d'abord, ça marche très bien sur mon fichier exemple ; si ça ne marche pas sur ton fichier réel, je ne sais pas pourquoi ! (peut-être as-tu fait une fausse manip au niveau d'une feuille, ou mal recopié mon code VBA ?) ; b) tu écris simplement « mais ça marche pas », sans expliquer ce qui ne va pas ! comment veux-tu que j'essaye d'arranger ce qui cloche si tu ne le décrit pas ! peut-être aussi que tu as simplement eu l'impression que ça ne marche pas, mais qu'en réalité ça marche quand même ?
peut-être que tu n'as pas fourni un fichier suffisamment représentatif de ton fichier réel, et que dans ton vrai fichier les données sont à un autre emplacement ? (il suffit que ce soit une ligne plus bas, ou une colonne à droite) ; note bien que tu n'indiques rien du tout ! y'a aucune donnée ; y'a aucune mention de feuille ; y'a aucune mention de cellule ; aucune phrase du genre « il devrait y avoir la donnée 15 au lieu de la donnée 8 » ; peut-être même que l'erreur que tu aurais vue n'est pas sur une des feuilles mais dans le code VBA ? si oui, dans quelle sub ? dans quelle ligne de cette sub ? bref, tout manque !!! et tu veux que je trouve une solution à ton problème qui n'en n'est peut-être pas un ? désolé, mais je ne suis pas magicien, et je n'ai pas de boule de cristal !
c'est dans mon post #7 que j'avais écrit « ok ! » ; c'était pour répondre à ton post #6, où tu étais content que ça marche puisque suite à mon post #5(que tu as cité), tu as écrit :
donc maint'nant tu as changé d'avis, et tu remets en cause mon post #5 ! a) d'abord, ça marche très bien sur mon fichier exemple ; si ça ne marche pas sur ton fichier réel, je ne sais pas pourquoi ! (peut-être as-tu fait une fausse manip au niveau d'une feuille, ou mal recopié mon code VBA ?) ; b) tu écris simplement « mais ça marche pas », sans expliquer ce qui ne va pas ! comment veux-tu que j'essaye d'arranger ce qui cloche si tu ne le décrit pas ! peut-être aussi que tu as simplement eu l'impression que ça ne marche pas, mais qu'en réalité ça marche quand même ?
peut-être que tu n'as pas fourni un fichier suffisamment représentatif de ton fichier réel, et que dans ton vrai fichier les données sont à un autre emplacement ? (il suffit que ce soit une ligne plus bas, ou une colonne à droite) ; note bien que tu n'indiques rien du tout ! y'a aucune donnée ; y'a aucune mention de feuille ; y'a aucune mention de cellule ; aucune phrase du genre « il devrait y avoir la donnée 15 au lieu de la donnée 8 » ; peut-être même que l'erreur que tu aurais vue n'est pas sur une des feuilles mais dans le code VBA ? si oui, dans quelle sub ? dans quelle ligne de cette sub ? bref, tout manque !!! et tu veux que je trouve une solution à ton problème qui n'en n'est peut-être pas un ? désolé, mais je ne suis pas magicien, et je n'ai pas de boule de cristal !
ah bon ! tu me rassures ! à un moment donné, pourtant, il m'avait légèrement semblé que tu avais parlé d'une erreur, puisque tu as écrit dans ton post #17 : « mais ça marche pas » ; admettons que c'était juste une lubie aussi soudaine qu'inopportune !
ah oui ? tiens donc ! quelle question ? vu qu'à chaque fois que je t'ai apporté une solution tu as fait une nouvelle demande, en posant une nouvelle question, j'ai un peu de mal à m'y retrouver parmi toutes tes questions successives !
alors ? c'est quoi au juste ? un nombre de surveillants ou un nombre de séances ? des « surveillants » = des personnes ; mais des « séances », c'est pas des personnes, c'est en quelque sorte des périodes de temps où il se passe quelque chose ; par exemple : je préfère une séance au cinéma qu'une séance chez le dentiste ! (= je préfère voir un bon film qu'aller me faire arracher une dent !)
comme tu as déjà demandé beaucoup de choses dans cette discussion, je te propose d'ouvrir un autre sujet, en mettant un fichier exemple avec quelques données, et aussi quelques exemples des résultats attendus ; indique bien quelles données sont concernées, et leur emplacement ; exemple : sur "Feuil2", en B5:F28 ; même chose pour l'emplacement des résultats attendus.
j'essayerai de trouver une solution si ton énoncé est suffisamment explicite, sinon je laisserai tomber : c'est à toi de bien décrire ce qu'il faut ; on n'a pas à perdre du temps pour essayer de trouver ce qui manque dans une description incomplète du problème à résoudre !
quand il s'agit de code VBA, tu dois indiquer le module standard concerné (ex : Module1), ou dire s'il est dans ThisWorkbook, ou dans le module de "Feuil5", ou dans tel UserForm ; puis il faut indiquer quelle sub est concernée, quelle ligne de code de la sub pose problème, quelle erreur se produit (exemple A : ça me donne 20 au lieu de 50 ; exemple B : ça fait une soustraction au lieu d'une somme ; exemple C : ça fait une division par 0 ; et chaque fois que possible : quelle donnée ? sur quelle feuille et quelle plage de cellules ?) ; c'est une erreur de compilation ? une erreur d'exécution ? ou une erreur de logique ? (numéro de l'erreur, et texte exact du message d'erreur).
ah bon ! tu me rassures ! à un moment donné, pourtant, il m'avait légèrement semblé que tu avais parlé d'une erreur, puisque tu as écrit dans ton post #17 : « mais ça marche pas » ; admettons que c'était juste une lubie aussi soudaine qu'inopportune !
ah oui ? tiens donc ! quelle question ? vu qu'à chaque fois que je t'ai apporté une solution tu as fait une nouvelle demande, en posant une nouvelle question, j'ai un peu de mal à m'y retrouver parmi toutes tes questions successives !
alors ? c'est quoi au juste ? un nombre de surveillants ou un nombre de séances ? des « surveillants » = des personnes ; mais des « séances », c'est pas des personnes, c'est en quelque sorte des périodes de temps où il se passe quelque chose ; par exemple : je préfère une séance au cinéma qu'une séance chez le dentiste ! (= je préfère voir un bon film qu'aller me faire arracher une dent !)
comme tu as déjà demandé beaucoup de choses dans cette discussion, je te propose d'ouvrir un autre sujet, en mettant un fichier exemple avec quelques données, et aussi quelques exemples des résultats attendus ; indique bien quelles données sont concernées, et leur emplacement ; exemple : sur "Feuil2", en B5:F28 ; même chose pour l'emplacement des résultats attendus.
j'essayerai de trouver une solution si ton énoncé est suffisamment explicite, sinon je laisserai tomber : c'est à toi de bien décrire ce qu'il faut ; on n'a pas à perdre du temps pour essayer de trouver ce qui manque dans une description incomplète du problème à résoudre !
quand il s'agit de code VBA, tu dois indiquer le module standard concerné (ex : Module1), ou dire s'il est dans ThisWorkbook, ou dans le module de "Feuil5", ou dans tel UserForm ; puis il faut indiquer quelle sub est concernée, quelle ligne de code de la sub pose problème, quelle erreur se produit (exemple A : ça me donne 20 au lieu de 50 ; exemple B : ça fait une soustraction au lieu d'une somme ; exemple C : ça fait une division par 0 ; et chaque fois que possible : quelle donnée ? sur quelle feuille et quelle plage de cellules ?) ; c'est une erreur de compilation ? une erreur d'exécution ? ou une erreur de logique ? (numéro de l'erreur, et texte exact du message d'erreur).
* j'ai ajouté les 5 salles manquantes (lignes 23 à 27).
ce sont les salles n° 21 à 25(avec des données fictives).
* bien sûr, après ajout, les remplaçants sont plus bas :
lignes 28 à 38(y compris la ligne d'en-têtes).
B) sur "Feuil2"
* le tableau "Profs" en B7:E32 est plein : grâce aux 5 salles ajoutées,
j'ai pu étendre les formules jusqu'en ligne 32.
* n'oublie pas que tu peux faire varier les données de J2 et J3 ; fais
plusieurs vérifs pour les Profs et les Remplaçants.
* pour les noms des profs ou des remplaçants, j'ai mis une largeur
de colonne de 18 ; ça devrait être suffisant pour les vrais noms de
ton fichier réel.
* regarde les colonnes L à R ; "Nb S" est le nombre de séances.
formule en N4 : =NB.SI(Feuil1!$B$3:$AE$27;L4)
formule en R4 : =NB.SI(Feuil1!$B$29:$AE$38;P4) (ces 2 formules sont déjà étendues jusqu'en ligne 180)
* tu avais choisi la bonne fonction : c'est bien NB.SI() !
* la ligne de début est bien la ligne 3(pour la salle n° 01).
* la ligne de fin n'est pas 26, car pour la dernière salle :
c'était la ligne 22(salle n° 20)avant ajout des 5 salles ;
c'est devenu la ligne 27(salle n° 25)après ajout.
* pour les remplaçants, c'est des lignes 29 à 38 :
lignes des salles n° 01 à 10(ligne d'en-têtes exclue).
code VBA (30 lignes) ; attention : y'a eu des petites modifs !
VB:
Option Explicit
'NomProf : Nom d'un Prof (exemple : 91, 93, ou 113)
' NS : numéro salle : 1 à 20 ; pas plus, car en Feuil1,
' de A3 à A22, ça va de 01 à 20 ; dessous, il manque
' 21 à 25, et y'a pas de place sous la ligne 22 !
' JR : jour = 1 à 5 pour lundi à vendredi ; c'est en J2
' MS : matin ou soir (c'est la donnée qui est en J3)
' NP : n° du prof ou surveillant (1 à 3)
Function NomProf(NS As Byte, JR As Byte, MS$, NP As Byte) As String
Dim lig As Byte, col As Byte: lig = NS + 2
col = (JR - 1) * 6 - 3 * (MS = "soir") + NP + 1
NomProf = Cells(Worksheets("Feuil1").Cells(lig, col) + 2, "M")
End Function
'NomRemp : Nom d'un Remplaçant (exemple : 65, 80, ou 87)
' NS : numéro salle : 1 à 10
' JR : jour = 1 à 5 pour lundi à vendredi ; c'est en J2
' MS : matin ou soir (c'est la donnée qui est en J3)
' NR : n° du remplaçant (1 à 3)
Function NomRemp(NS As Byte, JR As Byte, MS$, NR As Byte) As String
Dim lig As Byte, col As Byte: lig = NS + 28
col = (JR - 1) * 6 - 3 * (MS = "soir") + NR + 1
NomRemp = Cells(Worksheets("Feuil1").Cells(lig, col) + 2, "Q")
End Function
* j'ai ajouté les 5 salles manquantes (lignes 23 à 27).
ce sont les salles n° 21 à 25(avec des données fictives).
* bien sûr, après ajout, les remplaçants sont plus bas :
lignes 28 à 38(y compris la ligne d'en-têtes).
B) sur "Feuil2"
* le tableau "Profs" en B7:E32 est plein : grâce aux 5 salles ajoutées,
j'ai pu étendre les formules jusqu'en ligne 32.
* n'oublie pas que tu peux faire varier les données de J2 et J3 ; fais
plusieurs vérifs pour les Profs et les Remplaçants.
* pour les noms des profs ou des remplaçants, j'ai mis une largeur
de colonne de 18 ; ça devrait être suffisant pour les vrais noms de
ton fichier réel.
* regarde les colonnes L à R ; "Nb S" est le nombre de séances.
formule en N4 : =NB.SI(Feuil1!$B$3:$AE$27;L4)
formule en R4 : =NB.SI(Feuil1!$B$29:$AE$38;P4) (ces 2 formules sont déjà étendues jusqu'en ligne 180)
* tu avais choisi la bonne fonction : c'est bien NB.SI() !
* la ligne de début est bien la ligne 3(pour la salle n° 01).
* la ligne de fin n'est pas 26, car pour la dernière salle :
c'était la ligne 22(salle n° 20)avant ajout des 5 salles ;
c'est devenu la ligne 27(salle n° 25)après ajout.
* pour les remplaçants, c'est des lignes 29 à 38 :
lignes des salles n° 01 à 10(ligne d'en-têtes exclue).
code VBA (30 lignes) ; attention : y'a eu des petites modifs !
VB:
Option Explicit
'NomProf : Nom d'un Prof (exemple : 91, 93, ou 113)
' NS : numéro salle : 1 à 20 ; pas plus, car en Feuil1,
' de A3 à A22, ça va de 01 à 20 ; dessous, il manque
' 21 à 25, et y'a pas de place sous la ligne 22 !
' JR : jour = 1 à 5 pour lundi à vendredi ; c'est en J2
' MS : matin ou soir (c'est la donnée qui est en J3)
' NP : n° du prof ou surveillant (1 à 3)
Function NomProf(NS As Byte, JR As Byte, MS$, NP As Byte) As String
Dim lig As Byte, col As Byte: lig = NS + 2
col = (JR - 1) * 6 - 3 * (MS = "soir") + NP + 1
NomProf = Cells(Worksheets("Feuil1").Cells(lig, col) + 2, "M")
End Function
'NomRemp : Nom d'un Remplaçant (exemple : 65, 80, ou 87)
' NS : numéro salle : 1 à 10
' JR : jour = 1 à 5 pour lundi à vendredi ; c'est en J2
' MS : matin ou soir (c'est la donnée qui est en J3)
' NR : n° du remplaçant (1 à 3)
Function NomRemp(NS As Byte, JR As Byte, MS$, NR As Byte) As String
Dim lig As Byte, col As Byte: lig = NS + 28
col = (JR - 1) * 6 - 3 * (MS = "soir") + NR + 1
NomRemp = Cells(Worksheets("Feuil1").Cells(lig, col) + 2, "Q")
End Function
« suivant le nombre de séances Nb S, la distribution est inégale(c'est injuste) ;
peut-être : GenerateUniqueRandom ActiveSheet »
sinon, explique mieux ; en particulier « la distribution n'est pas normale » ; est-ce que c'est bien le mot « distribution » ? en quoi cette distribution n'est pas normale ? il faudrait que tu donnes un exemple chiffré ! exemple : sur la feuille "X", en B2:F20, il y a ces nombres ; ça ne va pas : je voudrais ces autres nombres.
moi, j'suis pas très calé en statistiques ➯ c'est plutôt toi qui peut trouver une solution ! je pense que je ne pourrai pas t'aider là-dessus ; mais de toutes façons, ce sujet fait déjà 2 pages ; il faudrait vraiment que tu crées un autre sujet !
« suivant le nombre de séances Nb S, la distribution est inégale(c'est injuste) ;
peut-être : GenerateUniqueRandom ActiveSheet »
sinon, explique mieux ; en particulier « la distribution n'est pas normale » ; est-ce que c'est bien le mot « distribution » ? en quoi cette distribution n'est pas normale ? il faudrait que tu donnes un exemple chiffré ! exemple : sur la feuille "X", en B2:F20, il y a ces nombres ; ça ne va pas : je voudrais ces autres nombres.
moi, j'suis pas très calé en statistiques ➯ c'est plutôt toi qui peut trouver une solution ! je pense que je ne pourrai pas t'aider là-dessus ; mais de toutes façons, ce sujet fait déjà 2 pages ; il faudrait vraiment que tu crées un autre sujet !
bonjour
comme tu a compris
peut-être : GenerateUniqueRandom ActiveSheet
chaque profs surveille des salles pendant cinq jour ,donc le total combien de salle a surveiller en appel nombre de sciences