Fichiers de Gestion

Bonjour tout le monde,

Je sollicite votre aide pour m’aider a résoudre mon problème:

En fait, dans le fichier ci-joint, quand je clique sur la macro (Saisie de la demande et de la réception du permis), j’aurai le Userform (Demande et réception) dans ce dernier j’aimerai bien avoir un code VBA pour la macro Rechercher de tel sorte que quand j’entre le numéro de permis ou le numéro de PO ou le numéro de FAT j’aurai automatiquement toutes les données dans toutes les cases du Userform (Demande et réception) et aussi j’aimerai que, si je fais des modifications sur les informations du UserForm j’aimerai que quand je clique sur la macro Modifier, avoir les modifications sur la feuille (BD_Inventaire des Permis).

Je reste à votre disposition pour toute autre question.

Merci d’avance.

Abdel551

Bonjour Abdel551

Consultes mon blog à cette page... tout y est.

https://cellulexcel.blogspot.fr/p/qui-na-pas-un-jour-utilise-loption.html

A te relire

Bonjour et1000lio

D’abord merci beaucoup pour le lien de votre Blogue que je trouve très intéressant et enrichissant pour les débutants en programmation VBA comme moi. Cependant j’ai essayé d’adapter des code à mes 2 macros Recherche et Modifier mais je n’ai pas réussi.

Je suis prêt toujours à redire les choses si ce n’est pas clair car j’aimerais vraiment finir ce fichier.

Merci pour votre aide

Abdel551

Bonsoir,

Puisque tu manques quelque peu de réponses, permets-moi quelques commentaires et conseils sur ton projet.

D'abord l'idée d'un formulaire (Userform) pour constituer ou modifier une base de données est généralement une idée intéressante dans la mesure où cela permet d'une part de faciliter la saisie, d'autre part d'introduire éventuellement des vérifications permettant d'éviter des erreurs. Cela implique, pour être cohérent que toute modification de la base passe par l'utilisation du Userform. Cela constitue globalement des projets assez classiques pour en trouver divers modèles, sachant que si l'on veut un résultat parfaitement adapté à l'utilisation qu'on en aura il est toujours préférable de le bâtir soi-même.

Ce qui ne devrait pas rebuter un "débutant en VBA" comme tu indiques l'être (à ne pas confondre avec un "chercheur de code VBA prêt à l'emploi sur Internet").

La conception du projet est assez simple : ton Userform doit te permettre 2 actions distinctes (que tu ne différencies pas au départ), Ajouter un enregistrement dans la base ou en Modifier un déjà existant (il faut donc pouvoir différencier ces 2 actions à l'ouverture du formulaire et ton bouton Modifier n'est d'aucun secours pour cela) ; le traitement consiste après ouverture à saisir ou modifier des donnée dans des TextBox ; puis à valider (ou annuler) l'opération (ton bouton Quitter peut faire office de bouton d'annulation, il y a un bouton Valider qui doit donc permettre la mise à jour de la base, et l'utilité des 2 autres paraît donc douteuse).

En regardant le code que tu as commencé à concocter on constate que tu procèdes à l'affectation des données directement à partir de la saisie dans les TextBox : çà, c'est une idée particulièrement mauvaise, d'une part les procédures vont se déclencher à chaque caractère que tu tapes, d'autre part tu ne pourras annuler...

Ensuite, j'ai noté que tu as 26 champs dans ta base, dont 4 calculés que tu ne saisis pas, reste 22 à saisir mais je n'ai compté que 21 TextBox... ?

A propos des contrôles, je conseillerais de les renommer pour s'y retrouver plus facilement (en utilisant un préfixe le cas échéant qui permet d'identifier le type de contrôle) et en utilisant un nom commun assorti d'un numéro d'ordre pour ceux que l'on est susceptible d'utiliser ensemble (ce qui permet d'éviter du code superflu en utilisant des boucles).

C'est le cas des TextBox en particulier, pour lesquels je différencierais 2 séries : ceux comportant des dates, nombreuses dans ta base (dont on sait que l'affectation peut toujours poser quelques problèmes, qu'on peut régler le plus souvent par une conversion en Date) et les autres. Cela casse l'adéquation des numéros d'ordre des TextBox avec les colonnes de la base (mais elle est déjà cassée par les champs calculés exclus). Et l'on peut utiliser une variable-tableau des numéros de colonnes à servir dans l'ordre de la série de TextBox pour pouvoir faire une boucle d'affectation...

Comme je l'ai dit au départ, tu as intérêt à distinguer les 2 actions dévolues au Userform : un des moyens les plus simples est des Cases d'Options, Ajouter (cochée par défaut à l'ouverture du TextBox), Modifier (en le cochant, cela déclencherait l'apparition d'un ComboBox, chargé avec un champ sur lequel tu peux rechercher l'enregistrement à modifier, dont la sélection lancerait l'alimentation des TextBox, sans oublier de stocker la ligne de l'enregistrement pour faciliter l'affectation après modif.)

J'ai aussi noté ton code actuel sur le bouton Valider : la méthode consistant à décharger le Userform pour le recharger et l'afficher vierge (qui semble jouir de certaines faveurs aujourd'hui) n'est pas de celles que je préconiserai ; certes, une procédure de réinitialisation est un peu plus longue à écrire mais offrira une gamme d'utilisation plus souple selon choix ultérieurs ; de plus, si tu le décharges pour le recharger, sans rien faire et l'afficher dans un second temps, il y a déjà une manoeuvre de trop ; enfin, ce qui fera gagner du temps d'exécution et du volume de code, c'est l'épuration de tout le code issu de l'enregistreur et bourré de Select et autres éléments inutiles (qui ne font que montrer que l'on ne comprend pas le code que l'on copie) ; enfin vouloir insérer les nouveaux enregistrements sur une ligne insérée en début de base est une possiblité utilisable mais qui va un peu te compliquer dans la mesure où ta ligne d'en-tête a un format spécifique et que toute ligne insérée prend le format de la ligne précédente...

En souhaitant que ces quelques éléments te soient utiles.

Cordialement

Bonjour MFerrand,

D’abord je vous remercie pour les conseils et les suggestions que vous m’avez donnés. Effectivement pour le fichier j’aurais souhaité le bâtir moi-même mais sincèrement je n’ai pas réussi à le faire et celà après plusieurs semaines de tentation sans atteindre les résultats voulus. C’est pour cette raison j’ai postulé mon problème sur le forum afin de m’aider.

Merci encore,

Abdel551

Bonjour,

Je conçois que tu puisses t'y perdre un peu. On va reprendre la démarche à partir des éléments figurant dans ton fichier...

Il y avait dualité potentielle entre la recherche amorcée sur Accueil et l'idée de rechercher à partir du Userform.

Pour la lever : recherche sur Accueil, à partir de cette recherche tu lances Userform en modification, hors recherche tu lances userform en nouvelle saisie...

Pour commencer un peu de nettoyage et de mises en concordances :

  • J'ai supprimé le tableau Excel pour revenir à une plage normale (je considère trop contraignants ces tableaux et une base de données a tout à gagner à être en "brut")
  • Tes colonnes dates en format date (éviter de mettre du format Texte, cela ne peut que poser des problèmes ultérieurement)
  • J'ai nommé 4 plages : bdDem correspondant à la colonne A de ta base (à partir ligne 3) en champ dynamique (prenant donc en compte l'extension de la base), bdPO, bdFAT, et bdPmis (colonnes correspondantes de ta base, par décalage de bdDem, qui permettront de mettre sous liste déroulante la sélection de l'enregistrement recherché, selon un de ces critères).

- Feuille Accueil : Mise sous liste déroulante des 3 critères. Attention, ces critères constituent des critères de recherche dans la mesure où ce sont des identifiants uniques d'un enregistrement (aucun doublon). L'un d'eux n'est pas dans ce cas (PO), donc inutilisable ; j'ai supposé que tu avais rempli la colonne par duplication pour faire du remplissage et qu'il s'agit bien d'un élément sans doublon. Si ce n'était pas le cas, il est à supprimer comme critère de recherche.

La recherche peut se faire sur l'un ou l'autre des critères qui sont alternatifs (on n'en utilise qu'un à la fois).

Une macro évènementielle intervient si tu sélectionnnes sur un critère, pour effacer les autres et les résultats d'une recherche antérieure (et mettre à 0 une variable publique enr [dans Module1] où est recueillie la ligne d'une enregistrement recherché).

  • J'ai réintroduis dans ta feuille Accueil les éléments manquants dans les résultats correspondants aux colonnes 1, 10, 11 et 17 de la base [sauf 2 donc correspondants aux colonnes 16 et 26].
  • Ajouté 2 boutons : Rechercher et Modifier.

- Un clic sur Rechercher, après sélection sur un critère, lance une procédure de recherche qui va afficher sur Accueil toutes les données servies de l'enregistrement, et enregistre la ligne dans la variable précitée.

  • Si l'on veut modifier, on clique sur Modifier : une procédure chargera le Userform, l'initialisera avec les données existantes (en utilisant la varaible pour positionner l'enregistrement), et l'ouvrira.
  • Le clic sur Saisie ouvre le Userform pour une nouvelle saisie (efface une recherche antérieure éventuelle, ce qui met la variable à 0).

- Dans le Userform, j'ai conservé les boutons Quitter et Valider (renommés en cbAnnul et cbValid), ajouté un TextBox manquant pour correspondre aux champs de la base (sauf champs calculés), renommé les TextBox en tb1 à 14 pour ceux contenant des données autres que dates, et tbd1 à 8 pour ceux contenant des dates.

IL ne manque plus que la procédure du bouton Valider (mise à jour de la base, fermeture Userform si modification ou demande à l'utilisateur si nouvelle saisie dans le cas d'une saisie, et selon réponse réinitialise ou ferme) pour boucler ce modèle de départ...

J'ai quelques affaires à traiter, je te laisse étudier ce qui est déjà prêt.

Cordialement

Version complétée.

La validation entraîne : mise à jour de la base, affichage de l'enregistrement sur Accueil, message indiquant que réalisée et si saisie nouvelle demande si autre saisie, déchargement du Userform ou réaffichage selon le cas.

Une seule vérification avant validation est faite : sur la date de demande (car c'est sur cette colonne qu'est définie la base). mais il y a certainement d'autres éléments obligatoires qu'il faudrait vérifier.

D'un côté les PO et FAT, qui servent de critères ensuite. Si les 2 manquent (de même que le n° de permis), enregistrement impossible à rechercher et modifier.

D'autre part il y a certainement des contrôles de cohérence à mettre en place.

Je te conseille, avant même de tester la saisie et les modifications, de rendre ta base fictive cohérente dans les données qui y sont inscrites, veiller à ce que dans les colonnes dates il n'y ait que des dates ou rien, etc. Et il serait bon que tu définisses la totalité des conditions nécessaires pour valider un enregistrement, de même que les données qui pourraient être incompatbles entre elles afin de contrôler leur saisie...

Bon courage.

Bonjour MFerrand,

J'aimerais vous remercier pour ce merveilleux service. C'est vraiment excellent. Aussi, merci d'avoir répondu aussi vite!

Pour le fichier, effectivement les numéros de PO sont tous diffèrent. Aussi j’aimerai bien vous signaler que les données de la partie réception des permis dans le Userform de saisie vont être saisie antérieurement c’est-à-dire dans un premier temps on fait la saisie de la demande et par la suite quand la réception sera faite nous allons compléter l’autre moitié réception. C’est pour cette raison je vous ai demandé une macro (modifier) qui va m’aider à compléter la partie réception.

Je voulais juste savoir est ce qu’il y a la possibilité d’avoir la couleur rouge dans les cellules D35 et G35 de la page d’accueil avec le signal date à échéance suite à la mise en forme conditionnelle que j’ai mis en place.

Je vous remercie énormément pour votre aide. C'est carrément de l'humanitaire pour les gens qui veulent résoudre des problèmes d’Excel ou apprendre Excel (comme moi). Sincèrement vous êtes un ange du Web. Longue vie à vous et à Excel-Pratique.

Merci pour Excel-Pratique, merci, merci.

Abdel551

Bonjour,

Je ne me suis pas spécialement penché sur tes MFC. S'agissant de la base de données, les MFC sont tout à fait inutiles...

Par contre, tu peux effectivement les mettre en place sur la feuille Accueil pour les cellules concernées.

Cordialement

Bonjour MFerrand,

Je voulais juste vous remercier pour votre aide précieuse et pour vous dire que l’outil fonctionne à merveille.

Sincères salutations,

Abdel551

Re-bonjour MFerrand,

Désolé pour le dérangement. En fait je viens de constater un petit problème, c’est que quand je rentre le numéro du FAT#2222 dans recherche je vois toutes les informations concernant ce numéro de FAT dans l’onglet Accueil. Cependant quand je clique sur modifier pour écrire le mot (oui) dans Alerte demande réglée le système me donne Erreur d’exécution 13.

Merci d’avance.

Abdel551

Bonne continuation.

Bonjour MFerrand,

Je vous remercie encore une fois.

Cordialement,

Abdel551

Rechercher des sujets similaires à "fichiers gestion"