Saisie de données avec formulaire dans des plages variables
Bonjours à tous
J'ai construit un formulaire pour saisir des données sur une feuille Excel mais j'ai une contrainte de zone de saisie sous laquelle il y aura d'autres données (en bleu dans le fichier joints). Il n'est pas possible d'insérer de nouvelles lignes.
Les données devront être disposées sous forme de deux tableaux à dimension variable. La position de l'entête du deuxième tableau et de son contenu dépendra du nbre de lignes occupées par le premier une fois rempli.
Pour mieux comprendre j'ai simulé le résultat sur la feuille excel.
Je voudrai pouvoir supprimer via le bouton "supprimer" une entée et réajuster les tableaux.
Peut etre que mon approche n'est pas bonne, je ne suis pas un expert en vba.
Je remercie toutes les personnes qui prendront le temps de se pencher sur mon fichier.
Cordialement GillesC25
Salut,
Tes explications sont tout à fait incompréhensibles. Tu parles de deux tableaux, mais j’en devine 6 (plage A1:G5 ; plage K1:Q5 ; plage U1:AA7 ; plage A20:F28 ; plage K20:P28 ; plage U20 :Z28). A quelle plage se trouve ton premier tableau ? A quelle plage se trouve ton deuxième tableau ?
N’as-tu vraiment que si peu de données sur ta feuille ? Il me semble que si je supprime une ligne dans la plage A2:F19, il ne reste plus rien. Un fichier exemple un peu trop minimaliste n’est parfois pas l’idéal.
Ensuite peux-tu me donner un exemple précis du déroulement d’une action que tu réalises et précisant ce qui va déjà, ce qui va de travers et ce que tu voudrais à la place. Comme dans mes exemples ci-dessus, fait référence aux objets Excel – noms des feuilles, références des cellules, numéros des lignes, noms des macros, désignations des formes, etc. - afin de décrire ton soucis.
N’indique pas d’instructions nous concernant dans ton fichier Excel ; on ne peut pas savoir si elles nous sont adressées ou si se sont tes propres notes, on doit les comparer avec tes indications sur ton fil. Reste sur ton fil uniquement pour tes éclaircissements.
A te relire.
bonjour Yvouille
Le seul tableau sur lequel je travaille est le tableau 1, le reste est juste des illustrations des résultats que je veux obtenir après différentes saisies.
Mon tableau 1 (A1:F19) a 2 plages de saisie : une zone orange (saisie du modèle), une zone blanche (saisie du support). il a un nombre de lignes totales fixe (1 à 19). Mais je voudrais que les 2 plages de saisie soient variables, c'est à dire que la plage de saisie (blanche) du support s'ajuste en fonction du nombre de lignes utilisées pour la plage orange (saisie du ou des modèles).
Objectif : pouvoir saisir un ou 2 modèles et de nombreux supports ou bien une dizaine de modèles et un ou 2 supports.
L'entête "modèle" est fixe à la ligne 1
L'entête "support" et les lignes saisies en dessous (les données concernant les supports) doivent pouvoir se déplacer d'une ligne vers le bas chaque fois que je veux entrer un modèle supplémentaire. Tout ça sans dépasser la limite inférieure du tableau, la ligne 19.
Je voudrais qu'un message d'alerte s'affiche lorsque le tableau est plein et qu'on ne peut plus saisir de données (aucune ligne dispo).
Je ne sais pas comment programmer les boutons supprimer pour obtenir des résultats inverses : si je supprime une ligne de saisie "modèle" toutes les lignes de la zone de support remonte d'un cran.
merci beaucoup pour ton aide, j'espère que mes explications sont plus claires ?
Ci-joint le fichier modifié.
GillesC25
Salut,
Je commence à y voir un peu plus clair, mais pour l’instant pas assez encore pour pouvoir te proposer un début de solution.
De ton côté, tu n’as pas lu ou pas mis en pratique certaines instructions que je t’ai fournies.
Yvouille a écrit :N’indique pas d’instructions nous concernant dans ton fichier Excel ; on ne peut pas savoir si elles nous sont adressées ou si se sont tes propres notes, on doit les comparer avec tes indications sur ton fil. Reste sur ton fil uniquement pour tes éclaircissements.
Malgré ma demande tu as quand même placé des instructions à mon attention dans ton fichier Excel. Dans le cas présent elles sont suffisament claires et peu nombreuses, ça passe, mais à éviter quand même, s’il te plait.
Yvouille a écrit :Ensuite peux-tu me donner un exemple précis du déroulement d’une action que tu réalises et précisant ce qui va déjà, ce qui va de travers et ce que tu voudrais à la place. Comme dans mes exemples ci-dessus, fait référence aux objets Excel – noms des feuilles, références des cellules, numéros des lignes, noms des macros, désignations des formes, etc. - afin de décrire ton soucis.
Tu ne m’as donné aucun exemple précis du déroulement de ton travail. J’aurais voulu un truc du genre : ‘Lorsque je clique sur le bouton ‘Saisir-Modifier’ en place, l’UserForm1 s’ouvre. Là je peux - dans la partie de gauche nommée ‘Modèle’ – choisir un modèle par le ComboBox1 dont l’intitulé est également ‘Modèle’. Après que j’ai choisi ce ‘Modèle’ – par exemple ‘fgddf’ - les choses se gâtent. Je voudrais avoir ceci-cela dans le TextBox3333, mais ça coince ».
Sur la base d’une telle explication, je peux reproduire ta saisie sans devoir faire 36'000 essais et voir pourquoi ça coince à cet endroit. Si je réussis à décoincer l’affaire, tu pourras voir jusqu’où tu peux alors avancer.
Sur la base de tes dernières indications, je voudrais encore que tu simules – si possible sur des feuilles séparées - un tableau final avec un ou 2 modèles et de nombreux supports et un autre avec une dizaine de modèles et un ou 2 supports. Enfin j’aimerais que tu simules encore un tableau sur une troisième feuille qui serait plein et pour lequel il faudrait que ton message « Le tableau est plein et on ne peut plus saisir de données (aucune ligne dispo). » s’affiche.
GillesC25 a écrit :Je ne sais pas comment programmer les boutons supprimer pour obtenir des résultats inverses : si je supprime une ligne de saisie "modèle" toutes les lignes de la zone de support remonte d'un cran.
Prenons un problème après l'autre, afin d'éviter de se mélanger les pinceaux
A te relire.
J'ai mis un peu de tps à me reconnecter désolé.
J'ai repris le fichier comme tu me l'avais suggéré et le l'ai refait.
L'emplacement de mon tableau est délibéré [N13:S29]; ce sera celui où il se trouvera au final ds une feuille de calcul. Toutes les cellules autour seront remplies de données. On ne peut donc insérer ni colonnes ni cellules.
La feuille finale servira de matrice pour des devis. Chaque feuille issue de cette matrice sera "enregistrée sous" un nom différent permettant de conserver cette matrice vierge.
Pour l'instant mon formulaire fonctionne en partie :
je peux renseigner les modèles de [N14:S21] (soit donc 8 modèles possibles) avec leurs caractéristiques ainsi que les supports de [N24:S29] (6 supports possibles).
Après avoir valider, je peux modifier les données en relançant le formulaire. Ce que je voulais.
J'ai besoin d'aide pour :
- Ce que je n'ai pas réussi à faire c'est supprimer un ou plusieurs modèles avec le bouton de commande du même nom (de même pour les supports).
- J'ai définis arbitrairement le nombre de modèles (à 8) et de supports (à 6). Mais un client pourrait très bien demander 14 modèles et seulement 2 supports (ou 2 modèles et 12 supports différents) et là mon tableau n'est plus fonctionnel. Y a t il une solution pour définir des zones de saisie variables et non plus fixe, cela suppose que la ligne d'entête pour les supports puisse se déplacer vers le haut ou le bas. Il faut que je conserve la possibilité de modifier après validation.
Je joints un nouveau fichier plus simple et sans commentaires pour faciliter la lecture comme tu me l'as conseillé (ce que je comprends).
Cordialement gillesC25
Re-bonjour,
Ne laisse pas trop de temps entre deux réponses. Pour moi qui ne suis pas tous les jours dans ton fichier, ça veut dire que je dois le réétudier à chaque fois depuis le départ au lieu de me souvenir de ce que j’ai vu la veille !!!!
Ton nouveau fichier m’apporte un ou deux renseignements de plus, mais, car il y a un mais :
Yvouille a écrit :Tu ne m’as donné aucun exemple précis du déroulement de ton travail. J’aurais voulu un truc du genre : ‘Lorsque je clique sur le bouton ‘Saisir-Modifier’ en place, l’UserForm1 s’ouvre. Là je peux - dans la partie de gauche nommée ‘Modèle’ – choisir un modèle par le ComboBox1 dont l’intitulé est également ‘Modèle’. Après que j’ai choisi ce ‘Modèle’ – par exemple ‘fgddf’ - les choses se gâtent. Je voudrais avoir ceci-cela dans le TextBox3333, mais ça coince ».
Ceci est très important car je n’ai pas envie d’essayer de simuler des données fictives afin de voir comment réagit ton fichier dans telles ou telles situations. Soit tu me fournis un fichier avec des données de base et tu m’indiques ce que tu réalises vraiment avec, ce qui fonctionne déjà et où ça coince, soit tu peux aller te faire cuire un œuf
Yvouille a écrit :Sur la base de tes dernières indications, je voudrais encore que tu simules – si possible sur des feuilles séparées - un tableau final avec un ou 2 modèles et de nombreux supports et un autre avec une dizaine de modèles et un ou 2 supports. Enfin j’aimerais que tu simules encore un tableau sur une troisième feuille qui serait plein et pour lequel il faudrait que ton message « Le tableau est plein et on ne peut plus saisir de données (aucune ligne dispo). » s’affiche.
Je ne vois les simulations demandées nulle part. Si tu ne réponds pas à tes demandes, pourquoi devrais-je répondre aux tiennes ? Mais si tu ne réponds pas à mes demandes et que je ne réponds pas aux tiennes, qui de nous deux est le plus embêté ? Ainsi posée, la question ne demande qu’à être répondue
Cordialement.
Je reprend depuis le début.
J'ai une feuille excel qui me sert à faire des devis ("matricedevis") et dans laquelle ce trouve la zone de saisie qui me pose des problèmes.
Quand je reçois une demande client j'ouvre cette feuille devis et je l'enregistre sous le nom client suivie du numéro de devis ex "Yvouille01".
Puis je travail sur cette feuille. (Je conserve ainsi une matrice vierge pour mes autres clients la feuille "matricedevis")
Le client définit lui même l'intitulé de ces modèles. Je dois les respecter car ils sont repris chez d'autres fournisseurs.
C'est pourquoi la combobox modèle ne contient aucune liste au départ.
Ex de demande :
Impression de " l’homme à la casquette" sur pvc blanc 5mm, format final 1200*2000, recto, 200ex.
Impression de " l'enfant aux jouets" sur carton 3mm, format 1400*2200,recto,100ex.
Pour rentrer ces donnée je lance le formulaire avec le bouton Saisie / Modifier et je renseigne les différents champs une première fois manuellement (voir résultat feuille2). Tans que le clients me demande pas plus de 8 modèles et 6 supports tout fonctionne bien. Après avoir reçu le devis le client peut exiger des modifs. Il me suffit de ré-ouvrir le fichier "Yvouille01" et avec le bouton "saisie/modifier" je relance le formulaire et cette fois ci les combobox et textbox sont déjà renseignées, je n'ai plus qu'a choisir le modèle parmis ceux proposés et rectifier la valeur que me demande le client ex: pour "l'enfant aux jouets " il préfère une impression recto=verso et seulement 50ex (résultat feuille3). Cela fonctionne très bien toujours dans la limite de 8 modèles et 6 supports. Le devis est alors bien plus vite établi puisque moins de saisie. (Résultat feuil4 et feuil5)
La feuil5 simule le max de données que je puisse saisir. Il faudrait une alarme quand j'ai atteins cette situation.
Si un client me demande un devis pour 14 modèles je dois établir au moins 2 devis (un avec 8 modèles et un second pour le reste des modèles voir un troisième si 17 modèles etc...). C'est ce que je voudrai évité.
Je voudrai donc que si un client demande un nombre de modèles au delà de 8, l'entête des supports et les lignes des supports soient donc recopiées vers le bas autant de fois que je rajoute de modèle avec pour limite la linge 29. (résultat que je voudrai obtenir Feuil6).
Ce que je n'ai pas réussi à faire c'est supprimer un ou plusieurs modèles avec le bouton de commande du même nom (de même pour les supports) quand j'ouvre le formulaire la seconde fois pour apporter des mofifs clients : je ne veux plus le modèle "femme avec bonnet" par ex.
J'espère avoir décrit correctement ce que je fait et ce que je voudrai obtenir.
Cordialement gillesC25
Salut,
Ta demande commence à devenir un peu plus claire. Je n’ai encore pas tout compris et je n’ai pas encore cherché de solution à ton problème car il y a quand même quelque chose que je voudrais te demander au préalable : ne vaudrait-il pas mieux repenser tout le problème et créer un nouveau fichier – ou en tout cas revoir une partie de ton fichier actuel – afin de permettre des saisies sans limites ? Pour l’instant je ne saisis pas l’intérêt de devoir créer deux devis si ta commande à une certaine importance.
Suivant ta réponse et car je n’ai pas toujours beaucoup de courage à m’investir dans un travail que je trouve bizarre, je me permettrai éventuellement de te dire que j’abandonne.
A te relire.
Re bonjours
je ne peux pas refaire le fichier initiale car de nombreuses données sont reprises dans un ERP, la seule partie qui m’est disponible est N13:S29. Il ne m'est donc pas possible de faire de la saisie sans limite. Par conséquence si le nombre de ligne que je doit remplir est supérieur à la zone disponible (trop de modèle ou trop de support), je suis obligé d'établir plusieurs fichiers. C’est pourquoi j'aurai voulu plus de souplesse de saisie dans cette zone et ne pas avoir deux blocs fixes un pour les modèles et un pour les supports comme c'est le cas pour le moment.
Cordialement gillesC25
Re,
Ton fichier ne me plait vraiment pas trop car il semble fait de bric et de broc et de plus il semble que tu le subis plus que tu ne le maîtrises.
GillesC25 a écrit :je ne peux pas refaire le fichier initiale car de nombreuses données sont reprises dans un ERP, la seule partie qui m’est disponible est N13:S29.
Selon moi, ce n’est pas vrai que tu ne peux pas le refaire, c’est simplement que tu as la trouille de t’y lancer.
Tes explications ne sont pas non plus très claires. Tu dis par exemple que tu ne peux pas avoir plus de 8 modèles et 6 supports et que la feuil5 simule le max de données que tu puisses saisir, mais sur la Feuil5, tu as 8 modèles et 5 supports seulement !! Qui croire ? Toi ou toi ? Si nécessaire, je peux te fournir d'autres exemples.
Je prétends aussi que tu sembles subir ton fichier plus que tu ne le maîtrises car je ne comprends pas ces lignes vides inutiles après les blocs ‘Modèle’ et ‘ID Support’ lorsque les blocs sont prétendument pleins. Selon ce que j’ai pu voir dans les macros, ces lignes vides 22 et 29 ne servent qu’à trouver les dernières lignes vides de chaque bloc – tes codes partent respectivement de ces lignes 22 et 29 et ‘remontent’ chercher la dernière ligne vide de ‘Modèle’ et ‘ID Support’ – mais c’est parfaitement inutile et ça bouffe deux lignes de données
Voilà, maintenant que j’ai bien ‘démoli’ ton fichier, je vais – un peu à contre cœur – tenter de t’aider à le remonter. Je dis un peu à contre cœur car je trouve toujours que tu ferais mieux de repartir sur des bases complétement nouvelles.
Dans le fichier ci-joint donc, tu as la possibilité de saisir des données ‘Modèle’ et/ou ‘ID Support’ et la ligne ‘ID Support’ – tout d’abord sur la ligne 28 – s’adapte aux circonstances. Je veux dire qu’elle remonte au fur et à mesure de tes saisies dans ce bloc. Lorsqu’il n’y a plus qu’une seule ligne de libre entre les blocs ‘Modèle’ et ‘ID Support’ – quelle que soit la position de la ligne ‘ID Support’ – un message t’informe que le tableau est plein.
Pour l’instant, ne te soucie pas trop de la mise en page (par exemple, lorsque tu saisis une ligne ‘ID Support’, le cadre du tableau est un peu bouffé) ; teste uniquement les fonctions de base, on verra ce qui doit être amélioré en finale.
Je ne me suis occupé pour l’instant que de la saisie de nouvelles données et non pas de leur modifications. Ne teste donc s’il te plait que cette partie.
Si effectivement ces lignes 22 et 29 vides sont inutiles pour toi – mais qu’elles pourraient être au contraire mises à profit - indique-le-moi et je verrai pour les utiliser également.
Lorsque cette partie du problème sera résolue, on pourra voir ce qu’il faut corriger de plus à ton fichier. Mais inutile de vouloir brûler les étapes, au risque de se mélanger les pinceaux.
Encore une chose : s’il arrive que l’un des deux blocs ‘Modèle’ et ‘ID Support’ soit inutile – je veux dire s’il arrive qu’un client ne commande que des ‘Modèles’ ou que des ‘ID Support’ – on pourrait très bien supprimer les intitulés de ces deux blocs à la base et ne les inscrire qu’au cas où ils seraient nécessaires. Ainsi, si par exemple un client ne commande aucun article devant apparaitre sous ‘ID Support’, il y aurait plus de place pour les articles ‘Modèles’.
A te relire.
Re bonjours,
j'ai testé le fichier que tu as modifié et je suis très satisfait du résultat. Je pense que malgré mes explications pas très clairs tu as saisi l'objectif que je voudrai atteindre et je te remercie bcp.
Selon moi, ce n’est pas vrai que tu ne peux pas le refaire, c’est simplement que tu as la trouille de t’y lancer.
Hélas non on m'a demandé explicitement de ne pas toucher au reste de la feuille de calcul.
Tes explications ne sont pas non plus très claires. Tu dis par exemple que tu ne peux pas avoir plus de 8 modèles et 6 supports et que la feuil5 simule le max de données que tu puisses saisir, mais sur la Feuil5, tu as 8 modèles et 5 supports seulement !! Qui croire ? Toi ou toi ? Si nécessaire, je peux te fournir d'autres exemples.
Effectivement c'est bien 8 modèles et 5 supports mais grâce à ta perspicacité avec les modifs que tu as apporté j'ai un éventail de possibilité bien plus important. C'est tout à fait ce que je voulais.
Je prétends aussi que tu sembles subir ton fichier plus que tu ne le maîtrises car je ne comprends pas ces lignes vides inutiles après les blocs ‘Modèle’ et ‘ID Support’ lorsque les blocs sont prétendument pleins. Selon ce que j’ai pu voir dans les macros, ces lignes vides 22 et 29 ne servent qu’à trouver les dernières lignes vides de chaque bloc – tes codes partent respectivement de ces lignes 22 et 29 et ‘remontent’ chercher la dernière ligne vide de ‘Modèle’ et ‘ID Support’ – mais c’est parfaitement inutile et ça bouffe deux lignes de données
Si effectivement ces lignes 22 et 29 vides sont inutiles pour toi – mais qu’elles pourraient être au contraire mises à profit - indique-le-moi et je verrai pour les utiliser également.
J"ai mis ces lignes vides uniquement pour que visuellement il y ait un séparation entre les blocs; mais tu a raison je devrais les utiliser pour des données.
Dans le fichier ci-joint donc, tu as la possibilité de saisir des données ‘Modèle’ et/ou ‘ID Support’ et la ligne ‘ID Support’ – tout d’abord sur la ligne 28 – s’adapte aux circonstances. Je veux dire qu’elle remonte au fur et à mesure de tes saisies dans ce bloc. Lorsqu’il n’y a plus qu’une seule ligne de libre entre les blocs ‘Modèle’ et ‘ID Support’ – quelle que soit la position de la ligne ‘ID Support’ – un message t’informe que le tableau est plein.
J'avoue que je n'avais pas pensé à cette solution, faire remonter la ligne "ID support" jusqu'à ce qu'elle rencontre le bloc "modèle" (celui -ci étant le premier renseigné). C'est bien pensé.
Pour l’instant, ne te soucie pas trop de la mise en page (par exemple, lorsque tu saisis une ligne ‘ID Support’, le cadre du tableau est un peu bouffé) ; teste uniquement les fonctions de base, on verra ce qui doit être amélioré en finale.
Le cadre du tableau n'a aucune importance, il était là uniquement pour délimiter l'espace qui m'était alloué dans la feuille de calcul final, donc on s'en fou.
on pourrait très bien supprimer les intitulés de ces deux blocs à la base et ne les inscrire qu’au cas où ils seraient nécessaires. Ainsi, si par exemple un client ne commande aucun article devant apparaitre sous ‘ID Support’, il y aurait plus de place pour les articles ‘Modèles’.
Pour une commande il y a toujours au min 1 modèle et au moins 1 support.
Cordialement gillesC25
Tant mieux si mon travail te convient
J'ai compris que tu n'attendais plus d'aide pour l'instant. Si j'ai mal compris, indique-moi ce qu'il manque.
Amicalement.
Re bonjours,
il me manque la possibilité de supprimer un modèle ou un support avec le bouton "supprimer", et faire en sorte qu'il n'y ait pas de ligne vierge après cette suppression.
Cordialement gillesC25
Re,
Dans le fichier ci-joint, j’ai modifié ton code de manière à ce que lorsque tu ouvres ton UserForm, les listes déroulantes des champs ‘Modèle’ et ‘ID Support’ soient correctement alimentées. Dans la version précédente, tu avais des données fantaisistes qui apparaissaient dans le champ ‘ID Support’ et si tu avais plus de ‘Modèle’ que ce qui était possible avant, ils n’apparaissaient pas tous dans la liste déroulante.
J’ai également placé des codes qui permettent de supprimer des données. Dans ces conditions, les listes des champs ‘Modèle’ et ‘ID Support’ sont réactualisés en continu (si tu supprimes une ligne, elle n’apparait plus dans la liste du champ correspondant).
Si nécessaire, on pourrait aussi réactualiser les listes après chaque saisie afin que tu puisses effacer immédiatement la dernière saisie, si elle était erronée.
A te relire.
Si nécessaire, on pourrait aussi réactualiser les listes après chaque saisie afin que tu puisses effacer immédiatement la dernière saisie, si elle était erronée.
C'est une très bonne idée. Je pense ensuite qu'avec tout ce que tu m'as développé je ne t’embêterais plus avec ce fichier, je te remercie bcp pour ton investissement. Heureusement qu'il existe des passionnés comme toi
Cordialement gillesC25
Re,
J’ai changé le nom que tu avais donné à notre fichier car il me semblait un peu prétentieux de mon point de vue
J’ai encore effectué la dernière modification proposée. Il y aurait certainement d’autres améliorations à apporter (tabulation dans un ordre logique lorsque le UserForm est ouvert, éventuellement effacement des données dans les différents champs lorsqu’un nouveau ‘Modèle’ ou un nouveau ‘ID Support’ est saisi, etc.) mais vu que je ne sais pas comment tu travailles et que tu sembles content avec ce que tu as, tant mieux pour toi.
Sinon à toi de dire ce que te plairait en plus. C'est quand même toi le client
Il a fallu te brusquer un peu au début, mais finalement nous nous sommes quand même bien compris, non ?
Cordialement.