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:

JNP

XLDnaute Barbatruc
Re : VBA Amélioration macro fichier association

Re ,
Pourquoi vous, n'utilisez KeyPress pour formater la saisie dans txtbox ?
Bonne question ...
Je connais sans avoir pratiqué, fais nous une proposition .
PS : Si tu peux économiser du Pattern ICI, je suis preneur, et si tu arrives (dans un nombre raisonable de lignes de codes ) à passer autrement, je te tirerai mon chapeau .
Bonne soirée
 

david84

XLDnaute Barbatruc
Re : VBA Amélioration macro fichier association

Re

Merci JN, cela fonctionne.
03-83 n'est pas numérique, d'où ton problème...
Effectivement, j'ai réalisé après coup ! J'ai donc tenté de passer par un format particulier (du genre "if Tél1.value<>"00-00-00-00" je bloquais lamentablement.
Personnellement, je passerais déjà par une séparation d'évènement
c'est bizarre, je pensais que l'on pouvait inclure différentes conditions dans la même sub, mais j'ai l'impression que ce qui pose problème, c'est le type d'événement sélectionné (change, exit, after UpDate,...) qui entraîne des incompatibilités...
Là ok, je pense avoir compris :^(début de chaîne),(\d\d-){4}(4 fois 2 nombres de 0 à 9 appariés suivis d'un tiret),d\d$(2 nombres et signe de fin de chaîne), mais je n'aurais jamais été chercher un procédé comme celui-là car je pensais qu'il fallait "simplement" passer par un format particulier (comme celui dont tu t'es servi dans la Private Sub Modifier_Click() pour formater la date).
Juste une précision : pourquoi
Cancel = True
?

Function Teste(ATester As String, MonPattern As String, MonType As String) As Boolean
instructions
End Function
Cette fonction est appelée par la sub pour tester le "pattern" défini dans la sub ?
Le fait de passer par Exit te permet de ne vérifier qu'à la sortie du TextBox
Là, OK, j'ai commencé à voir les différents types d'événements proposés par la sub, mais je me mélange allègrement les pinceaux entre exit, before et after et Update, ....
A+
 

JNP

XLDnaute Barbatruc
Re : VBA Amélioration macro fichier association

Re ,
Change se produit à chaque touche frappée, donc il faudrait avoir un format reprenant toute la saisie...
Code:
"^(\d{0,2}-?){1,4}\d{0,2}$"
semble fonctionner dans
Code:
Private Sub Tél1_Change()
Dim Valeur As Byte
    'nb caractères maxi autorisé dans le textbox=14
    Tél1.MaxLength = 14
    Valeur = Len(Tél1)
    'séparer les paires de nombres par un tiret
    If Valeur = 2 Or Valeur = 5 Or Valeur = 8 Or Valeur = 11 Then Tél1 = Tél1 & "-"
    If Teste(Tél1.Value, "^(\d{0,2}-?){1,4}\d{0,2}$", "Unique") = False And Tél1 <> "" Then
    MsgBox Tél1.Value & " n'est pas une valeur valide.", vbExclamation, "Valeur non valide"
    Tél1.Value = ""
    End If
End Sub
en n'oubliant pas de supprimer Exit .
La proposition de JM peut être plus simple pour un tél., il me semble qu'il bloque le clavier si ce n'est pas un chiffre qui est saisi .
Cancel = True parce que Exit propose d'être annulée. Donc si la saisie n'est pas bonne, on efface et on passe Cancel à true, donc on reste dans la TextBox .
Et la fonction fait exactement ça. Dans le fil précité, j'ai mis un fichier Excel (que j'essaie de tenir à jour ) où il y a un certain nombre de masques interressants enrichie avec l'aide des autres forumeurs, comme N° de sécu, plaques d'immatriculation, date valide, etc ...
A +
 

david84

XLDnaute Barbatruc
Re : VBA Amélioration macro fichier association

Re, JNP, staple,

staple :
Pourquoi vous, n'utilisez KeyPress pour formater la saisie dans txtbox ?
Je vais regarder ce que c'est que l'événement KeyPress mais pour l'instant, c'est nébuleux donc si tu as le temps de m'expliquer quel serait son utilité (lorsque je rentre "keypress" dans l'aide d'excel, il ne trouve rien)...

JNP

je préfère la 1ère solution car elle prend déjà en compte un élément que je voulais rajouter : lorsqu'un numéro incomplet est rentrée (8 ou 9 chiffres au lieu de 10), la macro ne le considère pas comme un N° valide et la signale (mais c'est une condition que je ne t'avais pas signalée, donc tu ne pouvais la prendre en compte).

Concernant les RegExp et pour ma propre compréhension, est-ce que le résultat de
Code:
^(\d\d-){4}\d\d$
est similaire à
^(\d{2}-?){4}\d{2}$
?

Concernant le fichier, je vais tenter de continuer à trouver des codes permettant de "cadrer" la saisie des infos entrées dans l'USF comme cela cela m'obligera à me confronter à du langage VBA (je vais donc regarder RegExp de plus près). Sinon, veux-tu que je te récupère la liste complète des communes de Vaucluse et de leur code postal ? As-tu besoin d'autres infos ?
Me conseilles-tu autre chose à faire pour avancer de mon côté ?
A+
 
Dernière édition:

JNP

XLDnaute Barbatruc
Re : VBA Amélioration macro fichier association

A +
 

david84

XLDnaute Barbatruc
Re : VBA Amélioration macro fichier association

Re
concernant les N° de tel, ci-joint à tester un pattern devant remplir les conditions suivantes (en plus de celles déjà connues, longueur de la chaîne=14 et "-" de séparation) :
- le 1er nombre doit être un zéro
- le 2ème nombre peut être 1, 2, 3, 4, 5, 6, 8, 9
^(0((1)|(2)|(3)|(4)|(5)|(6)|(8)|(9))-)(\d\d-){3}\d\d$
J'ai fait quelques tests et cela semble fonctionner mais bon, il y a sûrement plus simple, mais c'est histoire de m'exercer !.

Ce serait bien de connaître la norme des N° d'agrément, et d'autre masques si nécessaire . Les CP, c'est bon, j'ai
Ok, je vais voir et tenter si je peux de te proposer quelque chose histoire de m'exercer.

Ce serait bien que tu analyses comment j'envoie la liste des Assocs suivant la discipline, pour envoyer cette même liste au choix d'une commune.
Tu veux dire que je tente d'adapter ce que tu as fait à la recherche de correspondance assoc-disciplines ?

Dans les saisies de texte, il serait bien de forcer les majuscules avec le Change ou l'Exit(UCase) .
J'y ai pensé. Je recherche et te tiens au courant.
A+
 

JNP

XLDnaute Barbatruc
Re : VBA Amélioration macro fichier association

A +
 

Staple1600

XLDnaute Barbatruc
Re : VBA Amélioration macro fichier association

Bonsoir Messieurs les améliorateurs

Monsieur David
Lien supprimé
Un exemple
Y a en d'autres
(Mais peu de temps ce soir, je te laisse le soin de chercher plus avant sur XLD)

Monsieur JNP:
Merci de servir la Cause du Grand Pattern
 

david84

XLDnaute Barbatruc
Re : VBA Amélioration macro fichier association

Re
Plus court .
Code:

^0[1-689]-(\d\d-){3}\d\d$

Si je suis les indications de ton fichier RegExp, également comme cela :
^0[^07]-(\d\d-){3}\d\d$

Concernant ta suggestion
Tu veux dire que je tente d'adapter ce que tu as fait à la recherche de correspondance assoc-disciplines ?
Exactement, c'est une bonne solution pour t'approprier le code
le problème principal sera sûrement de trouver une solution à la condition rappelée au #55 : auquel tu avais répondu dans le #57
On peux très bien utiliser ma fonction filtre en l'imbriquant.
Je vais tenter le coup (soit en regardant comment JB a fait, soit en arrivant à imbriquer les filtres) et je verrai bien où je bloque.
A+
 
Dernière édition:

JNP

XLDnaute Barbatruc
Re : VBA Amélioration macro fichier association

Re , A +
PS : Comme a dit Modeste, finalement, je me sens un peu "parrain", mais c'est une expérience agréable, et j'espère qu'elle t'enrichit
 

Staple1600

XLDnaute Barbatruc
Re : VBA Amélioration macro fichier association

Bonjour JNP, david84, skoobi, modeste, le fil, le forum

JNP
Rien que ton avatar est une invitation au parrainage

(bon faut encore que j'aille prendre ma douche)

PS1: rassures-moi ta passion pour RegExp te laisse encore du temps, pour prendre la tienne de douche
PS2: Que penses-tu de l'utilisation de l'événement Keypress couplé avec RegExp ?

Bonne journée à tous et bon week-end


PS3: Skoobi, JNP, vous n'avez pas l'air emballé par la nouvelle balise BBCODE implémentée récemment par DavidXLD, ou me trompe-je ?
(Je parle de celle que j'évoque dans ma signature )
 
Dernière édition:

JNP

XLDnaute Barbatruc
Re : VBA Amélioration macro fichier association

Re , Bonne journée
 

Staple1600

XLDnaute Barbatruc
Re : VBA Amélioration macro fichier association

Re

JNP: A partir du moment ou l'on fait l'effort d'utiliser une balise BBCODE
pour améliorer la lisibilité d'un message
celui qui veut tester le code fera l'effort de palier l'inconvénient du copier/coller
Tout du moins c'est comme cela que je l'entends

Quand a l'événement Keypress, il me paraissait plus approprié à utiliser que
l'événement Change d'un TextBox, voilà tout
(Mais peut-être me trompe-je )
 

Discussions similaires

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