VBA Amélioration macro fichier association

david84

XLDnaute Barbatruc
Re : VBA Amélioration macro fichier association

Re
JN
Je pense qu'il faudrait intercepter aussi le Coller afin d'analyser ce qui est collé, et dans le Change, utiliser un Trim pour supprimer les espaces devant et derrière, ainsi que, si RegExp détecte 2 ou + espaces à l'intérieur, hop, Replace ...
Allez, au boulot ...
Bon ben "y a plus qu'à" (je vais quand même commencer par prendre 2 aspro puis tenter de comprendre ta macro:confused:).

JM
Monsieur David, je puis officiellement vous inscrire dans le club des RegExpiens d'XLD ?
Euh molo quand même :p !
Concernant le RegExp du mail ça sort du fichier de JNP;).
Pour les autres, j'ai du mal à les accoucher et je dois ressortir à chaque fois le fichier de JN pour y arriver:confused:.
Mais bon, j'avoue que je trouve l'outil intéressant une fois passée le nécessaire travail de découverte (mais le fichier de JN y est pour beaucoup).
Bon faut que j'y retourne moi, parce que le "parrain" m'a donné du boulot. Je vais déjà regarder ce qu'est un "Trim" (je sais JM, la touche F1:p)...ça se mange j'espère:D !
A+
 
Dernière édition:

Modeste

XLDnaute Barbatruc
Re : VBA Amélioration macro fichier association

Bonjour,

Oh joie, Oh allégresse, sonnez trompettes.:)
J'avais évoqué un tonton, un oncle et un parrain ... j'avais effectivement omis la bonne fée qui vient de temps en temps se pencher sur le berceau :D (si quelqu'un a des photos de ladite fée en costume, je demande à voir :eek:)
Quand je dis "berceau", on entend tout de même pétarader jusqu'ici son moteur de F1 et les pieds de David sont passés depuis longtemps entre les barreaux ... merci à tous les acteurs de cette série haletante!
 

JNP

XLDnaute Barbatruc
Re : VBA Amélioration macro fichier association

Re :),

Modeste : C'est Jean-Marie que tu proposes comme bonne fée en costume :p ? Je veux bien voir les photos aussi :D.

Jean-Marie : 1 millier d'affichage pour 100 posts, ça ne fait guère que 10 affichage par posts (dont nous 3 à chaque fois...), c'est pas comme ça que je vais faire carrière à TF1 :rolleyes:...

David : La KeyDown est simple, si l'utilisateur appuie sur Alt, hop, message et annulation de la saisie. Pourquoi psser par là, ben parce que le KeyPress n'intercepte pas (en tout cas je n'ai pas réussi :eek:) les Alt+0201 pour un É par exemple :eek:.

La KeyPress aussi : j'intercepte le code ASCII, et j'étudie les cas :
97 à 122 : [a-z], en faisant -32, je récupère le même dans [A-Z]
[àâÀÂ] -> A, etc.
32, c'est l'espace, il faudrait ajouter 45 pour "-", et tout caractère que tu souhaite accepter tel quel. L'intérêt est que le Else comprends tous les autres cas ;).

Trim supprime les espaces début et fin de chaine. Sinon, tu peux tout passer par RegExp, mais il faudra remplacer "(^ +)|( +$)" par "" et " +" par " ".

Intercepter Ctrl + v dans KeyDown devrait donner :
Code:
If  Shift = 2 And KeyCode = 118 Then
mais attention, les événements Key ne laissent passer la saise qu'à la fin de leur événement, donc tu ne peux pas modifier le contenu d'Association dans l'événement.
Il va falloir intercepter le Presse-Papier et le modifier au vol :p...
Je te conseille F1 avec GetFromClipboard et PutInClipboard :D

Bonne lecture :cool:
 

JNP

XLDnaute Barbatruc
Re : VBA Amélioration macro fichier association

Re :),
Intercepter Ctrl + v dans KeyDown devrait donner :
Code:
If  Shift = 2 And KeyCode = 118 Then
mais attention, les événements Key ne laissent passer la saise qu'à la fin de leur événement, donc tu ne peux pas modifier le contenu d'Association dans l'événement.
Il va falloir intercepter le Presse-Papier et le modifier au vol :p...
Je te conseille F1 avec GetFromClipboard et PutInClipboard :D
J'espère que tu n'a pas trop abusé du Presse-Papier :p...
Plusieurs erreurs dans mes derniers posts :eek:.
1) J'ai tellement focalisé sur les accents et les majuscules, que j'ai oublié les majuscules dans les ASCII acceptables ([A-Z] -> 65 à 90)...
2) L'évènement KeyDown prend la première touche (Ctrl pour Ctrl+v). Il faut dont passer par KeyUp (qui va considéré les 2 puisqu'elles sont appuyées toutes les 2 lorsqu'on relâche le "v"), et lui se passe après que le texte ait été collé, d'où ces petits codes :
Code:
[COLOR=blue]Private Sub[/COLOR] Association_KeyDown([COLOR=blue]ByVal[/COLOR] KeyCode [COLOR=blue]As[/COLOR] MSForms.ReturnInteger, [COLOR=blue]ByVal[/COLOR] Shift [COLOR=blue]As Integer[/COLOR])
[COLOR=blue]If[/COLOR] Shift = 4 [COLOR=blue]Then[/COLOR]
MsgBox "Utilisation de Alt interdit !", vbCritical
KeyCode = 0
[COLOR=blue]End If[/COLOR]
[COLOR=blue]End Sub[/COLOR]
Code:
[COLOR=blue]Private Sub[/COLOR] Association_KeyPress([COLOR=blue]ByVal[/COLOR] KeyAscii [COLOR=blue]As[/COLOR] MSForms.ReturnInteger)
[COLOR=blue]If[/COLOR] Majuscule(KeyAscii.Value) <> "" [COLOR=blue]Then[/COLOR]
KeyAscii = Asc(Majuscule(KeyAscii.Value))
[COLOR=blue]Else[/COLOR]
KeyAscii = 0
MsgBox "Caractère interdit !", vbCritical
[COLOR=blue]End If[/COLOR]
[COLOR=blue]End Sub[/COLOR]
Code:
[COLOR=blue]Private Sub[/COLOR] Association_KeyUp([COLOR=blue]ByVal[/COLOR] KeyCode [COLOR=blue]As[/COLOR] MSForms.ReturnInteger, [COLOR=blue]ByVal[/COLOR] Shift [COLOR=blue]As Integer[/COLOR])
[COLOR=blue]If[/COLOR] Shift = 2 [COLOR=blue]And[/COLOR] KeyCode = 86 [COLOR=blue]Then[/COLOR]
Association.Text = Nettoyage(Association.Text)
[COLOR=blue]End If[/COLOR]
[COLOR=blue]End Sub[/COLOR]
Code:
[COLOR=blue]Function[/COLOR] Nettoyage(MonTexte [COLOR=blue]As String[/COLOR]) [COLOR=blue]As String[/COLOR]
[COLOR=blue]Dim[/COLOR] I [COLOR=blue]As Integer[/COLOR]
[COLOR=blue]If[/COLOR] Len(MonTexte) <> 0 [COLOR=blue]Then[/COLOR]
[COLOR=blue]For[/COLOR] I = 1 [COLOR=blue]To[/COLOR] Len(MonTexte)
Nettoyage = Nettoyage & Majuscule(Asc(Mid(MonTexte, I, 1)))
[COLOR=blue]Next[/COLOR] I
[COLOR=blue]End If[/COLOR]
Nettoyage = Trim(Nettoyage)
[COLOR=blue]End Function[/COLOR]
Code:
[COLOR=blue]Function[/COLOR] Majuscule(KeyAscii [COLOR=blue]As Integer[/COLOR]) [COLOR=blue]As String[/COLOR]
[COLOR=blue]Select Case[/COLOR] KeyAscii
[COLOR=blue]Case[/COLOR] 97 [COLOR=blue]To[/COLOR] 122
KeyAscii = KeyAscii - 32 [COLOR=green]' A à Z[/COLOR]
[COLOR=blue]Case[/COLOR] 192, 194, 196, 224, 226, 228
KeyAscii = 65 [COLOR=green]' A[/COLOR]
[COLOR=blue]Case[/COLOR] 200 [COLOR=blue]To[/COLOR] 203, 232 [COLOR=blue]To[/COLOR] 235
KeyAscii = 69 [COLOR=green]' E[/COLOR]
[COLOR=blue]Case[/COLOR] 199, 231
KeyAscii = 67 [COLOR=green]' C[/COLOR]
[COLOR=blue]Case[/COLOR] 238, 206, 239, 207
KeyAscii = 73 [COLOR=green]' I[/COLOR]
[COLOR=blue]Case[/COLOR] 249, 217
KeyAscii = 85 [COLOR=green]' U[/COLOR]
[COLOR=blue]Case[/COLOR] 212, 244
KeyAscii = 79 [COLOR=green]' O[/COLOR]
[COLOR=blue]Case[/COLOR] 32, 45, 65 [COLOR=blue]To[/COLOR] 90 [COLOR=green]' Espace, tiret, majuscules[/COLOR]
[COLOR=blue]Case Else[/COLOR]
KeyAscii = 0
[COLOR=blue]End Select[/COLOR]
[COLOR=blue]If[/COLOR] KeyAscii <> 0 [COLOR=blue]Then[/COLOR] Majuscule = Chr(KeyAscii)
[COLOR=blue]End Function[/COLOR]
qui semblent fonctionner :D.
J'ai passé la modification en fonction afin d'en profiter partout où on veut, par contre, elle renvoit une String car il n'y a pas de code ASCII pour renvoyer "" :eek:.
Bon aspro :rolleyes:
 

david84

XLDnaute Barbatruc
Re : VBA Amélioration macro fichier association

Re
Bon, je viens de rentrer et je vois que tu ne m'as pas oublié;).
Concernant le presse-Papier, je vais regarder ce dont tu me parles.
Concernant tes sub et fonctions, déjà une question basique : tu places bien les fonctions dans un module de code ou tu peux les placer dans l'USF ?
Ensuite :
-"Association_KeyDown" et "Association_KeyPress" : j'ai compris.
-
Private Sub Association_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If Shift = 2 And KeyCode = 86 Then
Association.Text = Nettoyage(Association.Text)
End If
End Sub
Tu appelles la fonction "nettoyage" (donc pas besoin d'utiliser call ?) ?
- la fonction "Nettoyage" : je croyais comprendre qu'elle enlevait les espaces grâce à Trim mais quand je la teste en laissant......ASSO.....TEST.... par ex cela ne modifie rien : donc je n'en comprends pas la signification (si tu peux m'éclairer):(...

La fonction Majuscule : j'ai compris (j'ai d'ailleurs rajouté l'apostrophe (car 39)

Une remarque concernant la structuration de "select case" :
Code:
Function Majuscule(KeyAscii As Integer) As String
Select Case KeyAscii
Case 97 To 122
instructions KeyAscii .....
[B]Case 32, 39, 45, 65 To 90[/B] ' Espace, tiret, majuscules, apostrophe
Case Else
KeyAscii = 0
End Select
If KeyAscii <> 0 Then Majuscule = Chr(KeyAscii)
End Function
Tu sélectionnes les caractères autorisés simplement en les citant (je veux dire qu'il n'y a pas besoin d'instructions particulières derrière). J'aurai eu tendance à penser qu'il eût fallu développer:rolleyes:.
Personnellement, j'avais plutôt cherché à intégrer l'effacement des espaces dans les sub "créer fiche" et "modifier fiche".
Code:
With BD
.Cells(DerLigne, 1) = Application.WorksheetFunction.Max(Range("Tableau4[N° ENREG]")) + 1
.Cells(DerLigne, 2) = Application.WorksheetFunction.Max(Range("Tableau4[N° DE FICHES]")) + 1

For I = 13 To 21
[B].Cells(DerLigne, I - 10) = Replace(Trim(UCase(Controls(I).Text)), "  ", " ")[/B]
Next I
For J = 23 To 24
[B].Cells(DerLigne, J - 10) = Trim(UCase(Controls(J).Text))[/B]
Next J
.Cells(DerLigne, 12) = LCase(Mail.Text)
.Cells(DerLigne, 15) = Now()
.Cells(DerLigne, 15).NumberFormat = "dd/mm/yyyy"
End With
En écrivant simplement
Code:
.Cells(DerLigne, I - 10) = Trim(UCase(Controls(I).Text))
j'arrive à effacer les espaces avant le 1er et après le dernier mot.:)
Mais je n'arrive pas pour l'instant à gérer les espaces en trop entre les mots comme tu peux le voir dans le bout de code ci-dessus où j'ai utilisé Replace, mais sans résultat:confused:.
Je continue de chercher:rolleyes:.
A+
 
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 :),
Concernant le presse-Papier, je vais regarder ce dont tu me parles.
Comme précisé dans mon post, pas d'urgence, on en a plus besoin pour l'instant ;)
Concernant tes sub et fonctions, déjà une question basique : tu places bien les fonctions dans un module de code ou tu peux les placer dans l'USF ?
Là, je les ai placé dans l'USF, mais effectivement, un module serait plus adapté :)
- Tu appelles la fonction "nettoyage" (donc pas besoin d'utiliser call ?) ?
Call (qui est facultatif) est utilisé plutôt pour la lisibilité du code, on sait qu'on appelle une Sub ou une Function, mais quand tu appelle une Function dans un calcul, tu l'utilises direct :p
- la fonction "Nettoyage" : je croyais comprendre qu'elle enlevait les espaces grâce à Trim mais quand je la teste en laissant......ASSO.....TEST.... par ex cela ne modifie rien : donc je n'en comprends pas la signification (si tu peux m'éclairer):(...
Elle utilise bien Trim, mais elle n'est utilisée que lorsque le Coller (Ctrl + v) est utilisé. Sinon, c'est dans Association_Exit qu'il faut mettre Association = Trim(Association) :D
La fonction Majuscule : j'ai compris (j'ai d'ailleurs rajouté l'apostrophe (car 39)
Comme je t'avais dit, à complèter :rolleyes:.
Une remarque concernant la structuration de "select case" :
Code:
Function Majuscule(KeyAscii As Integer) As String
Select Case KeyAscii
Case 97 To 122
instructions KeyAscii .....
[B]Case 32, 39, 45, 65 To 90[/B] ' Espace, tiret, majuscules, apostrophe
Case Else
KeyAscii = 0
End Select
If KeyAscii <> 0 Then Majuscule = Chr(KeyAscii)
End Function
Tu sélectionnes les caractères autorisés simplement en les citant (je veux dire qu'il n'y a pas besoin d'instructions particulières derrière). J'aurai eu tendance à penser qu'il eût fallu développer:rolleyes:.
Au contraire, Select Case (voir sur l'autre post où je t'avais répondu) est assez basique : Dans le Select, la variable à comparer ; dans les Case, des valeurs précises, une plage de valeur avec To, une partie de texte avec Is Like, etc...
Personnellement, j'avais plutôt cherché à intégrer l'effacement des espaces dans les sub "créer fiche" et "modifier fiche".
Pourquoi pas, et tu pourrais aussi passer en majuscule à ce moment-là en supprimant les caractères superflus, etc. mais comme je suis adepte du WYSIWYG (What You See Is What You Get :D), je pense qu'il est bon que les modifications soient vuent par l'utilisateur avant enregistrement ;).
En écrivant simplement
Code:
.Cells(DerLigne, I - 10) = Trim(UCase(Controls(I).Text))
j'arrive à effacer les espaces avant le 1er et après le dernier mot.:)
Mais je n'arrive pas pour l'instant à gérer les espaces en trop entre les mots comme tu peux le voir dans le bout de code ci-dessus où j'ai utilisé Replace, mais sans résultat:confused:.
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 :D...
Tu peux imbriquer les Replace, mais si tu tombes sur un mec qui s'est endormi sur la barre d'espace, tu n'es pas sorti :p...
Donc une petite fonction RegExp (pour changer :D, explications sur la fonction ICI)
Code:
Function Extractions(Texte As String, MonPattern As String, Optional Remplacement As String, Optional Inverse As Boolean) As String
Dim Match, Matches
If Inverse = False Then
    With CreateObject("vbscript.regexp")
        .Global = True: .Pattern = MonPattern
        Extractions = Trim(.Replace(Texte, Remplacement))
    End With
Else
    With CreateObject("vbscript.regexp")
        .Global = True: .Pattern = Replace(MonPattern, " ?", "")
        Set Matches = .Execute(Texte)
        For Each Match In Matches
            Extractions = Extractions & " " & Match
        Next
    End With
    Extractions = Trim(Extractions)
End If
End Function
Et donc dans Association_Exit, plutôt que Association = Trim(Association), tu mets Association = Extractions(Association, " +", " "), le Trim étant incorporé ;).
Très très bon courage :D
 

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

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

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:rolleyes:).
A+
 
Dernière édition:

JNP

XLDnaute Barbatruc
Re : VBA Amélioration macro fichier association

Re :),
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:D)
Il y est également dit
Mais sans résultat:confused:.
Le problème est que SetFocus est un peu particulier :eek:... L'aide n'est pas très prolixe à ce niveau-là, mais je peux te donner ce que j'en ai déduit (peut-être à tort), de mon expérience :rolleyes:.
SetFocus pour rester dans le même contrôle ne fonctionne pas (certainement un problème circulaire, comme de mettre en A1 =A1+A2...). C'est pour cela que l'on utilise Cancel dans Exit qui signifie qu'on va changer le focus. Les autres événement laisse le focus à leur contrôle, sauf programmation contraire... Il fonctionne très bien par contre pour se rendre ailleurs :p.
En général, ça va dépendre de l'événement utilisé :
Change, par ex., avec un test sur la longueur de chaîne peut permettre de passer au suivant.
Exit, peut en fonction du remplissage des autres, par ex., choisir quel contrôle s'active ensuite.
KeyPress, par contre, ne représente pas beaucoup d'intérèt pour nous. Ce qui est indiqué dans l'aide, c'est plutôt ce qui concerne l'utilisation des flèches de direction, par ex., qui peut permettre sur un USF très complet de choisir son déplacement entre les contrôles.
Idem pour KeyDown et KeyUp ;).
Il ne faut pas oublier que c'est la propriété TabIndex des contrôles qui déterminent l'ordre d'activation des contrôles :D.
En général, c'est Tab et Maj + Tab que l'utilisateur va utiliser pour se déplacer dans l'USF (sauf si c'est un fana du mulot :p).
Les flèches ne sont pas très efficaces, sauf si elles sont programmées avec les Key...
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:rolleyes:).
C'est vrai que je ne te fais pas de cadeau :p. En essayant d'optimiser systématiquement le code, j'aborde à chaque fois des notions différentes, et en quelques semaines, tu as certainement vu plus de syntaxes différentes (en fonction des besoins) que si tu avait progressé sur des exemples simples, en complexifiant au fûr et à mesure dans la même syntaxe :rolleyes:.
Et encore, je n'ai pas utilisé des notions que je ne maîtrise pas, comme les modules de classes, et très peu de tableaux...
Si tu sens que tu perd pied, n'hésite pas à demander des compléments d'information, comme l'a qualifié MJ13, ma formation est un peu "express" :D...
Les Function et passage d'argument à des Sub ne font pas vraiment parti du B A BA de VBA, surtout quand c'est des objets que tu passes :p...
Quand JM parle de 3 personnes à utiliser RegExp, il fait de l'humour bien sûr, mais que tu l'ai compris au bout de quelques mois de VBA, ça donne une idée de la hauteur où je t'ai placé la barre dès le début:p
Bon courage et à + :cool:
 

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 :p) 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 :cool:
 

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:rolleyes:.
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+
 

Fichiers joints

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 :p... 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. :D.
Je ne sais pas pourquoi tu n'as pas supprimer la Feuil1, elle n'a plus d'intérêt maintenant :rolleyes:.
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 :eek:.
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" :p.
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à :D...
A + :cool:
 

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 :eek:).
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
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:confused:. Je vais donc commencer par le point 1 et voir si j'y arrive (au moins te proposer un début de solution):rolleyes:. Confirme-moi quand même si nous sommes d'accord avant que je m'y mette:cool:
A+:)
 

JNP

XLDnaute Barbatruc
Re : VBA Amélioration macro fichier association

Re :),
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 ?
Oui ;). Cela pourrait donner sur une modification de groupe, avec par exemple, une modification des champs renseignés et rien dans les champs vides. Il suffirait de stocker les associations cochées dans une ListBox en mémoire, et bien sûr, demander confirmation de la modification massive :p.
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:confused:. Je vais donc commencer par le point 1 et voir si j'y arrive (au moins te proposer un début de solution):rolleyes:. Confirme-moi quand même si nous sommes d'accord avant que je m'y mette:cool:
Pourquoi pas Commune effectivement. De mémoire, la macro que tu avais faite partait des champs filtrés sur le BD. Je pensais plutôt utiliser les Charge de l'USF pour concaténer les adresses email avec des ";" dans la TextBox. On pourrait aussi passer par une ListBox, avec tous les mails de sélectionnés, et laisser la possibilité à l'utilisateur de tout cocher, tout décocher, et ajouter ou ôter des mails par simple click :rolleyes:.
A + :cool:
 

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 :p).
Tu lance l'USF, tu choisis AAA (y a des mails dedans), tu fais Ajouter :D.
A + :cool:
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 :eek:) sur le forum ;)
 

Fichiers joints

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 :rolleyes: ?
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 :eek:), 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 :p...
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 :D.
Bon courage :cool:
 

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:cool:.
Bon, je m'y essaie:rolleyes:
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: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 ?)
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: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.
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:(.
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:).
Bon de mon côté je vais continuer de rechercher du côté de find pour comprendre comment s'en servir.
A+
 

Fichiers joints

Dernière édition:

Discussions similaires


Haut Bas