VBA dates et recherche

Bonjour je decouvre le VBA donc pas trop fort mais j aime decouvrir et comprendre.

Mon travail me demande de faire un tableau mais avec des macro des fois je bloque.

j ai commencé mais la j arrive pas pouvez vous m'aider.

tableau avec une feuille . definition je trouve un probleme dans mon entrepot puis plus tard je doit le corriger

donc j ai creer une feuille releves ( date ? c bien mais pas genial, j aurais aime mettre une reference )

la ou je bloque c'est la page 2 sur mon formulaire

j aimerai rechercher la ligne pour modifier mais rajouter des dates, si cest corriger ect.....(ca va aller je pense à part les dates)

13regroupement1.xlsm (40.44 Ko)

Bonjour,

Des idées intéressantes, mais des éléments de réalisation générateurs de problèmes pour la suite...

Quelques remarques pour illustrer :

Sur la présentation et la mise en forme du code :

1) 7 modules dont 6 vides ! Ne pas laisser s'accumuler les éléments inutiles, donc 6 modules à supprimer.

Noter aussi qu'un seul module standard sera largement suffisant pour accueillir tout le code que tu auras à y placer et facilitera le travail. Il n'est envisageable d'en ajouter que si cela répond à une solide raison exigeant un module séparé pour certains éléments du code...

2) J'apprécie de lire du code lorsqu'il est présenté avec des procédures visuellement identifiables d'emblée : une ligne sautée entre chaque procédure mais aucune à l'intérieur des procédure, et lorsqu'il est parfaitement indenté : seule la déclaration de procédure à la marge (sans retrait) et éventuellement les étiquettes de branchement s'il y en a (que VBA met automatiquement à la marge) [aération qui facilite la lecture], et retraits distinguant les blocs d'instruction (et facilitant le repérage d'un certain nombre d'erreur). On lit ainsi le code en moyenne 4 fois plus vite que s'il est présenté plus ou moins n'importe comment et en l'interprétant correctement.

A titre personnel, j'apprécie aussi qu'il y ait très peu ou pas du tout de commentaires, dont l'utilité est très relative et qui tendent plus à parasiter la lecture qu'à la faciliter... Mais là à chacun de noter les commentaires qui lui paraissent indispensables pour mieux s'y retrouver (il me paraîtrait cependant judicieux de les faire disparaître lorsqu'ils ne s'avèrent plus vraiment indispensables).

3) Si les 2 points précédents sont formels (destinés à faciliter le travail mais sans incidence directe sur l'exécution), à partir d'ici ce n'est plus tout à fait le cas... Dans un module d'objet (module classeur, feuille ou userform), l'essentiel des procédures que l'on place sont des procédures d'évènements, de l'objet auquel est dédié le module ou des objets que ce dernier contient. Il est toujours préférable de laisser VBA inscrire et positionner les déclarations de procédures, en utilisant les listes déroulantes : à gauche sélection de l'objet, à droite sélection de l'évènement (sans oublier d'effacer les déclarations éventuelles de proc. par défaut que l'on n'utilisera pas).

Cela évitera d'avoir des procédures d'évènements non déclaré avec le mot-clé Private ou de voir une proc. INITIALIZE (au lieu de Initialize !), éléments toujours susceptibles d'engendrer des erreurs, et de nature à fausser la recherche d'indices visant à détecter la source d'une erreur.

4) Penser qu'il est toujours préférable de qualifier ses expressions (là ce n'est plus du tout formel) : Range("A" & z) est une expression non qualifiée, on invoque la propriété Range sans qualificateur d'objet, qui va donc se référer à l'objet Application, ce qui conduit VBA à rechercher l'élément actif de l'objet Application (Classeur, puis Feuille) auquel référer la plage recherchée... En qualifiant, VBA n'aura pas à le rechercher (donc sera plus rapide) et l'on est assuré de la précision du code si des développements ultérieurs venaient à modifier l'élément actif...

Sur le code utilisé :

5) La méthode AddItem pour alimenter des ComboBox, lorsqu'elle aboutit à de longues énumérations n'est sans doute pas la meilleure que l'on puisse utiliser !

Il y aurait au minimum lieu d'utiliser des boucles propres à raccourcir le code à une taille raisonnable.

Mais pour certains éléments, il est clair que des listes sur une feuille dédiée à cet usage seront préférables, elles seront aisées à mettre à jour s'il y a lieu, et la plage constituée peut être affectée à la propriété RowSource (bonne solution pour des listes non destinées à varier durant l'exécution, et qui réduit d'autant le code...)

6) Pour les dates, la solution consistant à séparer jour, mois et année n'est certainement pas une mauvaise solution... Cependant répercuter la date d'observation en 3 colonnes sur la base de données n'est pas ce qui conviendra le mieux pour la suite, une colonne date sera plus adéquate...

En outre dans la mesure où ce dispositif est maintenu, il conviendrait de lister les mois en minuscules et sans omettre les caractères accentués, de façon à être en conformité avec les paramètres régionaux FR (tels qu'il sont écrits, février, août et décembre ne seront pas reconnus...)

Ceci étant, dans la mesure où il s'agit d'une date d'observation, je procèderai pour ma part en l'initialisant à la date du jour, avec possibilité pour l'utilisateur de la modifier par glissement limité dans le temps (au moyen d'une ScrollBar si la période de glissement est relativement importante ou d'un SpinButton si elle est brève), ce qui facilite la prise en compte de la date à inscrire...

7) Autres détails : la déclaration d'une variable Ws de niveau module avec Dim n'en fait pas une variable publique ! En tout état de cause, elle n'a d'ailleurs pas besoin de l'être, mais le problème serait qu'elle est déclarée, mais non utilisée !

Une procédure Click d'un bouton BoutonModifier utilise une variable non déclarée... et appelle une procédure BoutonAjouter_Click, laquelle n'existe pas. Là ça devient un peu cafouilleux.

On peut noter aussi une procédure dans Feuil1, déclenchée par un bouton qui n'existe pas...

8 ) Dernière remarque : La base de donnée paraît relativement correcte (dans sa forme, pour le contenu c'est à toi d'en juger), hormis l'éclatement de la date... Peut-être, tu as évoqué la question, sera-t-il judicieux de prévoir un numéro d'ordre, lequel constituera si le besoin s'en fait sentir un identifiant unique...

Ce que je suggèrerai c'est, soit la nommer de façon dynamique (pour ma part je me contente généralement de nommer la première colonne (celle qui sera la première après révision), cela suffit à l'adressage, ou soit utiliser un tableau Excel qui offrira les mêmes avantages. L'utilisation d'un nom pour accéder à la Base dispense de se référer à la feuille qui la contient.

En espérant t'avoir aidé en soulevant ces interrogations qui demeurent partielles...

Cordialement.

Bonjour merci pour les conseils mais la il faudra m éclaircir avec le code . Car additionné une cellule pour la date je sais pas faire.

Dire que les items sont vide non ils sont remplis

Mon tableau est commencement mais marche

Je suis pas fortiche pour la présentation.

Je reprendrai chaque problème un par un avec tes conseils dans la soirée.

Merci encore peut m aider à la modification. Je trouve le problème j inscrit puis je reviens dessus en page 2 avec les colonnes i à ...

Comment je fais svp

Merci encore


Voici l 'avancement du fichier

1 nettoyage des modules

2 ajout du formulaire page 2 manque l 'association des 2

3 liste déroulantes je sais pas faire autrement

4 combox date je sais pas non plus

merci encore

Bonjour,

ça serait bien de savoir ce que tu comptes mettre dans les champs "Contacter" et "Réparer" : Ce sont des champs logiques (Oui/Non) ?

A+

Bonjour,

il faudra m éclaircir avec le code . Car additionné une cellule pour la date je sais pas faire.

J'ai parlé de date dans 2 aspects :

  • le remplacement des 3 colonnes jour/mois/année par une colonne date
  • et le dispositif de saisie de date (en userform, donc sans interaction à ce niveau avec une cellule) :
  • - avec un dispositif de saisie jour-mois-année la date se calculera au moyen de fonctions DateSerial ou DateValue...
  • - avec un dispositif basé sur la date du jour (celle-ci est fournie par la fonction Date), l'utilisateur va actionner un bouton qui va prendre une valeur représentant le nombre de jours à retrancher à la date du jour pour atteindre la date retenue : un affichage du résultat dans le Userform lui indiquera où il en est, et la date sera calculée à la fin par date du jour - x jours...

Dire que les items sont vide non ils sont remplis

Qu'entends-tu par là ? J'ai parlé de la méthode AddItem, mais nullement d'Items ?

galopin01 a écrit :

Bonjour,

ça serait bien de savoir ce que tu comptes mettre dans les champs "Contacter" et "Réparer" : Ce sont des champs logiques (Oui/Non) ?

A+

bonjour la reponse oui c ca

Contacter oui ou non l'entreprise

Reperer si la reparation a ete effectué oui ou non

merci bcp


MFerrand a écrit :

Bonjour,

il faudra m éclaircir avec le code . Car additionné une cellule pour la date je sais pas faire.

J'ai parlé de date dans 2 aspects :

  • le remplacement des 3 colonnes jour/mois/année par une colonne date
  • et le dispositif de saisie de date (en userform, donc sans interaction à ce niveau avec une cellule) :
  • - avec un dispositif de saisie jour-mois-année la date se calculera au moyen de fonctions DateSerial ou DateValue...
  • - avec un dispositif basé sur la date du jour (celle-ci est fournie par la fonction Date), l'utilisateur va actionner un bouton qui va prendre une valeur représentant le nombre de jours à retrancher à la date du jour pour atteindre la date retenue : un affichage du résultat dans le Userform lui indiquera où il en est, et la date sera calculée à la fin par date du jour - x jours...

Dire que les items sont vide non ils sont remplis

Qu'entends-tu par là ? J'ai parlé de la méthode AddItem, mais nullement d'Items ?

oui je sais faire que cela additem mon telephone as traduit

Bonjour merci de vos aide mais en fait je debute en vba je sais faire que cela c'est pour ca que je suis bloqué et au niveau de la date j ai fais cela car c plus facile pour moi et en presentation c'est bien mais ca aurait ete mieux avec la date complete a choisir c 'est sur mais sais pas faire.

15regroupementx.xlsm (44.72 Ko)

bonjour j aimerai relie la pasge 1 a la 2 en rajoutant les onglets de la 2 sur la feuille releves merci bcp

Bonsoir,

Avant de passer à la page 2 (dont pour l'instant je ne vois pas vraiment ce qu'elle apporterait de mieux... ! ) il me semble que de nombreux points sont à régler, et en particulier ce problème de dates : les éclater en 3 champs, c'est n'avoir aucun champ date, ce qui sera problématique et dysfonctionnel !

Dés lors qu'il faut dater, on ne peut se passer de dates, et donc on utilise des dates !!

Et ce qu'on ne sait pas faire, on l'apprend !

Je me posais la question de l'utilité de reprendre ta construction pas à pas, afin de décortiquer tour à tour et dans le détail chaque élément de la construction... mais le point de départ indispensable est la mise en place de la base de données de façon rationnelle, or là, d'un fichier à l'autre, on ne va pas vers une conception plus rationnelle, on s'en éloigne !

Cordialement.

Oui bien sûr mais c pas avec ce qu on me répond ici que je vais l apprendre...

Bonjour,

[Ferrand :]

Je suis un peu (beaucoup) de l'avis de Ferrand mais je le formule différemment...

Comme ton truc me paraissait bien compliqué, je suis parti sur des bases plus simples ! Enfin tout est relatif...

Voir ma production en pièce jointe.

Bon pour les commentaires on verras après : YAKA demander.

Au niveau de l'utilisation c'est assez intuitif... Au niveau de l'apprentissage, tu as peut-être intérêt à te réapprovisionner en Doliprane !

Mébon je suis pas radin en explications le cas échéant...

Euh... C'est pas exclu que trouves quelques bugs... J'ai pas mal ramé : Pas eu trop le temps de faire le ménage !

Bonne lecture, et surtout bonne utilisation éventuelle !

A+

Voila date corriger

Liste Principale longue corriger

Fonction recherche nickel

Par contre le bouton corriger beug

bonjour j ajoute un bouton c'est bon ensuite j essaye de corriger en ajoutant d autres combo puis encore un pour corriger

ce qui se passe

la ligne corriger s inscrit mais en decale vu qu'il prendre la derniere cellule vide

merci de me dire ou sa peche car la j ai un peu de mal a trouver


galopin01 a écrit :

Voir ma production en pièce jointe.

merci beaucoup je regarde , certe qu'il a raison mais que des conseils moi je cherche donc a comprendre merci bcp pour le fichier

1releves.xlsm (66.73 Ko)
6releves.xlsm (66.73 Ko)

amélioration Version VG1 :

En cas de saisie imprévue dans les combos (par exemple ajout d'un nouvel agent, pièce, équipement,entreprise) :

Met à jour la liste correspondante dans la feuille Prm et ajoute cette nouvelle référence à la liste.

A+

MERCI encore le fichier marche nickel , je vous ai envoyé message privé avec une modification mais j y arrive pas merci encore

je pense qu'il ai utilisable comme ca

Le fichier modifié avec inversion des colonnes.

Veuillez approuver cette modif.

J'ai répondu a votre mail et ajouté quelques commentaires...

Concernant les colonnes à rajouter. Tel et/ou Mail veuillez m'indiquer avec précision (image à l'appui si nécessaire) dans quel ordre les placer par rapport aux autres.

A+

A la demande de l'intéressé j'ai rajouté quelques champs (Tel et Email) avec les contrôles de saisie KIVONBIEN avec.

Rappel : L'intégration d'une validation des eMail nécessite d'activer

"Microsoft VBScript Regular Expression 5.5" dans le menu de VBA Outils > Références...

L'ensemble n'est peut-être pas exempt de bug car j'ai du travailler un peu la tête "dans le guidon" car le serais très peu disponible pendant une semaine. Sauf bug de dernière minute cela clôt pour moi la problématique du UserForm : Ceci illustre bien que même pour une petite base de donnée si on veut faire un produit un peu bétonné... Ça tombe pas du ciel tout seul. C'est pas tout de mettre 2, 3 combos et quelques TextBox, encore faut-il "pisser" pas mal de code si on veut obtenir quelque chose d'un peu fiable...

Nota : il est fait usage d'un petit ListBox d'aide qui peut permettre d'un clic de sélectionner quelques N° de téléphone ou emails fréquents.

Ces N° de Tel et ces e-mails ne sont pas actualisés au même titre que les autres champs de la feuille Param : C'est à l'utilisateur d'alimenter en tant que de besoin ces 2 listes de référence.

Nota : L'intéressé m'a signalé l'apparition d'un message "contenu partiellement illisible", mais qui ne semble pas bloquant : Parmi les personnes qui ont téléchargés les précédents fichiers quelqu'un d'autre a-t-il eu des messages identiques ?

A+

merci encore.

une question quand on selectionne email dans nous problemes le bouton confirmer et annuler disparraisse.

Je n'ai pas ce phénomène. Me rappeler cet après midi.

Allooooooooooooooooo ! Les gens :

Personne pour me dire si vous avez aussi un message de contenu illisible à la première ouverture ? (Excel 2010 requis)

Merci !

Salut Galopin ! Je t'ai entendu !

Belle réalisation ! Aucun problème...

Bye !

Rechercher des sujets similaires à "vba dates recherche"