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 :),
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:confused:.
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 ?)
Oui. Le plus simple est de modifier la fonction Filtre
Code:
Function Filtre2(ZoneRecherche As Range, ZoneRéponse As Range, Recherche As String) As Range
With ZoneRecherche
    Set C = .Find(Recherche, lookat:=[COLOR=red][B]xlPart[/B][/COLOR])
    If Not C Is Nothing Then
        firstAddress = C.Address
        Do
            If Filtre Is Nothing Then
                Set Filtre = ZoneRéponse(C.Row - 1)
            Else
                Set Filtre = Union(Filtre, ZoneRéponse(C.Row - 1))
            End If
            Set C = .FindNext(C)
        Loop While Not C Is Nothing And C.Address <> firstAddress
    End If
End With
End Function
qui va te renvoyer les cellules qui contiennent le nom de l'assoc ou plus. La ruse est que ZoneRecherche = ZoneRéponse, pour chercher dans les associations les associations :p. Après, tu peux utiliser AddItem pour remplir ta ListBox avec toutes les cellules de la plage, sauf le nom de l'assoc tout court :D
b- dans la texBox "ListSections"de l'usf "gestion asso", faire apparaître cette liste des assos ayant le même nom;
Traité en a- :rolleyes:
c- lorsque je sélectionne l'un des noms, les renseignements apparaissent dans les champs à gauche.
Là je vois pas :eek:. Tu as une ListeBox (déclarée en MultiSelect), avec le clic, tu sélectionnes ou désélectionnes les associations que tu souhaites. Et tu les renvois vers l'USF1 en tableau quand tu as finis. Du coup, la modification va se faire sur tous les champs renseignés, pour les associations sélectionnées seulement ;).
Bon déjà, est-ce que la démarche est OK ou je pars dans une mauvaise direction ?
Il n'y a pas de mauvaises directions, juste des détours :D
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.
Le problème, c'est qu'il faut Find ET FindNext (comme dans la fonction Filtre) ;)
Là, je n'ai pas compris quel était le but:eek:
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.
Logique, tu as juste rempli (ou non) AChercher, donc maintenant, il te faut un test : AChercher Is Nothing (or not ?) :p.
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::p. (désolé mais même en .xml, je suis obligé de le zipper:(.
C'est pas grave, par contre, je n'aurai pas le temps aujourd'hui :(...
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:eek:).
Avec les explications au dessus, ça devrait aller :). Quand tu veux mieux comprendre VBA, l'idéal, c'est de faire des tests intermédiaires avec MsgBox (attention à ne pas être dans une boucle de 200 ou + :D) pour voir le résultat obtenu. Pour une plage, tu peux soit faire un MsgBox Plage.Address ou un Plage.Select.
Bon courage :cool:
 

david84

XLDnaute Barbatruc
Re : VBA Amélioration macro fichier association

Re
Bon, décidément, comme je bloque, je vais reprendre étape par étape car j'ai dû louper un épisode. Déjà, je ne comprends pas quand tu me dis :
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à
Peux-tu m'expliquer l'intérêt de cette procédure car je ne la comprend pas:eek:?
Ne peux-t-on pas directement passer de l'étape de chargement des sections dans asso à l'exit à l'affichage dans la listeBox des sections de l'asso sélectionnée ? Autrement dit, pourquoi passer par Créer_Click ?
A+
 

JNP

XLDnaute Barbatruc
Re : VBA Amélioration macro fichier association

Re :),
J'avais prévu initialement (pour éviter tout doublon) que dès que l'Association était existante, Créer devenait grisée pour ne pouvoir que modifier ou supprimer.
Maintenant qu'une association "Machin" peut se décliner en "Machin Foot" et "Machin Hand", il faut bien, ne serait-ce que pour pouvoir ajouter "Foot" par exemple, que Créer ne soit pas grisé dès que "Machin" est sélectionné :rolleyes:.
Du fait, le contrôle de doublon n'étant plus effectué dès la sélection de l'association, il faut le tester autrement, donc forcément lors de la création (Créer_Click), et le plus sûr moyen est de regarder si .Find trouve la même association dans la BD à la virgule près ;).
Est-ce plus clair :p ?
Bon courage :cool:
 

david84

XLDnaute Barbatruc
Re : VBA Amélioration macro fichier association

Re:)
J'avais prévu initialement (pour éviter tout doublon) que dès que l'Association était existante, Créer devenait grisée pour ne pouvoir que modifier ou supprimer.
ça, j'avais compris donc OK
Maintenant qu'une association "Machin" peut se décliner en "Machin Foot" et "Machin Hand", il faut bien, ne serait-ce que pour pouvoir ajouter "Foot" par exemple, que Créer ne soit pas grisé dès que "Machin" est sélectionné
Pourquoi pas effectivement mais dans les faits, lorsque le collègue rentre une nouvelle section, il crée une fiche complète car la plupart de temps la majorité des infos changent (pas la même discipline, nom (puisque la discipline est accolée à "section"), adresse, mail, tel,...), c'est pour cela que je ne comprenais pas l'intérêt...ceci-dit, Créer ne doit plus être grisé uniquement lorsque "omnisport" est sélectionné si j'ai bien compris ?
Du fait, le contrôle de doublon n'étant plus effectué dès la sélection de l'association, il faut le tester autrement, donc forcément lors de la création (Créer_Click), et le plus sûr moyen est de regarder si .Find trouve la même association dans la BD à la virgule près
Oui, c'est logique.
Quand tu veux mieux comprendre VBA, l'idéal, c'est de faire des tests intermédiaires avec MsgBox (attention à ne pas être dans une boucle de 200 ou + ) pour voir le résultat obtenu. Pour une plage, tu peux soit faire un MsgBox Plage.Address ou un Plage.Select.
Je comprends ce que tu veux dire mais comme je n'ai pas l'habitude (en fait quand cela plante, je ne sais pas comment faire la distinction entre les différents types d'erreurs possible. Y-a-t-il des outils à connaître pour cela ?
Bon, je regarde ce WE et j'essaie de te proposer ne serait-ce qu'un début de solution pour que l'on puisse avancer.
Merci pour ta patience et ton dévouement;)
A+:)
 

JNP

XLDnaute Barbatruc
Re : VBA Amélioration macro fichier association

Re :)
Pourquoi pas effectivement mais dans les faits, lorsque le collègue rentre une nouvelle section, il crée une fiche complète car la plupart de temps la majorité des infos changent (pas la même discipline, nom (puisque la discipline est accolée à "section"), adresse, mail, tel,...), c'est pour cela que je ne comprenais pas l'intérêt...ceci-dit, Créer ne doit plus être grisé uniquement lorsque "omnisport" est sélectionné si j'ai bien compris ?
On peut le dégriser tous le temps à partir du moment où on va contrôler à la création. L'intérêt pour moi est double : si on part de l'association "Machin", on a peu de risque de se retrouver avec une association "Machine Foot" ou "Le Machin Foot" :p. D'autre part, la ville (et le CP, le Fax) doit quand même être commune, et il faut faire attention à ce que le changement de discipline n'efface pas le reste :rolleyes:.
Je comprends ce que tu veux dire mais comme je n'ai pas l'habitude (en fait quand cela plante, je ne sais pas comment faire la distinction entre les différents types d'erreurs possible. Y-a-t-il des outils à connaître pour cela ?
Les différents types d'erreur sont répertoriés dans l'aide, même si ça n'éclairci pas toujours les choses :rolleyes:...
Le F8 associé aux points d'arrêts permet de voir l'évolution des variables et de comprendre d'où vient l'erreur.
Enfin, une des erreurs les plus fréquentes, quand il manque un End If mais qu'il y a un End With ou réciproquement, suivant l'ordre des instructions, c'est souvent que c'est ce qui va bien qui est proposé par le débogueur et non l'autre :D
Bon courage :cool:
 

david84

XLDnaute Barbatruc
Re : VBA Amélioration macro fichier association

Re:)
Salut JN, après une matinée consacrée à quelques travaux d'entretien:rolleyes:, je m'y remets, mais sans scuccès:eek:. Ne comprenant pas d'où vient le problème, je réduit les incertitudes en ne travaillant que sur un usf avec apparition de la texBox "omnisport" lorsque "omnisport" est sélectionnée (pour l'instant, je préfère) et sans m'occuper du bouton "créer".
Voilà ce que j'ai tenté de faire :
- chargement de le textBox "omnisport" à l'initialisation de l'usf (je charge les asso)
- dans "asso", à l'exit, j'ai tenté de ce code :
Code:
If Discipline.Text = "OMNISPORT" And Association.Text <> "" Then
Set AChercher = Range("Tableau4[ASSOCIATIONS]").Find(Association.Text, lookat:=xlPart)
If AChercher Is Nothing Then
      MsgBox "Non trouvé"
   Else
   
  With AChercher
    Set c = .Find(Association.Text, lookin:=xlValues)
    If Not c Is Nothing Then
        firstAddress = c.Address
        Do
            [B]c.Value = Association.Text[/B]
            Set c = .FindNext(c)
        Loop While Not c Is Nothing And c.Address <> firstAddress
    End If
End With

Lorsque je teste pas à pas, il me trouve l'asso sélectionnée dans la textBox "association", mais après il plante sur la partie en gras (j'ai essayé différentes choses à la place de "Association.Text", mais sans succès (et puis d'ailleurs je ne sais même pas si c'est là que réside le problème vu que je ne sais pas utiliser les outils permettant de me mettre sur la voie lorsque cela plante :confused:).
Ci-joint le fichier pour que tu puisses te rendre compte et me dire où cela coince.
Concernant la fonction Filtre2, je n'ai fais que remplacer l'ancienne par celle-ci mais bon, là pareil, je marche à tâton car je ne comprends pas tout:rolleyes:.
Mais bon, c'est intéressant, c'est comme un puzzle que tu essaies d'assembler : il y a des moments où ça déroule et d'autres où tu passes 2 jours avec une pièce dans les mains en te demandant où est sa place...:eek:
A+
 

Pièces jointes

  • Test_BD_JNP_testUSFOmnisport16_10.zip
    167.8 KB · Affichages: 162
Dernière édition:

JNP

XLDnaute Barbatruc
Re : VBA Amélioration macro fichier association

Re :),
Bon, il faudrait peut-être qu'on communique par MSN pour certaines discussions :rolleyes:...
Je suis plutôt reparti de mon dernier fichier avec mail (pour éviter de me perdre :D...).
Modifications faites :
Code:
Private Sub Association_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If Discipline = "OMNISPORT" Then
VersOmni = Association.Text
Omnisport.Show
Exit Sub
End If
...
VersOmni est définie dans le Module1
Code:
Public VersOmni As String
ce qui permet de rendre VersOmni disponible dans tous les USF et modules, et de transporter le contenu d'Association vers l'USF Omnisport que j'ai créé avec uniquement une ListBox Assocs (avec la propriété réglée Sélections multiples) pour l'instant ;). J'ai juste mis dans le nouvel USF
Code:
Private Sub UserForm_Initialize()
Dim Cellule As Range
For Each Cellule In Filtre2(Range("Tableau4[ASSOCIATIONS]"), Range("Tableau4[ASSOCIATIONS]"), VersOmni)
Assocs.AddItem Cellule.Text
Next
End Sub
La fameuse Filtre2 qui cohabite avec Filtre1, chacune ayant son rôle (on pourra simplifier plus tard en faisant passer le critère Entier ou Partie à une seule fonction Filtre :D) a été mise dans le Module1, où j'avais déjà regroupé toutes les fonctions ou subs à arguments.
On verra ensuite comment ne pas charger l'association principale, et qu'est ce qu'on fait de notre sélection :p...
Je te conseille OMISPORT -> Club Sportif Pertuysien ;).
Par contre, Colorado Sport te montrera que ma prudence sur la saisie (là, il y a parfois un espace, parfois 2 espaces :eek:) n'est pas inutile :rolleyes:.
A + :cool:
 

Pièces jointes

  • Test_BD_Mail.xlsm
    165.2 KB · Affichages: 227
  • Test_BD_Mail.xlsm
    165.2 KB · Affichages: 219
  • Test_BD_Mail.xlsm
    165.2 KB · Affichages: 226

david84

XLDnaute Barbatruc
Re : VBA Amélioration macro fichier association

Re:)
Je n'ai plus qu'à m'incliner devant une telle maîtrise !
Franchement, je n'aurais pas trouvé tout seul:(.
En essayant de comprendre la manière dont tu affichais les sections liées à l'asso omnisport choisie, j'ai trouvé un moyen de n'afficher que les sections sans l'asso omnisport :
Code:
Private Sub UserForm_Initialize()
Dim Cellule As Range
For Each Cellule In Filtre2(Range("Tableau4[ASSOCIATIONS]"), Range("Tableau4[ASSOCIATIONS]"), VersOmni)
[B]If Cellule.Text <> VersOmni Then[/B] Assocs.AddItem Cellule.Text
Next
End Sub
C'est pas grand chose, mais bon.
De plus c'est en jouant avec Filtre et Filtre2 que j'ai visualisé la différence entre XlWhole et XlPart;).
Merci encore et A+
 

Discussions similaires

Réponses
7
Affichages
318
Réponses
13
Affichages
313
Réponses
1
Affichages
107
Compte Supprimé 979
C

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16