Remplir une liste selon les choix 1 2 3
je cantinu pour la comprehension :
dans
'Les noms sont mis en ordre aléatoire
Sheets(Listing).Select (selectionner la feuille "Listing")
Randomize (Mélanger)
LnDerNom = Range("D" & Rows.Count).End(xlUp).Row (derniére ligne Nom = pas sur du tout de mon interpretation, je pense à : la derniere ligne où il y a un nom d'inscrit et la prise en compte des cellules de la même ligne)
For i = PremLn To LnDerNom (Pour i = Premiere ligne à la derniere ligne où il y a une nom d'inscrit ?)
Cells(i, 6).Value = i - 2 (Cellule i, 6 c'est à dire la F (pas sur de moi) et Value = i - 2 equivaut à la D3 soit i, 4 non ?)
Cells(i, 7).Value = Rnd() (Cellule i, 7 c'est à dire la G est pour les "codes" pour l'odre aléatoire)
Allez je fais une petite pause. A plus tard.
NomChoix (x,y) tableau à deux dimensions c'est à dire x=ligne y= colonne
est-ce bien cela?
désolée, je te bombarde de questions.....
Re bonjour
Une réponse à tes questions.
Que signifie : Application.ScreenUpdating = False
C'est une instruction qui permet de ne pas mettre à jour l'écran après chaque instruction.
Si on ne la met pas, cela peut être amusant : on voit alors, par exemple un tableau se remplir. Mais l'exécution est un peu plus longue.
Une variable de type tableau, comme NomChoix() ne peut s'utiliser que si on a défini ses dimensions, c'est à dire le nombre maximal que peuvent prendre les variables x et y quand on va affecter des données à NomChoix(x,y)
ReDim NomChoix(x,y) définit ces dimensions.
x sera le nombre de lignes du tableau qui contient de la plages des noms
y sera le nombre de colonnes de cette plage
Range"D" & Rows.Count) donne l'adresse de la dernière cellule de la colonne D, à l'extrême bas de la feuille Excel : D1048576
Range"D" & Rows.Count).End(xlup) donne l'adresse de la cellule non vide sur laquelle on arrive lorsque l'on fait "Ctrl + flêche vers le haut" à partir de cette cellule, c'est à dire la cellule qui contient le dernier nom du listing.
Range"D" & Rows.Count).End(xlup).row donne le n° de la ligne de ce nom
Range"D" & Rows.Count).End(xlup).row -3 donne le nombre de lignes que j'aurai à prendre en compte car la première valeur de x sera zéro,et non pas 1 (ce serait trop simple !)
Pour y même chose on va prendre les données des valeurs qui sont dans 15 colonnes et on prendra les valeurs de y = 0 à y = 14
LnDerNom = Range("D" & Rows.Count).End(xlUp).Row
Si tu as compris l'explication donnée plus haut pour x, LnDerNom donne le numéro de la ligne où l'on arrive quand, partant de D1048576 on fait "Ctrl + flêche vers le haut" c'est à dire sur la cellule qui contient le dernier nom de la liste de la feuille listing
For i = PremLn To LnDerNom
Cells(i, 6).Value = i - 2
Cells(i, 7).Value = Rnd()
Next iLà, tu vas trop vite.
La première instruction dit que la macro va faire une boucle en donnant à i la valeur PremLn ,en exécutant les instructions suivantes jusaqu'à l'instruction Next i. A ce moment-là, elle donne à i la valeur i +1 et revient à l'instruction For i = ... où elle regarde si i + 1 est egal à LnDerNom.
Si non elle recommence jusqu'à ce que i soit plus grand que LnDerNom auquel cas elle reprend son travail en exécutant les instruction qui sont après Next i
La valeur de PremLn n'est pas la même si on lance la macro à partir du bouton bleu que si on la lance à partir du bouton marron.
Dans le premier cas la macro commence à "Sub Répartion_MAT()" où on définit que PremLn = 3. On prend tous les noms du listing en compte.
Dans le 2° cas, la macro part de " Sub MiseAjour() " où elle définit PremLn comme étant le n° de la ligne de la cellule sélectionnée et qui est censée être la cellule du premier nom ajouté à la liste des noms dont on ne veut pas modifier la répartition déjà faite.
Cells(i, 6).Value = i - 2Quand la boucle commence, dans le 1er cas, i = 3
cells(3,6). value = 3 - 2 = 1
La cellule (ligne 3, colonne 6) prend la valeur 1
Au second tour de la boucle, i = 2 et on aura
la cellule (ligne 4, colonne 6) prendra la valeur 2 etc...
Cela permet de numéroter l'ordre initial des lignes car on va ensuite les mélanger pour leur donner un ordre aléatoire.
Cells(i, 7).Value = Rnd() C'est un peu pareil sauf que ici on met dans la colonne 7 une valeur aléatoire donnée par la fonction Rnd()
J'espère avoir été clair mais n'ens suis pas sûr...
Je reste à ta disposition
Bye
dans ma question sur :
ReDim NomChoix(Range"D" & Rows.Count).End(xlup).Row - 3, 14)
tu dis :
Une variable de type tableau, comme NomChoix() ..................le n° de la ligne de ce nom (jusqu'ici je comprend lentement mais je te suis)
Range"D" & Rows.Count).End(xlup).row -3 donne le nombre de lignes que j'aurai à prendre en compte car la première valeur de x sera zéro,et non pas 1 (ce serait trop simple !) là aussi ca va je suis
par contre là, je me pose une question sur le comptage des cellules ; tu dis :
Pour y même chose on va prendre les données des valeurs qui sont dans 15 colonnes et on prendra les valeurs de y = 0 à y = 14
mais lorsque je compte les colonnes à partir de D je compte 16 colonnes donc cela devraait faire y=0 à y=15 non ?
Toutes tes explications sont claires, j'ai pris le temps de les lire et de regarder leur correspondance, ça fait beaucoup à retenir mais j'ai compris la signification de cette partie de la macro, je vais continuer à l'étudier dans tous ses recoins, surtout si je t'en demande trop n'hésite pas, je trouve cela très intéressant.
Pour y même chose on va prendre les données des valeurs qui sont dans 15 colonnes et on prendra les valeurs de y = 0 à y = 14
mais lorsque je compte les colonnes à partir de D je compte 16 colonnes donc cela devraait faire y=0 à y=15 non ?
Réponse :
réponse :
On ne part pas de la colonne D mais de la C puisqu'on a besoin du nom de l'institutrice.
Ensuite, il y a deux colonnes dont on n'a pas besoin de stocker les données, la F et la G
Il y a donc 15 colonnes dont on veut repérer les données.
Ce que l'on fait à chaque tour de boucle :
For i = 3 To LnDerNom
NomChoix(i - 3, 0) = Cells(i, 3).Value 'instit
NomChoix(i - 3, 1) = Cells(i, 4).Value 'Nom
NomChoix(i - 3, 2) = Cells(i, 5).Value 'Prénom
...
Next iAu premier tour, i = 3. et à la 1ère instruction de la boucle :
NomChoix(i - 3, 0) = Cells(i, 3).Value en remplaçant i par 3 :
NomChoix(3 - 3, 0) = Cells(3, 3).Value ' c'est le nom de l'institutrice
Donc la valeur de la cellule (ligne 3 colonne3) passe dans la variable NomChoix(0,0)
A la 2° instruction :
NomChoix(i - 3, 1) = Cells(i, 4).Value en remplaçant :
NomChoix3- 3, 1) = Cells(3, 4).Value c'est le nom qui passe ainsi de la cellule C3 à
NomChoix(0,1) prend la valeur du nom
et ainsi de suite.
A noter qu'on saute Cells(i, 6) et cells(i, 7).value dont on n'a pas besoin et on finit par
NomChoix(0,14) = cells(3,19) qui est le 3° choix du vendredi pour la première ligne c'est à dire pour le premier nom.
Au deuxième tour, i vaudra 2 et il en sera de même pour la ligne du 2° nom....
OK ?
Je change de sujet :
Tu m'envoies des messages par le forum et d'autres par courrier privé. Or, ils n'arrivent pas dans l'ordre chronologique. Mes réponses ne le sont donc pas toujours non plus.
Avec mes excuses.
Bye
Bonjour Guy,
Tout cela est intéressant pour Ce classeur.
ça m’intéresse d'apprendre toutes ces possibilités, avant je vais voir ce qui est prioritaire pour le projet actuel, pour travailler cela en premier et me mettre un annotation pour tout ce que j'aimerai apprendre.
Ces jours ci, un peu over bookée mais je vais m'y pencher au plus tard ce week end si je ne peut pas le faire avant.
A très vite.
Re bonjour, (Je t'ai envoyé le msg de ta boite privé avant celui ci (pour la chronologie, lol))
N°1,
je souhaite dans l'onglet listing pouvoir taper les premiers chiffres dans la liste deroulante et que le choix apparaisse dans la case, je ne parviens pas à le faire.
N°1
J aimerai dans "listing" pouvoir taper le debut des choix et que ca me propose ce qui correspond du lundi au vendredi.
ex je tape en premier choix du premier nom 456 et ça note le reste selon la liste deroulante. est ce possible ?
N°2 Est il possible de ne pas limiter dans "repartition" le nombre de personne ""ne participe pas"" ?
N°3 j'ai modifié le nombre de colonne dans chaque jours de la répartition, et je me retrouve avec le même probléme pour mes insatisfaits, ils sont décalés.... rhooo je n'arrive vraiment pas à voir d'où cela vient dans la macro....
N°4 Dans la macro
'On classe les lignes selon les nbre aléatoires croissants
Worksheets(Listing).Sort.SortFields.Clear 'feuille d'excercice (listing) effacer ? quoi?
Worksheets(Listing).Sort.SortFields.Add Key:=Range("G" & PremLn), _ 'feuille d'exercice (listing) la macro met en ordre croissant la colonne "G"?
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 'aucune idée pour ça et pour la suite???
With Worksheets(Listing).Sort
.SetRange Range("A" & PremLn & ":S" & Range("C" & Rows.Count).End(xlUp).Row)
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Guy,
pour le N°3, j'ai trouvé, je m'étais trompée entre le nombre limité par activité et le le nombre de colonne par plage.
ci joint le classeur modifié pour le N°3
Et aussi désolée, je viens de m'apercevoir que je n'avais toujours pas joint le classeur tout à l'heure pour mes questions numerotées, alors le voici (etourdie que je suis)