Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

VBA Amélioration macro fichier association

david84

XLDnaute Barbatruc
Bonjour à tous,
J'ai fait il y a quelques temps un fichier permettant l'enregistrement et le suivi d'associations sportives : enregistrer les nouvelles associations, mise à jour de leur coordonnées (adresse, tel , mail,...) possibilité de les contacter par mail,...
Ce fichier a été fait à l'aide de formules et d'enregistrement de macros, auxquelles s'étaient ajoutées une ou deux macros faites par des personnes de ce forum (notamment JNP que je remercie au passage).
Il fonctionne correctement mais j'aimerai maintenant optimiser les codes afin de le rendre plus rapide et de nettoyer les codes des "sélect" et autres informations parasites dues à l'enregistreur de macro, et au besoin reformuler certaines parties de la macro afin de gagner en efficacité.
Pour ce faire et pour simplifier le travail, je voudrais traiter feuille par feuille et avancer au fur et à mesure.
Le but est que je comprenne la manière de faire pour pouvoir ensuite le faire moi-même (je vais le prendre comme des travaux pratiques afin de comprendre un peu plus le VBA).
Dans le fichier ci-joint, ne sont présentes que 3 feuilles :
- une feuille "création" permettant de créer une nouvelle fiche
- une feuille "BD" dans lesquelles les différentes associations sont regroupées
- une feuille "listes" contenant l'ensemble des listes mises à jour.

La macro que je vous demande de m'aider à traiter se trouve dans le module et permet d'enregistrer une fois tous les champs remplis la nouvelle fiche dans la feuille "BD" et de mettre à jour la feuille "listes" afin que les menus déroulants soient à jour.
J'ai bien sûr essayé de le faire moi-même mais il y a toujours quelque chose qui cloche. Je veux donc voir comment vous procéderiez et ne manquerai pas de vous questionner pour comprendre les procédures utilisées.

Je me tiens à votre disposition pour d'éventuelles précisions et vous remercie de votre collaboration.
Cordialement
 

Pièces jointes

  • fichier_NvelleFicheV2.zip
    65.3 KB · Affichages: 231
  • fichier_NvelleFicheV2.zip
    65.3 KB · Affichages: 234
  • fichier_NvelleFicheV2.zip
    65.3 KB · Affichages: 236
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : VBA Amélioration macro fichier association

Bonsoir

Je vois que vous y êtes venu finalement au Keypress

Je suis bien content.

PS: quand à m'habiller en fée, je ne dis pas non après avoir ingurgité moults boissons interdites à la vente aux moins de 16 ans.
 

JNP

XLDnaute Barbatruc
Re : VBA Amélioration macro fichier association

Re , Très très bon courage
 

david84

XLDnaute Barbatruc
Re : VBA Amélioration macro fichier association

Re
Donc une petite fonction RegExp...Et donc dans Association_Exit, plutôt que Association = Trim(Association), tu mets Association = Extractions(Association, " +", " "), le Trim étant incorporé
Franchement JN, c'est remarquable !
J'ai toutefois remarqué que tu dois placer cette procédure au début de la Sub Association_Exit pour que cela fonctionne correctement.

Concernant les autres Sub Association_KeyDown, KeyPress et KeyUp, je cherche à récupérer le focus suite au clic sur la boîte de dialogue. J'ai essayé différentes procédures, notamment en plaçant Association.SetFocus à la fin de KeyUp puisque l'aide d'Excel dit (je t'explique pour que tu puisses suivre mon raisonnement même si je suis à côté de la plaque)
Si une frappe de touche provoque le déplacement du focus d'un contrôle à un autre, l'événement KeyDown se déclenche pour le premier contrôle, alors que les événements KeyPress et KeyUp se déclenchent pour le second.
Il y est également dit
Une feuille ne peut avoir le focus que si elle n'a pas de contrôle ou si tous ses contrôles visibles sont désactivés.
Mais sans résultat.

Sans résultat, ça me parais bizarre, parce que ça a toujours marché pour moi. Par contre Replace ne remplace que chaque occurence de 2 espaces par un espace, donc s'il y en a 6 au départ, il en reste 3 ...
C'est exactement ce que je voulais dire !

Concernant Select Case, je regarde à nouveau tes explications et y reviendrai plus tard (je m'aperçois quand même que je galère avec la syntaxe des codes en général).
A+
 
Dernière édition:

JNP

XLDnaute Barbatruc
Re : VBA Amélioration macro fichier association

Re , Bon courage et à +
 

JNP

XLDnaute Barbatruc
Associations Omnisports

Re ,
Tu as dit que tu allais bientôt voir ton collègue utilisateur, sachant que la gestion des Omnisports va remettre en cause un peu ou beaucoup de la structure de l'USF, c'est le moment de se poser les bonnes questions .
Il faut définir quel est le cas de figure (il sera difficile de gérer les 2 sans faire une usine à gaz, déjà que nous avons bien complexifié depuis le départ ) qui convient à ton collègue.
1) Il peut y avoir plusieurs disciplines dans une association, mais tous les autres renseignements sont identiques (Tél., mail, etc.). A ce moment là, on peut utiliser le séparateur ";", par exemple, et gérer une ListBox qui va nous permettre de cocher la (les) discipline(s) liée(s) à l'association. L'avantage est que les modifications (changement de mail par ex.) seront valables pour toutes les disciplines de l'association.
2) Les mails, par ex., sont différents suivant les disciplines, et là, il va être très difficile de gérer une seule fiche par association... A ce moment-là, on peut éventuellement générer un compteur d'occurences de l'association, pour pouvoir tester les doublons, et choisir une ou l'autre des occurences. L'inconvénient est que s'il y a 10 disciplines par ex., il va falloir changer l'adresse 10 fois. D'autre part, on ne pourra pas interdire automatiquement les doublons.
Bonne réflexion
 

david84

XLDnaute Barbatruc
Re : VBA Amélioration macro fichier association

Re
Concernant le focus, pour l'instant ce n'est pas important, juste une remarque.
Concernant la gestion des omnisport et des ASPTT, j'ai remarqué dans la BD qu'en fait, il enregistrait l'asso dans la discipline "omnisport" ou "ASPTT", et qu'il enregistrait la section dans la discipline concernée en y rajoutant le nom de la discipline avec le mot "section".
Ex :
CLUB SPORTIF PERTUISIEN enregistrée dans "OMNISPORT"
CLUB SPORTIF PERTUISIEN SECTION BASKET enregistrée dans "BASKET"
CLUB SPORTIF PERTUISIEN SECTION GYMNASTIQUE enregistrée dans "GYMNASTIQUE"

Ce qui fait que la BD les considère en fait comme des asso différentes.
Concernant les renseignements de la fiche, seuls les N° d'agrément et les N° SIRET sont quoi qu'il en soit identiques, le reste pouvant varier (ce qui est la plupart du temps le cas), mais comme la recherche ne s'effectue pas par N° d'agrément ou N° SIRET, cela n'a que peu d'importance (dans ma version "formules", lorsque ces 2 N° existaient plusieurs fois dans la BD, cela était signalé à titre d'info dans la cellule de droite).

Donc en résumé, comme le nom de l'asso est différent, je ne pense pas que cela puisse créer de conflit et à partir du moment où l'asso est choisie, que ce soit directement, en 2ème position (Disc=>asso ou commune=>asso) ou en 3ème position (Disc=>commune=>asso ou commune=>disc=>asso), les autre éléments de la fiche s'affichent (et c'est le cas actuellement).

En fait, je pense que c'est plutôt un bon moyen de faire mais si tu as une autre idée, fais m'en part.
Ceci-dit je lui en parlerai la semaine prochaine.
A+
 

david84

XLDnaute Barbatruc
Re : VBA Amélioration macro fichier association

Bonjour JN, bonjour à tous,
Après avoir vu le collègue, ci-joint la dernière mise à jour de la BD.
Comme nouveauté :
- extension du cadrage de la saisie à d'autres textbox (je retoucherai en conséquence les sub "créer" et "modifier" lorsque tout sera définitivement arrêtée mais pour l'instant cela n'influe pas sur le bon fonctionnement des macros)
- tri de la BD à l'activation de la feuille BD
- possibilité d'envoyer un mail à l'adresse de la fiche activée.
Concernant cette dernière possibilité, j'ai pour l'instant placé un bouton de commande mais la procédure peut être revue en fonction de ce que le collègue préfère.
Concernant les questions que tu m'as posées dans ton dernier message, les réponses apportées dans mon dernier message sont toujours d'actualité.

Concernant le ruban personnalisé, j'ai à nouveau regardé les fichiers de Jean-Bernard mais je pense qu'il faudra voir cela à la fin (mais peut-être me trompe-je ?).
Dis-moi ce que tu en penses et indique-moi la prochaine étape !
A+
 

Pièces jointes

  • Test_BD_JNP_13_10.zip
    191.7 KB · Affichages: 112

JNP

XLDnaute Barbatruc
Re : VBA Amélioration macro fichier association

Bonjour à tous, salut David ,
Dire qu'au départ, on voulait simplifier le code, et maintenant, y a une paire de lignes dans l'USF ... Mais bon, on a aussi des masques de validation plus performant (je pense) que les validations des cellules de départ, des recherches sympatiques, etc. .
Je ne sais pas pourquoi tu n'as pas supprimer la Feuil1, elle n'a plus d'intérêt maintenant .
A partir du moment où les noms d'associations seraient complètées par la discipline quand c'est de l'omnisport, je pense qu'il y a 2 choses à faire :
1) Ne plus griser Créer et vérifier à la place (avec Find dans Créer_Click) si le nom de l'association existe déjà.
2) Prévoir un nouvel USF de consutation avec une ListBox pour charger la liste des associations Omnisports. Le plus simple serait depuis le premier USF de charger l'association de base et avec un petit clic doit sur l'association, d'ouvrir le 2ème USF qui listerait les disciplines de cette association .
D'autre part, tu pourrais t'attaquer aux mails multiples. Je verrais ça sous la forme d'un USF avec juste Discipline et Association. Un grand TextBox en dessous, et un grand Label à côté. Niveau bouton : Ajouter, OK et Annuler.
Si tu choisis juste une discipline, on ajoute tous les mails, si tu choisis une association, on ajoute que ce mail-là. Le TextBox permet de visualiser les mails sélectionnés, et éventuellement d'en ajouter à la main, ou d'en ôter. Le Label permet de visualiser toutes les adresses qui se sont additionnées. Il serait bien d'ailleurs à chaque addition de faire un passage "anti doublons" .
Après, j'ai vu ton code pour un envoi de mail simple, mais je serais plutôt partisan de gérer tout le mail par OutLook. Ça permettrait de faire des mails multiples pour éviter les contrôles anti spam (20 adresses par mail, par exemple), d'utiliser CCi, etc. Il suffirait de faire un 3ème USF avec Objet, Message, Pièces à joindre, et hop-là ...
A +
 

david84

XLDnaute Barbatruc
Re : VBA Amélioration macro fichier association

Re
Je ne sais pas pourquoi tu n'as pas supprimer la Feuil1, elle n'a plus d'intérêt maintenant
c'est un simple oubli (je m'en étais servi pour tester la macro Tri placée à l'activation de la feuille BD et j'ai oublié de la supprimer ).

Les asso n'ont plus le même nom (si l'on cherche par "omnisport" on trouvera le nom de l'asso (ex : CLUB SPORTIF PERTUISIEN), si l'on sélectionne une discipline comportant une section d'une asso omnisport, on tombera sur l'asso comportant le nom de de la section (CLUB SPORTIF PERTUISIEN SECTION BASKET enregistrée dans "BASKET").

L'intérêt est donc, lorsqu'une asso omnisport est sélectionnée, d'avoir pour info (et au besoin sélection) l'ensemble des sections de l'asso en question... sommes-nous d'accord ?

D'autre part, tu pourrais t'attaquer aux mails multiples. Je verrais ça sous la forme d'un USF avec juste Discipline et Association. Un grand TextBox en dessous, et un grand Label à côté. Niveau bouton : Ajouter, OK et Annuler.
je rajouterai "commune" car cela peut servir de pouvoir contacter uniquement les assos d'une commune (pour les avertir d'une réunion sur leur secteur géographique par ex). Est-ce que la macro prévue à cet effet dans mon fichier initial peut être utilisée où tu vois cela autrement ? Mais bon, là pour l'instant, je n'y connais rien. Je vais donc commencer par le point 1 et voir si j'y arrive (au moins te proposer un début de solution). Confirme-moi quand même si nous sommes d'accord avant que je m'y mette
A+
 

JNP

XLDnaute Barbatruc
Re : VBA Amélioration macro fichier association

Re , A +
 

JNP

XLDnaute Barbatruc
Re : VBA Amélioration macro fichier association

Re ,
Un petit fichier valant mieux qu'un long discours, en PJ, une ébauche de la sélection des mails (j'ai uniquement fait pour Discipline ).
Tu lance l'USF, tu choisis AAA (y a des mails dedans), tu fais Ajouter .
A +
PS : Reste plutôt en XLSM, de toute façon, les macros ne tournent pas pour 2003, et par contre, ça passe sans zipper (je déteste les ZIP ) sur le forum
 

Pièces jointes

  • Test_BD_Mail.xlsm
    144.4 KB · Affichages: 107
  • Test_BD_Mail.xlsm
    144.4 KB · Affichages: 112
  • Test_BD_Mail.xlsm
    144.4 KB · Affichages: 110

david84

XLDnaute Barbatruc
Re : VBA Amélioration macro fichier association

Re
Pour les asso omnisport, plutôt que de partir sur l'appel d'un nouveau USF,
je pensais plutôt rester dans le même USF et inclure une nouvelle combo qui n'apparaîtrait que lorsque "omnisport" serait sélectionnée dans la discipline.
J'ai donc créé la combo et placé la propriété visible sur false et rajouté en début de sub Discipline_Exit
Code:
If Discipline.Text = "OMNISPORT" Then Omnisport.Visible = True
Cela fonctionne.
Bon, c'était juste pour tester
Je pensais ensuite charger les asso correspondant à l'asso choisie et faire apparaître l'ensemble de la fiche une fois la section sélectionnée.
Qu'en penses-tu ?
Pour les mails, j'ai compris l'idée de base et vais regarder plus attentivement les macros. Mais bon, commençons par régler le cas des omnisports : alors on reste sur le même USF comme expliqué ci-dessus ou cela présente-t-il des inconvénients et il vaut mieux un autre USF indépendant ?
A+
 

JNP

XLDnaute Barbatruc
Re : VBA Amélioration macro fichier association

Re ,
Le poblème du ComboBox, c'est qu'il n'est pas multi choix (à moins qu'il y ait une propriété que je ne connaisse pas ), donc choisir une assoc Omnisport pour choisir ensuite une des discipline, je ne suis pas sûr que ça présente un intérêt, mais bon, à voir... Par contre, une ListBox (comme dans mon exemple pour les mails) permet une multi sélections. On peut donc considérer qu'il est plus intéressant d'utiliser une ListBox. On peut aussi la rendre invisible, mais elle va prendre une certaine place laissée libre pour elle dans l'USF... D'où ma propo de 2 USF ...
Mais on peut afficher les 2 ensemble, jette un oeil à la propriété ShowModal des USF .
C'est plus à la fréquence d'utilisation des Omnisports qu'il faut se référer pour savoir si ça vaut le coup de se compliquer la vie, ou de simplifier au maximum .
Bon courage
 

david84

XLDnaute Barbatruc
Re : VBA Amélioration macro fichier association

Re
Le poblème du ComboBox, c'est qu'il n'est pas multi choix
Ok, je n'avais pas saisi que c'était cette particularité qui t'intéressait...
C'est plus à la fréquence d'utilisation des Omnisports qu'il faut se référer pour savoir si ça vaut le coup de se compliquer la vie, ou de simplifier au maximum
Tout à fait : la fréquence d'utilisation des omnisports est négligeable, je pense, donc partons sur une ListBox avec sélection multiple.
Bon, je m'y essaie
A+
 

david84

XLDnaute Barbatruc
Re : VBA Amélioration macro fichier association

Re
Bon, résultat pas brillant pour l'instant : j'ai créé l'USF Sections qui s'ouvre lorsque "omnisport " est sélectionné et "asso" est non vide mais ensuite je bloque.
Ce que j'essaie ensuite de faire :
a- dans la textBox "association", à l'exit,charger les asso ayant le même nom que le nom de l'asso sélectionnée (en se servant de Find ?)
b- dans la texBox "ListSections"de l'usf "gestion asso", faire apparaître cette liste des assos ayant le même nom;
c- lorsque je sélectionne l'un des noms, les renseignements apparaissent dans les champs à gauche.
Bon déjà, est-ce que la démarche est OK ou je pars dans une mauvaise direction ?
Ensuite, quand j'essaie d'utiliser Find, je bloque. L'enregistrement d'une macro en se servant de "rechercher et sélectionner" ne me donne pas d'indications particulière.

1) Ne plus griser Créer et vérifier à la place (avec Find dans Créer_Click) si le nom de l'association existe déjà.
Là, je n'ai pas compris quel était le but
J'ai essayé d'inclure dans Créer_Click
Code:
Set AChercher = Range("Tableau4[ASSOCIATIONS]").Find(Association.Text, lookat:=xlWhole)
mais cela n'a pas d'incidence.
Je te joins le fichier pour que tu puisses voir l'usf et me dire à quelle étape je coince, mais sans me donner la solution tout cuit:. (désolé mais même en .xml, je suis obligé de le zipper.
Ne fais pas attention à la feuille test, j'ai simplement testé par formules comment sélectionner les sections correspondantes à l'asso sélectionnée en Q1 pour essayer de comprendre (en formules, pas de soucis, mais bon cela ne m'a pas aidé à y arriver par VBA).
Bon de mon côté je vais continuer de rechercher du côté de find pour comprendre comment s'en servir.
A+
 

Pièces jointes

  • Test_BD_JNP_ListBox.zip
    242 KB · Affichages: 132
Dernière édition:

Discussions similaires

Réponses
7
Affichages
326
Réponses
13
Affichages
318
Réponses
1
Affichages
114
Compte Supprimé 979
C
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…