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 :p...
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 :D) à passer autrement, je te tirerai mon chapeau :eek:.
Bonne soirée :cool:
 

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:confused:.
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...
Private Sub Tél1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Teste(Tél1.Value, "^(\d\d-){4}\d\d$", "Unique") = False And Tél1 <> "" Then
MsgBox Tél1.Value & " n'est pas une valeur valide.", vbExclamation, "Valeur non valide"
Tél1.Value = ""
Cancel = True
End If
End Sub
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à:rolleyes: 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, ...:p.
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 :rolleyes:.
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 :p.
Et la fonction fait exactement ça. Dans le fil précité, j'ai mis un fichier Excel (que j'essaie de tenir à jour :D) 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 + :cool:
 

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
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

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:eek:).

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

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:eek:).
L'un n'empêche pas l'autre, un contrôle pendant la saisie dans Change et un final à la sortie dans Exit (où juste le nombre de caractères suffit, Len = 1 ou 14) :p
Concernant les RegExp et pour ma propre compréhension, est-ce que le résultat de
Code:
^(\d\d-){4}\d\d$
est similaire à ?
Code:
^(\d{2}-?){4}\d{2}$
Non, le premier, c'est 00-00-00-00-00 et rien d'autre, le deuxième c'est 00(-)00(-)00(-)00(-)00, c'est à dire les tirets optionnels.
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 ?
Ce serait bien de connaître la norme des N° d'agrément, et d'autre masques si nécessaire :rolleyes:. Les CP, c'est bon, j'ai :D.
Me conseilles-tu autre chose à faire pour avancer de mon côté ?
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.
Dans les saisies de texte, il serait bien de forcer les majuscules avec le Change ou l'Exit(UCase) ;).
A + :cool:
 

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:D !:p.

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é:rolleyes:. Je recherche et te tiens au courant:).
A+
 

JNP

XLDnaute Barbatruc
Re : VBA Amélioration macro fichier association

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
Plus court :p.
Code:
^0[1-689]-(\d\d-){3}\d\d$

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 ;)
A + :cool:
 

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 :
Pour l'instant, je n'ai donc pas abordé les parties "modifier" et "supprimer" une fiche mais je voulais tout de même déjà attirer ton attention sur un point sur les listes déroulantes proposées dans la partie "modifier" : une fois la discipline sélectionnée, le collègue a la possibilité soit de sélectionner une association, puis la commune, soit de sélectionner une commune puis l'association. Cette procédure lui est très utile et je voulais attirer ton attention dessus au cas où tu dois inclure cette donnée dès maintenant dans la constitution des macros.
De mon côté, j'ai récupéré un code de JB permettant de faire cela. Je vais te placer le fichier sur le site dans la journée au cas où cela peut te servir.
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:rolleyes:.
A+
 
Dernière édition:

JNP

XLDnaute Barbatruc
Re : VBA Amélioration macro fichier association

Re :),
Si je suis les indications de ton fichier RegExp, également comme cela :
Code:
^0[^07]-(\d\d-){3}\d\d$
Et non, car le complémentaire à [07], c'est [1-689A-Za-z&çà] etc. :p.
Je sais, RegExp est assez complexe :D, mais tellement intéressant pour la gestion de String ;).
Mon dernier exemple en date ICI, et je pense qu'il est améliorable :eek:
Concernant ta suggestion
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
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:rolleyes:.
C'est surtout qu'il faut tester à l'Exit de la commune si Discipline est vide. Si oui, faire appel à Filtre et à Charge pour remplir les combos Discipline et Association :D
A + :cool:
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 :p
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 :),
PS1: rassures-moi ta passion pour RegExp te laisse encore du temps, pour prendre la tienne de douche :p
Oui, j'ai pas encore réussi à adapter RegExp pour celle-ci afin de faire des économies d'eau :D
PS2: Que penses-tu de l'utilisation de l'événement Keypress couplé avec RegExp ?
Je pensais que tu voulais limiter les ASCII à 45 et de 48 à 57 ;).
Couplé à RegExp, tu souhaites annuler la saisie, c'est ça ?
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 ;) )
Aux dernières nouvelles, David_XLD (pour ne pas mélanger avec David84 :p) n'avait pas résolu le problème de la perte des retours au copier/coller, ce qui était plutôt handicapant pour récupérer et tester un code :eek:... Je n'ai pas eu de nouvelles de David depuis ce post :(
Bonne journée :cool:
 

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
312
Réponses
13
Affichages
306
Réponses
1
Affichages
102
Compte Supprimé 979
C

Statistiques des forums

Discussions
312 069
Messages
2 085 041
Membres
102 764
dernier inscrit
nestu