Faire évoluer un tableau en fonction d'une liste déroulante
Bonjour,
C'est la première fois que je poste sur un forum alors soyez indulgents pour les oublis
Je vous explique mon problème:
Je souhaites créer un fichier pour suivre l'absentéisme.
J'ai donc créée un corp de tableau (que j'ai joint en version simplifiée). Je cherche un moyen (en VBA ou non) de faire évoluer une plage de cellules en fonction d'une sélection dans une liste déroulante.
La plage que je souhaites faire varier (encadrée en rouge dans la PJ) est une zone de saisie. Pour chaque mois, des informations (du texte) y seront entrées. Je souhaites que lorsque je change de mois ou d'année avec mes listes déroulantes, les infos dans ma plage ne soient plus visibles. Et qu'au moment ou je souhaites consulter les infos d'un mois éxpiré, elles soient accessibles.
J'espère avoir été assez clair dans mon message,
Merci d'avance!
Bonsoir,
le principe est le même que sur cette application :
https://www.excel-pratique.com/fr/logiciels/calendrier_pratique.php
En fait il vous faut une feuille de base de données où stocker toutes les informations de chaque mois de chaque année pour chaque personnel...
@ bientôt
LouReeD
Bonjour,
Tout d'abord, merci LouReed de ta réativité et de la qualité de ta réponse. J'ai survolé le fichier associé au lien que tu m'a donné et en terme de résultat c'est ce dont j'ai besoin
Après, la macro n'est pas accessible et je ne vois pas comment il est possible d'avoir ce résultat.
Tu me conseil d'avoir une feuille base de données pour stocker les infos saisies, ok la dessus. N'étant pas expert en VBA, je ne vois comment faire... Faut-il créer, dans la feuille BDD, une plage différente pour chaque mois de chaque année (qui sera "appelée" à chaque modificatin de la liste déroulante) ? y-à t'il un moyen de les créer en automatique ? Comment faire ça ?
En gros j'ai besoin d'une réponse un peu plus fine et éxpliquée.
A plus!
Lafteure...
Bonsoir,
on peut imaginer une feuille de données avec une colonne année, une colonne mois, une colonne jour, les quatre colonnes de matricules xx, matricules xx, nom, prénom, puis une colonne pour la valeur de la journée concernée.
Après au niveau du fonctionnement, on détecte le changement de l'année, ou du mois et en fonction on inscrit dans le tableau "récap" toutes les données qui correspondent à mois et année de la feuille BD.
Ce qui permet de réafficher les personnels qui sont partis et de ne pas mettre ceux qui n'était pas encore là lors de l'année et le mois choisi.
Il est vrai que le principe est simple, reste la programmation...
Si pour vous une explication plus fine c'est de recevoir une application "clef en main"...
@ bientôt
LouReeD
Bonsoir,
Je crois que la suggestion de LouReed est tout à fait pertinente !
Tu as prévu un planning destiné à la foir à la saisie et à l'affichage, mais tu n'as pas pensé au stockage des données (pour les réafficher, il faut les stocker).
Ce qu'il faut savoir d'abord, c'est quelles infos tu vas noter et sous quelles formes, de façon exhaustive...
Le cas échéant, une feuille annuelle (masquée) sur laquelle des emplacements mensuels seraient prédéfinis, pourrait stocker les informations du planning sous la même forme que la saisie.
Si la saisie et l'affichage se font sur une feuille commune, il est alors judicieux de prévoir à chaque modification d'affichage, comme à la fermeture du classeur, un enregistrement automatique sur la feuille annuelle de stockage.
Un dispositif de modification plus fluide (précédent - suivant par bouton-toupie) à côté des Combo, plus avantageux à utiliser pour des sauts plus importants dans le temps. (NB- des contrôles ActiveX me semblent préférables).
La modification d'affichage génèrerait le prélèvement des données et la mise à jour du calendrier.
L'année indique la feuille de stockage, le mois une zone dans la feuille, et si on peut stocker les informations telles qu'elles sont affichées dans le planning, le transfert des données dans un sens ou l'autre peut être global.
Il reste juste à ajouter un dispositif de création automatique de feuille annuelle lorsqu'on arrive à une année qui n'a encore aucune données, et on n'a plus à s'occuper de rien d'autre que saisir les infos et les retrouver en naviguant dans le calendrier.
Cordialement.
Bonsoir,
un fichier pour "illustrer" MFerrand :
On y voit les feuilles "années", et sur celles-ci les zone mois définies, toute avec un nombre de colonne = à 31 jours + nombre de colonne de définition du personnel + 1 colonne pour le mois soit dans votre exemple 36 colonnes.
Ceci pour trouver la colonne du mois de septembre facilement : ((9-1)x 36) +1 = 289 ième colonne.
Ou bien "nommé" la cellule mois et rechercher la colonne de cette cellule par Janvier.column.
C'est un choix de programmation, et le Maréchal en a certainement un autre... Le principe de fonctionnement d'une procédure est ce que chacun en fait en fonction de ses connaissance et de son "feeling"...
Bien sûr il n'y a pas de code...
@ bientôt
LouReeD
Super,
J'y vois plus clair
Je vais éssayer d'exploiter vos idées et vos conseils et je reviens vers vous si j'y arrive ! (si j'y arrive pas aussi d'ailleurs
Merci à vous deux LouReeD et MFerrand !
Bonjour et OK!
Voilà ma contribution, dont j'espère qu'elle pourra t'inspirer...
Je crois que j'ai pas mal trituré ton fichier et qu'il ne reste plus aucune de tes formules initiales, aussi bien sur la feuille qu'en MFC, et tes deux zones de listes déroulantes sont remplacées par un SpinButton... Mais j'ai conservé les couleurs !
Et aussi le démarrage à partir du 01/01/2016 (mais on peut étendre vers le passé si cela s'avérait utile ou nécessaire).
Le système de navigation calendaire à partir du SpinButton s'opère par formule. Par contre l'enregistrement et le rappel des données est réalisé au moyen de procédures VBA.
A l'ouverture, la valeur du SpinButton est initialisée pour afficher le mois en cours.
Les feuilles de stockage des données sont créées automatiquement et restent masquées. Je conseille de ne pas y toucher et surtout de n'y faire aucune mise en forme. Elles n'ont jamais besoin d'être vues, sauf exceptionnellement en cas de recherche de la source d'une erreur...
Je n'ai testé que sommairement la navigation, puisque pas de données... A toi de voir si cela répond à tes spécifications.
Cordialement.
Bonjour Lafteur, et bonjour MFerrand !
Dites moi, en ce moment ça y va les petits codes...
J'aurais cru que vous alliez faire les mois en colonne... en effet en ligne vous limitez le nombre de personnel à suivre.
Si j'ai bien compris le code, ce serait une centaine de personne, non ?
Si le décalage mensuel sur les feuilles annuelle était horizontal alors plus de limite de personnel, il suffirait de trouver la dernière ligne de la zone pour la recopie des données.
Sachez que je met ce code de coté (quand bien d'autre...) Il fait "beaucoup" de chose avec trois fois rien en ligne de codage !!!!
C'est tout l'inverse de mes codes !
J'ai encore à apprendre !
@ bientôt
LouReeD
Salut LouReed !
Si j'ai bien compris le code, ce serait une centaine de personne, non ?
Un petit tableau dans Données fait état de 37 personnes. Avec rotations... cela peut tourner à 50. Avec 100 lignes (99 en fait), on a une marge en principe suffisante ! Ceux qui apparaissent s'ajoutent mais ceux qui disparaissent n'ont aucune raison d'être maintenue.
Ce qui est mémorisé c'est le tableau entier, noms et matricules compris. Chaque mois peut donc être tout à fait indépendant. Se système permet une correspondant immédiate mois-ligne de stockage ; je conserve à la ligne au-dessus le nombre de ligne du tableau du mois, cela accélère le dimensionnement des plages transférées (dans les deux sens) et quand il n'y a encore rien on shunte plus rapidement l'opération de transfert.
Au niveau saisie, il pourra procéder par copie d'un mois sur l'autre des éléments répétés, ou éventuellement mettre en place des listes déroulantes (quoique je ne soie pas sûr qu'ici ce soit le mieux). Un autre dipositif pourrait mieux convenir : je n'ai pas compris pourquoi 2 colonnes de matricules (?), en principe il ne devrait y en avoir qu'un, ce qui laisserait une colonne pour des indications de mouvements en vue du mois suivant, on pourrait alors prévoir le lancement d'une procédure utilisant ces mentions pour initialiser chaque mois avec les matricules, noms... à partir du précédent.Il ne resterait qu'à ajouter les nouveaux... Ou peut-être même mieux une liste des personnels listés assortis d'une date d'apparition et d'une date au-delà de laquelle le nom disparaît, mise à jour indépendamment, et utilisée pour initialiser chaque mois, même a-posteriori.
Cela ne fait qu'une ou 2 proc. à ajouter : gestion liste (éventuellement) et init. mois, avec un bouton pour initialiser sur la feuille.
Cordialemetn.
Salut LouReeD et MrFerrand,
Tout d'abord merci à MrFerrand d'avoir "bossé pour moi" 8). Au niveau du résultat, c'est vraiment ce que je m'était imaginé. J'ai prit un peu de temps dans la journée d'hier pour essayer de comprendre ton code (car je suis une chèvre en VBA
En tout cas merci à vous deux vous m'avez bien dépanné et donné pas mal d'inspiration pour la suite ^^
C'est grâce à des sites comme Excel-pratique et à des gens comme vous que j'en apprend tous les jours !
PS: MrFerrand, si j'ai deux colonnes matricule, c'est parceque nous avons plusieurs types de matricules et certains "mec" ont l'un, l'autre, les deux ou apparaissent deux fois fonction des contrats. Voilà voilà.
Bonne continuation à vous deux!
De là à penser que les deux font la paire !!!!
Je plaisante, je suis vraiment un cran en dessous (voir plus !!!)
mais je sais que je suis comme même un peu au dessus de beaucoup !!!
@ bientôt
LouReeD
SalutSalut,
MrFerrand je reviens vers toi car j'ai cherché à comprendre ton code et j'ai quelques questions (ça te donnera une bonne idée de mon niveau en VBA ^^). Alors c'est partit :
- J'ai cherché sur internet mais je ne trouve pas l'utilité des "%" derrière tes variables quand tu les déclares?
- Je ne connais pas le terme exact. Mais les variables que tu nomme et qui ne sont donc pas systèmes ( Mois par exemple), pourquoi les mettre entre crochets?
- Dans ta procédure "spbMan_Change()", le Me.Calculate il sert à quoi ?
- Dans ta procédure "AffichMois()", pourquoi place tu un x en A6? C'est pour que ExtMois soit différent de 0?
En "jouant" avec ton fichier, le code s'est souvent arreté. Lorsque ça arrive, ça arrive toujours sur une ligne ou tu utilise ta variable Mois :
- Ca bug sur [Mois].Offset(1).ClearContents (Procédure AffichMois() ligne 21) quand je saisis de la donné puis que je change le mois.
- J'ai aussi eu des bug sur [Mois].Offset(,1).ClearContents (Procédure AffichMois() ligne 20), mais je n'arrive plus à le reproduire donc je ne sais pas te dire quand ça arrive.
- Et enfin des bugs sur [Mois].ClearContents (Procédure AffichMois() ligne 32), mais je n'arrive plus à le reproduire donc je ne sais pas te dire quand ça arrive.
- Comme j'avais beaucoup d'erreurs sur Mois, j'ai foutu un Msgbox à la ligne 19 pour voir la valeur de Mois. Et bah il m'affiche "Erreur 2023". pourquoi donc ?
En gros pour que je puisse adapter tes idées à mon fichier, peux tu me commenter ces quelques points ? (et d'autre si t'a la motiv et que tu anticipe une future question
MerciMerci !
Lafteure
Bonjour,
J'avais bien l'intention de commencer à te fournir quelques explications, avant de te le compléter (ou t'aider à le faire) par la mise en place d'une liste des personnels gérés destinée à alimenter tes 4 premières colonnes avec une procédure adéquate...
Par ailleurs, comme je l'avais dit je n'ai pas testé du tout le fonctionnement lors de la saisie de données : si tu peux me faire passer un classeur qui en contient, je pourrais m'attacher au débogage de cet ensemble.
Le temps de quelques tâches domestiques et voir mon courrier, j'attaque un premier lot d'explications.
Je débute par la partie calendaire, pour ne pas avoir à y revenir. Tu as au moins un certain nombre d'éléments, cela récapitulera.
Le SpinButton permet de faire varier la date, sa valeur mini est définie à 0 (et sa valeur max à 1000, ça laisse de la marge...!). Lorsqu'on l'actionne, on fait varier sa valeur, laquelle est récupérée dans une cellule liée, qui est A3.
On considère par convention que la valeur 0 correspond au 01/01/2016.
Chaque incrémentation d'une unité ajoute un mois : 1 correspondra donc au 01/02/2016, les valeurs de 0 à 11 couvrent donc les dates du 1er des mois de 2016, 12 à 23 la même chose pour 2017, etc.
On récupère cette date en B3 (affichée au format mois année) au moyen d'une formule en décalant la date origine du 01/01/2016 du nombre de mois indiqué par A3 : =MOIS.DECALER(DATE(2016;1;1);A3)
Les dates des colonnes E à AI sont calculées à partir de B3 (qui la date du 1er) avec la formule unique : =$B$3+COLONNE()-5
On élimine l'affichage des jours du mois suivant pour février et les mois de 30 jours par une MFC s'appliquant sur les 3 dernières colonnes.
De tes listes initiales, les listes de mois ou d'années ne servant plus, je les ai supprimées. La liste Fériés est évidemment maintenue et nommée Fériés. J'ai fusionné les MFC samedi et dimanche en un seule, et cette dernière et la MFC fériés incluent une condition pour ne pas s'appliquer sur les derniers jours s'ils ne font pas partie du mois (cela évite d'avoir à se préoccuper de l'ordre des MFC et mettre des conditions d'arrêt).
NB- un point de détail que tu auras peut-être noté : je n'utilise jamais JOURSEM avec le second paramètre 2 (1er jour de la semaine = lundi), car je considère s'agissant de cette fonction que c'est une source d'erreur potentielle et qu'il vaut mieux la laisser renvoyer la série 1 à 7 d'origine... JOURSEM est en effet utilisé dans beaucoup de formule comme correctif de date : on l'utilise alors conjointement avec MOD pour faire renvoyer une série de 0 à 6 en faisant en sorte que le 0 corresponde au jour de la semaine qui convient. Lorsque je fais : =MOD(JOURSEM(date);7), je renvoie 0 pour samedi, les autres jours inchangés, ainsi les valeurs inférieures à 2 correspondront aux samedis et dimanches...
Si je fais : =MOD(JOURSEM(date)+5;7), j'aurai une série 0 à 6 partant du lundi=0 au dimanche=6. Etc., les manipulations de la sorte sont innombrables.
C'est pourquoi, garder la série origine pour en générer d'autres évite à mon avis de s'emmêler les pinceaux...
Note bien que les éléments décrits ci-dessus, sont suffisants à eux seuls pour faire varier le calendrier.
Les éléments à voir ensuite ne servent pas pour le calendrier mais interviennent dans la gestion des données.
Merci de ton retour rapide
Alors je viens de re-faire mumuse en faisant un peu de saisie pour tester. Et finalement ton fichier est super fonctionnel. L'erreur que je t'ai remonté dans mon précédent post concernant la ligne 21 se déclenche seulement quand A6 est vide. Dans ton code est-il indispensable qu'A6 soit remplit ? (Je suppose que oui puisque tu lui donne la valeur x). Si néanmoins c'est possible de faire "sauter" ce problème ? Sinon j'inverserai simplement mes colonnes mattricule et nom prenom (car un matricule comme je te l'ai précisé dans un post antérieur peu être vide).
Pour toute tes précisions concernant la gestion du calendrier, j'avais déjà cerné ces points la mais les manips (surement dûe à ton expérience) sont notées!
J'attends ton prochain retour !
PS: Pour la saisie des infos j'ai aucun format type tu peux faire du "=ALEA()" ça ira très bien pour tester
@plus
Lafteure
Pour la suite, on a besoin de savoir quelle est l'année et quel est le mois dont on demande l'affichage.
Vu la série numérique établie pour définir une date (1er mois année) : 0-11 (2016), 12-23 (2017), 24-35 (2018)... on peut tirer du nombre en A3 (généré par l'action sur le SpinButton) l'année et le mois correspondant au moyen de formules simples :
=ENT(A3/12)+2016 fournit l'année en A1 [cellule nommée : AnAppel]
=MOD(A3;12)+1 fournit le mois en A2 [cellule nommée : MAppel]
Mais lorsque l'on agit sur le SpinButton pour modifier l'affichage calendrier, si l'on a des données, celles-ci correspondent alors au mois et à l'année antérieurement affichées, et il va falloir les enregistrer pour aller chercher les données du nouveau mois-année et la mettre à la place. Il faut donc conserver lors de la modification d'affichage, le mois et l'année en cours en ce qui concerne les données.
Ainsi on garde en D1 l'année en cours [cellule nommée Aec]
Et en D2 le mois en cours [cellule nommée Mec]
Pour ces valeurs, des formules sont naturellement inadéquates : lors d'un changement, une procédure d'enregistrement est lancée, ces deux valeurs permettent d'identifier l'emplacement des données à enregistrer, puis les valeurs année et mois appelés (en A1 et A2) permettent de définir l'emplacement des données à afficher. A l'issue de cette opération, les valeurs de D1 et D2 sont alignées sur A1 et A2...
Un autre élément est calculé en A4, au moyen d'une formule matricielle :
=MAX(SI(A6:AI60<>"";LIGNE(A6:AI60)-5;0))
qui renvoie l'extension vers le bas du tableau de données à partir de la ligne 6, soit le nombre de lignes de données.
(Si les données devaient s'étendre au-delà de la ligne 60, il conviendrait d'augmenter en conséquence le 60 de la formule. Jusqu'à 104, sans autre modification. Au-delà, le système serait à réviser car l'enregistrement de données est prévu pour ne pas dépasser 99 lignes par mois.)
Cette cellule est nommée : ExtMois.
La plage de données est également nommée : Mois. Elle couvre les 35 colonnes de A à AI à partir de la ligne 6. Elle est définie en dynamique (formule utilisant la fonction DECALER, mais qui dimensionne le nombre de lignes à partir de la valeur de A4 au lieu de le faire de la façon habituelle sur le nombre de lignes d'une colonne, éventuellement corrigé des valeurs n'appartenant pas à la plage.
A ce stade, je peux répondre de façon détaillée à quelques-unes de tes questions :
- Je ne connais pas le terme exact. Mais les variables que tu nomme et qui ne sont donc pas systèmes ( Mois par exemple), pourquoi les mettre entre crochets?
Il ne s'agit pas de variables mais de plages nommées, comme vu ci-dessus.
La notation entre crochets est ce qu'on appelle un écriture compacte des références.
[A1] va désigner la cellule A1... Pour ma part, si je ne l'utilise jamais avec des adresses de plage normales, estimant que cela risque de me masquer la non qualification éventuelle de la feuille à laquelle appartient la plage (et me faire chercher plus longtemps une source d'erreur...), je l'utilise par contre systématiquement avec des plages nommées. Dans ce cas pas d'ambiguïté, la plage est précisément définies sur un feuille précise, et cela me permet quand je reprend un code de savoir immédiatement qu'il s'agit d'une plage nommée (compte tenu de mon utilisation).
- Dans ta procédure "AffichMois()", pourquoi place tu un x en A6? C'est pour que ExtMois soit différent de 0?
Exactement !
- Dans ta procédure "spbMan_Change()", le Me.Calculate il sert à quoi ?
Le changement de valeur du SpinButton modifie la valeur de la cellule A3, ce qui entraînera les recalcul de la feuille, donc des cellules A1 et A2 notamment. La procédure Change du Spin lance les procédures d'enregistrement, puis d'affichage sur la base des nouvelles valeurs de A1 et A2. Sauf que le recalcul ne sera fait que lorsqu'Excel reprend la main après exécution de cette procédure et de celles qu'elle appelle ! Les valeurs de A1 et A2 ne seraient modifiées qu'après la bataille si on ne force pas le recalcul à se faire avant !
Je n'ai normalement prévu de mettre une valeur en A6 que lorsque c'était nécessaire, pour éviter une erreur. Si donc une erreur apparaît parce que la plage est non définie, c'est que j'aurais loupé un maillon quelque part...
Ce qui m'intrigue, c'est ta référence à la ligne 21 ? Je ne vois quel rôle particulier pourrait jouer cette ligne !
En fournissant les explications sur les procédures, je regarderai de plus près, voir si quelque chose apparaît...
- J'ai cherché sur internet mais je ne trouve pas l'utilité des "%" derrière tes variables quand tu les déclares?
Tu devrais toujours commencer par l'Aide... !
Dim i% est strictement équivalent à Dim i As Integer.
Le caractère % est ce qu'on appelle un caractère de déclaration de type, permettant de faire une déclaration sous une forme raccourcie. Cela permet de faire en sorte que les déclarations occupent moins de place et soient plus rapides à taper, surtout quand il y a de nombreuses variables (les variables devant être typées individuellement).
Il n'y en a (malheureusement) que pour quelques types courants de données :
% = As Integer
$ = As String
& = As Long
! = As Single
# = As Double
@ = As Currency
Procédures :
A l'ouverture du classeur, on s'assure que les feuilles de stockage annuelles sont masquées et on les masque s'il y a lieu (le nom est convertible en valeur numérique). On calcule ensuite la valeur que devrait avoir le SpinButton pour afficher le mois-année correspondant à la date du jour, et on lui affecte cette valeur.
Cela entraîne normalement le lancement de la procédure Change du Spin (on lui laisse donc faire s'il y a lieu l'affichage du mois calendaire en cours. (L'enregistrement se fera aussi, doublant celui qui a été fait lors de l'enregistrement du classeur...)
Tout le processus repose sur 3 procédures (de dimensions réduites) :
- Enregistrement des données éventuellement saisies sur une feuille de stockage annuelle, à un emplacement déterminé par le mois.
- Affichage de données existantes (éventuelles) trouvées sur la feuille correspondant à l'année, à l'emplacement prévu pour le mois demandé.
- Création d'une feuille annuelle, si elle n'existe pas encore pour le mois demandé.
Les deux premières sont lancées systématiquement à chaque changement. La 3e est lancée sur erreur lors de l'appel d'une feuille inexistante dans la procédure d'affichage.
La répartition des emplacements de mois sur la feuille annuelle est simple : on utilise 100 lignes par mois. Donc : 1-100 (Janvier), 101-200 (Février), ... 1101-1200 (Décembre).
La première ligne de chaque mois (1, 101, 201...) est utilisée pour conserver en A la valeur de ExtMois, soit le nombre de ligne de la plage mémorisée (ajustement des transfert au nombre de lignes effectif, et si valeur nulle c'est qu'il n'y a rien à transférer !)
On trouve facilement cette ligne par : (numéroMois - 1)*100 + 1
Pour la plage à transférer, elle débute à la ligne suivante (.... + 2) et est facilement dimensionnable (nb de lignes au-dessus, et 35 colonnes).
La procédure d'enregistrement procède donc en évaluant l'extension de la plage à enregistrer (valeur de ExtMois). Si cette valeur est supérieure à 0 (si 0 rien à enregistrer !), l'année lui indique la feuille où enregistrer, le mois lui indique l'emplacement où conserver le nombre de lignes et l'emplacement des données qu'elle dimensionne à la taille de la plage Mois pour y transférer les valeurs de Mois.
La procédure d'affichage est lancée ensuite, avec en arguments l'année et le mois appelés.
Et... Je crois bien que je vois un problème !!!! Je vais donc y regarder de plus près avant de continuer...
Fausse alerte ! Je ne vois pas d'erreur en repassant ligne par ligne...
D'abord le mois appelé lui permet de calculer la première ligne du mois cherché sur la feuille annuelle, et ExtMois lui fournit le nombre de ligne de la plage existante (qui a déjà été enregistrée sur sa feuille de stockage par la procédure précédente).
Elle traite d'abord l'existant : si Mois existe (ExtMois > 0), elle efface Mois en décalant d'une ligne pour que la plage continue d'être définie.
[NB-il y a 2 lignes d'effacement, la 1re est à supprimer (perfectionnisme inutile), la 2e suffit...]
Si ExtMois = 0, Mois n'existe pas, et c'est là qu'elle met une valeur en A6 pour que Mois soit défini (pour l'étape suivante).
L'étape suivante se passe sur la feuille annuelle où elle trouve l'étendue (en lignes) de la plage à affecter sur la ligne calculée en fonction du mois recherché.
Si cette valeur est supérieure à 0 : elle redimensionne la plage Mois en conséquence pour y affecter la plage enregistrée sur la feuille.
Si la valeur est 0 : elle efface Mois (soit la ligne qu'on avait conservée, ou la valeur mise en A6 à l'étape précédente.
Cas où la feuille n'existe pas : une erreur survient à son appel, on lance la création de la feuille, puis on revient sur la ligne d'erreur (qui ne sera donc plus en erreur) et on poursuit : on sera dans le cas où aucune plage n'est à affecter (rien n'ayant encore pu être stocké sur la feuille nouvellement créée).
Désolé !
Cordialement (et à suivre).
NB- Si une erreur s'est déclenchée à un moment sur la procédure d'affichage, cette dernière n'aura pas été au bout et n'aura donc pas redéfini les valeurs année et mois en cours, ce qui entraînera des erreurs en cascade à la suite... Seule la première est à identifier...
Bonsoir,
MFerrand, toujours aussi impressionnant !
Ceci dit, sur un projet totalement vierge, je trouve (et ne voyez pas là une critique mais juste un ...) dommage d'avoir ce genre de réflexion :
Un autre élément est calculé en A4, au moyen d'une formule matricielle :
=MAX(SI(A6:AI60<>"";LIGNE(A6:AI60)-5;0))
qui renvoie l'extension vers le bas du tableau de données à partir de la ligne 6, soit le nombre de lignes de données.
(Si les données devaient s'étendre au-delà de la ligne 60, il conviendrait d'augmenter en conséquence le 60 de la formule. Jusqu'à 104, sans autre modification. Au-delà, le système serait à réviser car l'enregistrement de données est prévu pour ne pas dépasser 99 lignes par mois.)
Cette cellule est nommée : ExtMois.
Si les enregistrement étaient fait en colonne, il n'y aurait plus de limite de ligne...
Imaginez ! Moi je gère 150 bonhommes !!! Comment je fais pour "profiter" de vos connaissances !!!
Ceci dit, beau boulot, bonne explications, et une bonne programmation commence souvent par un beau organigramme (ou un truc comme ça) qui permet de voir le tenants et les aboutissants...
Bravo à vous !
@ bientôt
LouReeD