VBA Amélioration macro fichier association

JNP

XLDnaute Barbatruc
Re : VBA Amélioration macro fichier association

Re :),
Euh... non :p.
Je vais essayer de faire du cas par cas ;).
Pour simplifier la notation :
P : Potentiel : Liste du combobox chargé.
E : Etat : V pour Vide, R pour Renseigné
1) Initialisation de l'USF :
Tous combos : P : tout champs - E : V
2) Choix de Discipline : Association et Commune : P : Uniquement lié Discipline - E : V
3) Choix Discipline puis Association : reste combo : P : pas de changement - tous les champs : E : R (pas de doublon donc uniquement modification)
4) Choix Discipline puis Commune : Association : P : lié à Discipline + Commune - E : V
5) Choix Association : reste combo : P : pas de changement - tous les champs : E : R (pas de doublon donc uniquement modification)
6) Choix Commune : Discipline et Association : P : Uniquement lié Commune - E : V
7) Option : choix CodePostal : Idem ci-dessus avec Commune : P : Uniquement lié
Est-ce plus clair :D ?
A + :cool:
 

david84

XLDnaute Barbatruc
Re : VBA Amélioration macro fichier association

Re
si je comprends ton langage:p :
P : Potentiel : Liste du combobox chargé.
chargement du ou des combobox appelés (call charge)
Etat : V pour Vide, R pour Renseigné
la zone de texte est vide ou renseignée
1) Initialisation de l'USF :
Tous combos : P : tout champs - E : V
ça, c'est l'initialisation des combobox via la sub
Private Sub UserForm_Initialize()
2) Choix de Discipline : Association et Commune : P : Uniquement lié Discipline - E : V
là, c'est le cas lorsqu'une fiche est créée (?) : les 3 listes sont indépendantes les unes des autres (toutes les disciplines, toutes les asso, toutes les communes.
Uniquement lié Discipline - E : V
pas compris ce que tu veux dire:rolleyes:.
3) Choix Discipline puis Association : reste combo : P : pas de changement - tous les champs : E : R (pas de doublon donc uniquement modification)
pas compris mais je pense que cela fait référence à une sub du type :
Private Sub Discipline_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Set AChercher = Range("Tableau4[DISCIPLINES]").Find(Discipline, lookat:=xlWhole) 'cherche si la discipline existe déjà dans la BD
If AChercher Is Nothing Then Exit Sub
Call Charge(Association, Filtre(Range("Tableau4[DISCIPLINES]"), Range("Tableau4[ASSOCIATIONS]"), Discipline))
'charge uniquement les associations correspondant à la discipline sélectionnée
For I = 14 To 24
Controls(I).Text = "" 'vide les ComboBox et TexteBox
Next I
Association.SetFocus
End Sub
4), 5), 6) Là, je décroche (si jamais ce n'était pas déjà fait avant):(
7) Là c'est la sub existante permettant de ramener le code postal liée à la commune sélectionnée (?).

En fait, le problème, c'est que quand tu dis
Dans ce cas là, c'est Association qu'il faut vérifier comme vide en cas d'Exit de Commune pour recharger le combo Association
,
je ne sais pas de quoi tu parles ni comment faire.
J'ai donc tenté un début de macro rien que "pour voir" car je pense que c'est en essayant quelque chose que je vais finir par comprendre ce que tu veux m'expliquer:eek: :
Private Sub Commune_Exit(ByVal Cancel As MSForms.ReturnBoolean)

Set AChercher = Range("Tableau4[COMMUNES]").Find(Commune, lookat:=xlWhole) 'recherche la commune sélectionnée
If AChercher Is Nothing Then Exit Sub
If Controls(13).Text <> "" And Controls(14).Text = "" Then 'si la discipline est sélectionnée et que la zone de texte "association " est vide
Call Charge(Commune, Filtre(Range("Tableau4[DISCIPLINES]"), Range("Tableau4[COMMUNES]"), Discipline))
End If
Commune.ListIndex = 0
Association.SetFocus

End Sub
Ce code a normalement pour but, suite au choix d'une discipline, de n'avoir que les communes liées à cette discipline.
Quand je teste ce code, voilà ce qui se passe :
- la liste des disciplines est présente dans la combo (ok) : je sélectionne une discipline (ex aïkido").
- je vais ensuite ouvrir la liste des communes : lorsque je l'ouvre, je me retrouve avec l'ensemble des communes présentes dans la liste:confused:
- lorsque j'en sélectionne une au hasard pour voir et que je tape sur "entrée", il ne m'affiche pas la commune sélectionnée, mais la 1ère des communes liées à la discipline sélectionnée (Avignon):confused:
- lorsque je resélectionne immédiatement cette liste, seules les communes liées à la discipline sélectionnée sont alors présentes (Avignon, Isle sur la sorgue, Pertuis, Sorgues) ;
- si je veux en sélectionner une autre (ex sorgues): impossible (seule la 1ère commune parmi les communes liées à la discipline sélectionnée est sélectionnable (les autres apparaissent dans la liste mais je ne peux les sélectionner).
Je pense que cela est notamment dû à ce que tu essaies de me faire comprendre : au fait que la liste commune n'ait pas été préalablement "vidée" (?).

Bon, voilà où j'en suis pour ce soir:(.
Peut-être que j'aurai une révélation durant la nuit mais là je bloque...mais je ne lâche pas !:p
A+

Edit : en me levant ce matin, j'ai eu une idée :rolleyes: : modifier la combo "disciplines" (et non "communes") puisque c'est elle qui est rentrée en 1er et envisager les différents cas que tu m'as énoncé en me servant de if ...then (ou de "select case"). j'ai modifié le code comme suit :
Code:
Private Sub Discipline_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Set AChercher = Range("Tableau4[DISCIPLINES]").Find(Discipline, lookat:=xlWhole) 'cherche si la discipline existe déjà dans la BD
If AChercher Is Nothing Then Exit Sub

If Controls(14).Text = "" And Controls(19).Text = "" Then
    Call Charge(Commune, Filtre(Range("Tableau4[DISCIPLINES]"), Range("Tableau4[COMMUNES]"), Discipline))
    'End If
'Commune.ListIndex = 0
Association.SetFocus
Else: Call Charge(Association, Filtre(Range("Tableau4[DISCIPLINES]"), Range("Tableau4[ASSOCIATIONS]"), Discipline))
'charge uniquement les associations correspondant à la discipline sélectionnée
For I = 14 To 24
Controls(I).Text = "" 'vide les ComboBox et TexteBox
Next I
Association.SetFocus
End If
End Sub
Lorsque je sélectionne la commune directement après la discipline, je n'ai que les communes liées à la discipline:)
Bon, quand je sélectionne l'association, pour l'instant, c'est pas au point:confused:, mais est-ce que la logique est la bonne (travailler sur la combo "disciplines" en envisageant les différents cas) ou suis-je à côté de la plaque ?
Je te tiens au courant si j'avance;).
 
Dernière édition:

JNP

XLDnaute Barbatruc
Re : VBA Amélioration macro fichier association

Re :),
Bon, on progresse, mais c'est vrai que c'est pas évident pour toi de raisonner comme moi, et vice versa :p...
Le problème est d'éviter le circulaire :rolleyes:.
Les abréviations, tu as compris. Je vais en rajouter quelques unes :D..
D : Discipline, A : Association, C : Commune, CP : CodePostal ;)
P = P signifie qu'on ne touche pas à la liste du Combo :rolleyes:
1) Initialisation de l'USF :
D : P = Charge - E = V
A : P = Charge - E = V
C : P = Charge - E = V
2) Choix de Discipline :
D : P = P - E = R
A : P = Charge(Filtre D) - E = V
C : P = Charge(Filtre D) - E = V
3) Choix Discipline puis Association :
D : P = P - E = R
A : P = P - E = R
C : P = Charge(Filtre D (Filtre A) -> E = R (et tout les champs R)
4) Choix Discipline puis Commune :
D : P = P - E = R
A : P = Charge(Filtre D (Filtre C) - E = V
C : P = P - E = R
5) Choix Association :
D : P = Charge(Filtre A) - E = R
A : P = P - E = R
C : P = Charge(Filtre A) - E = R (et tous les champs R)
6) Choix Commune :
D : P = Charge(Filtre C) - E = V
A : P = Charge(Filtre C) - E = V
C : P = P - E = R
7) Option : choix CodePostal : Idem ci-dessus avec :
D : P = Charge(Filtre CP) - E = V
A : P = Charge(Filtre CP) - E = V
C : P = Charge(Filtre CP) - E = V
CP : P = P - E = R
Donc le cas que tu as fais sur C Exit pour 6) donnerait en simplifié
Code:
Sub C_Exit
If D = "" & A = ""
D = Charge(Filtre(C))
A = Charge(Filtre(C))
ElseIf D <> "" & A = ""
A = Charge(Filtre C (Filtre D)
ElseIf D = "" & A <> ""
ne sert à rien vu que si l'association est déjà OK, c'est que tout est déjà renseigné :D
End If
Euh, si tu veux, je t'envoie 2 aspros par MP :p...
Bon courage :cool:
PS : Il n'est pas utile de décharger les combo, vu qu'en procédant par égalité, les combo sont chargés directement avec la nouvelle liste ;)
 
Dernière édition:

david84

XLDnaute Barbatruc
Re : VBA Amélioration macro fichier association

Re
Bon, on progresse, mais c'est vrai que c'est pas évident pour toi de raisonner comme moi, et vice versa ...
C'est exactement ça ! En fait, j'ai 3 problème à résoudre :
- comprendre ce que tu veux me dire:(
- essayer (pour l'instant du moins) de ne pas penser "formules" mais "VBA"
- acquérir les connaissances VBA en général (merci au passage à staple qui m'a fait regarder de plus près l'aide Excel;)).
Euh, si tu veux, je t'envoie 2 aspros par MP ...
Seulement 2 ? :D
Sinon, quand je dis qu'il faut en fait
travailler sur la combo "disciplines" en envisageant les différents cas
, ça c'est apparemment faux puisque tu me mets en exemple
Code:
Sub [B]C_Exit[/B]
If D = "" & A = ""
D = Charge(Filtre(C))
A = Charge(Filtre(C))
ElseIf D <> "" & A = ""
A = Charge(Filtre C (Filtre D)
ElseIf D = "" & A <> ""
ne sert à rien vu que si l'association est déjà OK, c'est que tout est déjà renseigné :D
End If
Donc, c'est qu'il faut travailler dans les différentes combo !
Bon, je m'y remets et regarde de plus près ton dernier message (j'ai l'impression (fugace !) que cela s'éclaircit un peu:rolleyes:.
Je fais des tests et te tiens au courant.
A+
 

david84

XLDnaute Barbatruc
Re : VBA Amélioration macro fichier association

Re
1 précision STP :
pour la 1ère condition
'If D = "" & A = ""
, apparemment cela focntionne :
If Controls(13).Text = "" And Controls(14).Text = "" Then
'D = Charge(Filtre(C))
'a = Charge(Filtre(C))
Call Charge(Discipline, Filtre(Range("Tableau4[COMMUNES]"), Range("Tableau4[DISCIPLINES]"), Commune))
Call Charge(Association, Filtre(Range("Tableau4[COMMUNES]"), Range("Tableau4[ASSOCIATIONS]"), Commune))
Pour la 2ème condition :
je traduis
A = Charge(Filtre C (Filtre D)
par
Call Charge(Association, Filtre(Range("Tableau4[COMMUNES]")(Range("Tableau4[DISCIPLINES]")), Range("Tableau4[ASSOCIATIONS]"), Commune))
ça ne fonctionne pas car je dois faire une erreur de syntaxe en imbriquant les filtres que je n'arrive pas à corriger : si c'est la cas, comment imbriquer correctement les filtres ?
 

Staple1600

XLDnaute Barbatruc
Re : VBA Amélioration macro fichier association

Bonjour à tous

David84
(merci au passage à staple qui m'a fait regarder de plus près l'aide Excel;)).
Bah, il est bien content le gars Staple, que tu caresses plus souvent ta touche F1.

Vais pouvoir aller aux champignons cet après-midi

(la mienne , on voit plus ce qu'il y avait écrit dessus, tellement je l'ai titillé )

Vous aviez remarqué que vous étiez en duopole sur ce post ;) ?

Chut! je vous laisse dans votre intimité excelienne à tâter du combo...
 

JNP

XLDnaute Barbatruc
Re : VBA Amélioration macro fichier association

Re :),
Code:
Call Charge(Association, Filtre(Filtre(Range("Tableau4[COMMUNES]"), Range("Tableau4[DISCIPLINES]"), Commune), Range("Tableau4[ASSOCIATIONS]"), Discipline))
serait plus exact ;).
Code:
Filtre(Range("Tableau4[COMMUNES]"), Range("Tableau4[DISCIPLINES]"), Commune)
renvoie les lignes de DISCIPLINES qui correspondent à Commune, puis
Code:
Filtre([COLOR=red][B]Résultat[/B][/COLOR], Range("Tableau4[ASSOCIATIONS]"), Discipline)
renvoie ASSOCIATIONS dont Discipline est dans Résultat, ce qui fait qu'on charge bien Discipline ET Commune OK :p.
D'autre part, pour la lisibilité du code
Code:
If Discipline.Text = "" And Associations.Text = "" Then
me parait mieux :D.
Staple1600 a dit:
Vous aviez remarqué que vous étiez en duopole sur ce post ;) ?
Oui, mais c'est ouvert à tous :D
Bon courage :cool:
 

david84

XLDnaute Barbatruc
Re : VBA Amélioration macro fichier association

Re
Voilà ce que j'ai tenté de placer dans la combo "commune" :
Code:
Private Sub Commune_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Set AChercher = Range("Tableau4[COMMUNES]").Find(Commune, lookat:=xlWhole) 'recherche la commune sélectionnée
If AChercher Is Nothing Then Exit Sub

'If D = "" & A = ""
If Discipline.Text = "" And Association.Text = "" Then 'si les zones de texte "discipline" et "asso" sont vides
'D = Charge(Filtre(C))
'a = Charge(Filtre(C))

Call Charge(Discipline, Filtre(Range("Tableau4[COMMUNES]"), Range("Tableau4[DISCIPLINES]"), Commune))
Call Charge(Association, Filtre(Range("Tableau4[COMMUNES]"), Range("Tableau4[ASSOCIATIONS]"), Commune))

'ElseIf D <> "" & A = ""
'A = Charge(Filtre C (Filtre D)
ElseIf Discipline.Text <> "" And Association.Text = "" Then
Call Charge(Association, Filtre(Filtre(Range("Tableau4[COMMUNES]"), Range("Tableau4[DISCIPLINES]"), Commune), Range("Tableau4[ASSOCIATIONS]"), Discipline))
CodePostal.ListIndex = 0
Cedex.SetFocus
End If
End Sub
Pour la partie
Code:
'If D = "" & A = ""
If Discipline.Text = "" And Association.Text = "" Then 'si les zones de texte "discipline" et "asso" sont vides
'D = Charge(Filtre(C))
'a = Charge(Filtre(C))
, les 2 listes sont présentes et le filtre "commune" joue son rôle.

Par contre pour la partie
Code:
ElseIf Discipline.Text <> "" And Association.Text = ""
, cela ne donne rien : une fois la discipline choisie, la liste des communes ne tient pas compte des filtres (c'est la liste complète qui m'est proposée):confused:.

Sinon, si je "traduis" l'un de tes exemples, par ex
2) Choix de Discipline :
D : P = P - E = R
A : P = Charge(Filtre D) - E = V
C : P = Charge(Filtre D) - E = V
voilà ce que je comprends :
D : P = P - E = R
je ne touche pas à la combo "discipline"
A : P = Charge(Filtre D) - E = V
je vais dans la macro de la combo "asso" et j'appelle "charge", sur lequel j'applique le filtre "discipline"
C : P = Charge(Filtre D) - E = V
je vais dans la macro de la combo "commune" et j'appelle "charge", sur lequel j'applique le filtre "discipline"

P = P signifie qu'on ne touche pas à la liste du Combo
Si ce n'est pas ce que j'ai compris dans l'exemple ci-dessus, alors je n'ai pas compris cette phrase:confused:.
A+
 

JNP

XLDnaute Barbatruc
Re : VBA Amélioration macro fichier association

Re :),
Quand je disais "vice et versa" :p
Voilà ce que j'ai tenté de placer dans la combo "commune" :
Code:
Private Sub Commune_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Set AChercher = Range("Tableau4[COMMUNES]").Find(Commune, lookat:=xlWhole) 'recherche la commune sélectionnée
If AChercher Is Nothing Then Exit Sub
'If D = "" & A = ""
If Discipline.Text = "" And Association.Text = "" Then 'si les zones de texte "discipline" et "asso" sont vides
'D = Charge(Filtre(C))
'a = Charge(Filtre(C))
Call Charge(Discipline, Filtre(Range("Tableau4[COMMUNES]"), Range("Tableau4[DISCIPLINES]"), Commune))
Call Charge(Association, Filtre(Range("Tableau4[COMMUNES]"), Range("Tableau4[ASSOCIATIONS]"), Commune))
'ElseIf D <> "" & A = ""
'A = Charge(Filtre C (Filtre D)
ElseIf Discipline.Text <> "" And Association.Text = "" Then
Call Charge(Association, Filtre(Filtre(Range("Tableau4[COMMUNES]"), Range("Tableau4[DISCIPLINES]"), Commune), Range("Tableau4[ASSOCIATIONS]"), Discipline))
CodePostal.ListIndex = 0
Cedex.SetFocus
End If
End Sub
Parait nickel, sauf que pour mettre CodePostal.ListIndex = 0, il faudrait utiliser Charge avec CodePostal ;).
Pour la partie
Code:
'If D = "" & A = ""
If Discipline.Text = "" And Association.Text = "" Then 'si les zones de texte "discipline" et "asso" sont vides
'D = Charge(Filtre(C))
'a = Charge(Filtre(C))
, les 2 listes sont présentes et le filtre "commune" joue son rôle.
Ok
Par contre pour la partie
Code:
ElseIf Discipline.Text <> "" And Association.Text = ""
, cela ne donne rien : une fois la discipline choisie, la liste des communes ne tient pas compte des filtres (c'est la liste complète qui m'est proposée):confused:.
Euh, c'est le fait d'avoir choisi une commune qui a déclenché la macro, donc Commune est renseigné, pourquoi vouloir avoir une liste dans Commune :confused: ?
Sinon, si je "traduis" l'un de tes exemples, par ex
Code:
2) Choix de Discipline :
D : P = P - E = R
A : P = Charge(Filtre D) - E = V
C : P = Charge(Filtre D) - E = V
voilà ce que je comprends :
je ne touche pas à la combo "discipline"
OK
je vais dans la macro de la combo "asso" et j'appelle "charge", sur lequel j'applique le filtre "discipline"
Non, je suis dans Discipline_Exit pour remplir Association avec Charge Filtre Discipline
je vais dans la macro de la combo "commune" et j'appelle "charge", sur lequel j'applique le filtre "discipline"
Idem, pour remplir Commune avec Charge Filtre Discipline
Si ce n'est pas ce que j'ai compris dans l'exemple ci-dessus, alors je n'ai pas compris cette phrase:confused:.
C'est vrai que c'est pas évident de jongler avec tout cela :rolleyes:.
Grosso modo, on va toujours être dans l'Exit du combo (sur les 3 principaux, on va se focaliser là dessus pour l'instant :D) qu'on vient de renseigner. Quand on sélectionne quelque chose, on va regarder les 2 autres. Si les 2 sont vides, on va charger les 2 combo vides en fonction de ce qu'on vient de choisir. Si un des 2 est renseigné, on va remplir le 3ème en fonction de ce qu'on vient de choisir et de celui déjà renseigné. Et si l'association est renseignée, on va carrément charger tous les champs, vu qu'on considère qu'une association est unique, donc avec une discipline et une adresse unique ;).
A + :cool:
 

david84

XLDnaute Barbatruc
Re : VBA Amélioration macro fichier association

Re +message suivant
Bonjour JN:),
Je pense que je ne suis pas loin, mais ne sachant pas quand je teste si l'erreur est à la partie de code testée ou à autre chose, au bout d'un moment je perds pied:confused: .

Cependant, je pense que la clé est dans cette partie de ton message :
Code:
Grosso modo, on va toujours être dans l'Exit du combo (sur les 3 principaux, on va se focaliser là dessus pour l'instant ) qu'on vient de renseigner. Quand on sélectionne quelque chose, on va regarder les 2 autres. Si les 2 sont vides, on va charger les 2 combo vides en fonction de ce qu'on vient de choisir. Si un des 2 est renseigné, on va remplir le 3ème en fonction de ce qu'on vient de choisir et de celui déjà renseigné. Et si l'association est renseignée, on va carrément charger tous les champs, vu qu'on considère qu'une association est unique, donc avec une discipline et une adresse unique .
Pour réduire le champ des incertitudes, je te propose comme tu l'as suggéré de nous focaliser sur les combo "discipline", "asso" et "commune" en réduisant les macros au strictes infos permettant de les synchroniser.
Alors, je vais te prendre un cas concret en te détaillant les différentes étapes.
Je veux faire en sorte que lorsque je sélectionne une discipline, je puisse ensuite, soit :
- choisir une commune puis l'asso donc D=>C=>A
- choisir une asso puis une commune donc D=>A=>C

Voila ce que je fais :
1) je commence par la partie "choisir une commune puis l'asso" :
a- je me place dans la combo "discipline". Celle-ci étant vide, si j'applique ce que tu me dis (Si les 2 sont vides, on va charger les 2 combo vides en fonction de ce qu'on vient de choisir) et je place donc ce code
Code:
Private Sub Discipline_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Set AChercher = Range("Tableau4[DISCIPLINES]").Find(Discipline, lookat:=xlWhole) 'cherche si la discipline existe déjà dans la BD
If AChercher Is Nothing Then Exit Sub
If Association.Text = "" And Commune.Text = "" Then
'filtre "commune" et "asso" en fonction de la discipline
Call Charge(Commune, Filtre(Range("Tableau4[DISCIPLINES]"), Range("Tableau4[COMMUNES]"), Discipline))
Call Charge(Association, Filtre(Range("Tableau4[DISCIPLINES]"), Range("Tableau4[ASSOCIATIONS]"), Discipline))
End If
End Sub
J'ai alors dans les combo "asso" et "commune" uniquement la liste de la discipline concernée

b- je me place ensuite dans la combo "commune" où je place ce code ("discipline" est remplie et " asso" est vide) :
Code:
Private Sub Commune_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Set AChercher = Range("Tableau4[COMMUNES]").Find(Commune, lookat:=xlWhole) 'recherche la colonne commune
If AChercher Is Nothing Then Exit Sub
If Discipline.Text <> "" And Association.Text = "" Then 'agit sur la combo "asso"
Call Charge(Association, Filtre(Filtre(Range("Tableau4[COMMUNES]"), Range("Tableau4[DISCIPLINES]"), Commune), Range("Tableau4[ASSOCIATIONS]"), Discipline))
End If
End Sub
Cela donne le résultat escompté puisque lorsque je sélectionne la combo "asso", seules les assos répondant à la discipline et à la commune sélectionnées sont présentes :).

Par contre, je bloque pour la suite, à savoir :
2) choisir une asso puis une commune
Ce que je pense qu'il faut faire :
(le A de 1) ne change pas donc je n'interviens pas dans la combo "discipline")
- se placer dans la combo "asso" ("Si un des 2 est renseigné, on va remplir le 3ème en fonction de ce qu'on vient de choisir et de celui déjà renseigné") et lui dire que si discipline.texte <>"" et commune.texte ="", je sélectionne la liste "commune" à laquelle j'applique d'abord le filtre "discipline", puis le filtre "asso".

Si mon raisonnement n'est pas bon, indique-moi où il pêche.
S'il est bon, c'est peut-être que je me mélange dans l'application des filtres.
Sans pour autant me donner la réponse, dis-moi si j'interprète correctement la partie ci-dessous (peut-être que je ne la comprends pas) :
Call Charge(Discipline, Filtre(Range("Tableau4[COMMUNES]"), Range("Tableau4[DISCIPLINES]"), Commune))
Discipline=le nom de la liste appelée
Filtre(Range("Tableau4[COMMUNES]")=la colonne filtrée
Range("Tableau4[DISCIPLINES]=la colonne sur laquelle agit le filtre
Commune= la combo sélectionnée

Merci de ta patience;)
A+
 
Dernière édition:

david84

XLDnaute Barbatruc
Re : VBA Amélioration macro fichier association

Re re (regarde également le message #90, sinon tu ne va pas suivre !:D)

Bon, à force d'essayer, je pense que j'y suis (peut-être !);)
Je te joins mon fichier pour que tu puisses tester si besoin.
J'arrive à ce stade à choisir discipline=>asso=>commune
ou discipline=>commune=>asso.
Même si c'est bon (à toi de me le dire), regarde si le raisonnement exposé dans le message précédent est correct (corrige-moi au besoin) explique-moi quand même la partie
Code:
Citation:
Call Charge(Discipline, Filtre(Range("Tableau4[COMMUNES]"), Range("Tableau4[DISCIPLINES]"), Commune))
Discipline=le nom de la liste appelée
Filtre(Range("Tableau4[COMMUNES]")=la colonne filtrée
Range("Tableau4[DISCIPLINES]=la colonne sur laquelle agit le filtre
Commune= la combo sélectionnée
pour voir si j'ai compris ou si c'est un coup de chance ou du hasard.

D'autre part, concernant ta remarque dans ton message précédent:
Code:
Parait nickel, sauf que pour mettre CodePostal.ListIndex = 0, il faudrait utiliser Charge avec CodePostal
Quel est l'incidence de .ListIndex = 0 sur la macro ?
L'aide d'Excel dit concernant la propriété list.index :Identifie l'élément actuellement sélectionné dans un contrôle ListBox ou ComboBox.
Ok (.ListIndex = 0 donc 1ère ligne de la liste sélectionnée (?)). Est-de à dire qu'il faut que .listIndex soit rattachée à la liste chargée ?
Pour l'instant ce n'est pas clair pour moi.

En attendant tes éclaircissements, j'essaie d'avancer:rolleyes:
A+
 

Fichiers joints

JNP

XLDnaute Barbatruc
Re : VBA Amélioration macro fichier association

Re :),
Je pense qu'il y a un gros point sur lequel on est flou, et qui va éclairer, soit ma lanterne, soit la tienne :p...
Ma vision des choses (que j'avais cru commune, mais maintenant j'ai des doutes :D) est qu'une association est unique (ce qu'on appelle un ID) : un nom d'association correspond à une discipline unique ET une commune unique.
Du fait, pour moi, dès qu'une association est saisie, tout l'USF est renseigné ;).
Tu me dis
J'arrive à ce stade à choisir discipline=>asso=>commune
ce qui pour moi est impossible, vu que l'association ne peut pas être de 2 communes différentes, ni même de 2 disciplines différentes :eek:...
Je crois que c'est sur ce point là qu'il faut nous mettre d'accord en priorité :rolleyes:.
Pour le ListIndex = 0, le but était de proposer directement le premier élément de la liste dans le combo, mais ce n'est pas forcément une bonne idée, vu qu'on ne peux plus considérer le champs comme vide après :eek:.
A te lire :cool:
 

david84

XLDnaute Barbatruc
Re : VBA Amélioration macro fichier association

Re
Ma vision des choses (que j'avais cru commune, mais maintenant j'ai des doutes ) est qu'une association est unique (ce qu'on appelle un ID) : un nom d'association correspond à une discipline unique ET une commune unique.
Tu as raison sur le principe mais pas dans les faits:eek:.
En fait, il existe des asso omnisports dans lesquelles leurs différentes sections sont affiliées à différentes fédérations (donc disciplines). Dans le fichier, lorsque c'est le cas, elles sont enregistrées dans la discipline "omnisport", mais également dans les différentes disciplines auxquelles elles sont affiliées afin de pouvoir les retrouver en fonction de la discipline car sinon, tu ne le pourrais pas.
C'est pour cela qu'une même asso peut correspondre à plusieurs disciplines.
Tu as d'autres cas qui existent (assos affiliée à la fédération des ASPTT), mais je ne développe pas car le principe est le même.
Ceci-dit, le fichier a été construit comme cela au départ mais je demanderai par acquis de conscience au collègue si cette organisation doit être conservée ou pas.

Concernant les listes, ci-joint un fichier avec 2 possibilités en plus à savoir :
- rechercher par Discipline=>Commune=>Asso
- rechercher par Discipline=>Asso=>Commune
- rechercher par Commune=>Discipline=>Asso
- rechercher par Commune=>Asso=>Discipline
Je crois que je commence à comprendre le principe mais à toi de me le confirmer ;).
Merci:)
A+
 

Fichiers joints

JNP

XLDnaute Barbatruc
Re : VBA Amélioration macro fichier association

Re :),
Je crois que je commence à comprendre le principe mais à toi de me le confirmer ;).
Je confirme, tu as compris ;).
Et, si je ne m'abuse, toi qui est costaud en formule, une feuille aurait protesté vu que 3 cellules interdépendantes, c'est une référence circulaire, non :p ? Evidement, on aurait pu passer par VBA, mais avec uniquement les événements Change et Selection_Change, ce qui est un peu réducteur :D
Tu as raison sur le principe mais pas dans les faits:eek:.
Ça, c'est moins cool :(...
Par contre, pour le contourner, une proposition serait de remplir le champs discipline avec un séparateur :
Assoc X : Football
Assoc Y : Rugby
Assoc Z : Football;Rugby
Avec un simple Split sur le champs, on récupère les 2 ou plus diciplines. Par contre, pour la recherche, si on ne cherche pas sur la discipline entière, ton fameux Tennis de table sortira avec Tennis :rolleyes:...
Je pense qu'il faudrait quand même creuser de ce côté-là pour que la BD soit claire, car si on autorise 2 noms d'associations, il va y a avoir des doublons avec communes différentes, tél. différents, etc. :eek:.
A + :cool:
 

david84

XLDnaute Barbatruc
Re : VBA Amélioration macro fichier association

Je confirme, tu as compris .
Et, si je ne m'abuse, toi qui est costaud en formule, une feuille aurait protesté vu que 3 cellules interdépendantes, c'est une référence circulaire, non ? Evidement, on aurait pu passer par VBA, mais avec uniquement les événements Change et Selection_Change, ce qui est un peu réducteur
Bon, si j'ai compris, tant mieux mais je tâtonne quand même ! Je vais continuer à travailler sur les différents scénarii comme cela ça m'entraînera:rolleyes:.
En fait, c'est ton message d'hier qui m'a fait enfin comprendre ce que tu tentais de m'expliquer:).
en formule, une feuille aurait protesté vu que 3 cellules interdépendantes, c'est une référence circulaire, non ?
Si tu regardes dans le fichier à la feuille "consultation", j'étais arrivé à obtenir quelque chose approchant par formules en donnant la possibilité de chercher par l'entrée discipline, puis soit commune puis asso, soit asso puis commune, mais pour obtenir ce que j'ai par VBA, tu as raison:rolleyes:.

Code:
Par contre, pour le contourner, une proposition serait de remplir le champs discipline avec un séparateur :
Assoc X : Football
Assoc Y : Rugby
Assoc Z : Football;Rugby
Avec un simple Split sur le champs, on récupère les 2 ou plus diciplines. Par contre, pour la recherche, si on ne cherche pas sur la discipline entière, ton fameux Tennis de table sortira avec Tennis ...
Je pense qu'il faudrait quand même creuser de ce côté-là pour que la BD soit claire, car si on autorise 2 noms d'associations, il va y a avoir des doublons avec communes différentes, tél. différents, etc. .
Tu as peut-être raison:rolleyes:. Je verrai déjà avec le collègue pour savoir si ça lui créé des petits soucis et l'on réfléchira sur les solutions éventuelles.
Comme quoi c'est intéressant d'avoir ton opinion:).
A+
 

david84

XLDnaute Barbatruc
Re : VBA Amélioration macro fichier association

Bonjour à tous, salut JN:),
ci-joint le dernier fichier contenant les modifications dues à l'avancée de ce fil (et d'autres que j'ai ouverts), à savoir :
- créer ou modifier une fiche : utilisation de macros (RegExp) permettant de "cadrer" la saisie (N° de tel, N° SIRET, mail, Cedex), à améliorer mais ce n'est qu'un début;).
- Affichage des données enregistrée en majuscules (à part l'adresse mail) même si les données ont été effectuées en minuscules (ceci-dit, j'ai pensé près coup qu'il vaudrait peut-être mieux obliger d'entrée la saisie en majuscules de manière à éviter des problèmes possibles de doublons (le "é" de "les archers réunis" garde son accent même en majuscule ("LES ARCHERS RÉUNIS"), ce qui peut entraîner un doublon si l'asso existe déjà en majuscule dans la BD mais écrit "LES ARCHERS REUNIS", mais est-ce une meilleure solution et est-ce jouable ?).
- rechercher une fiche : chargement des différentes listes avec ou sans filtres permettant différentes recherches comme tu me l'as expliqué :
- Discipline=>asso=>commune
- Discipline=>commune=>asso
- commune=>Discipline=>asso
- commune=>asso=>Discipline
Bon, c'est surtout histoire de faire un point d'étape, et que tu puisses tester et me dire ce qui ne va pas, ce qu'on pourrait améliorer, et quoi faire maintenant (je verrai le collègue la semaine prochaine concernant le cas des assos multisport et lui soumettrait des idées, mais en attendant je peux avancer dans d'autres domaines).
Merci encore pour tout;).

De plus, je suis allé voir du côté des rubans personnalisés comme tu me l'avais conseillé (merci à Jean-Bernard pour son tuto:)).
Cela me plaît bien mais je pourrai voir cela ensuite (à moins qu'il ne faille l'envisager dès cette étape, auquel cas...)
A+
 

Fichiers joints

Dernière édition:

JNP

XLDnaute Barbatruc
Re : VBA Amélioration macro fichier association

Re :),
Ben dis donc, tu avances bien :p.
A comparer maintenant, tu préfères ton ancien fichier en formules, ou j'ai bien fait de t'emmener sur les sentiers de l'USF :D ?
Je vois aussi que RegExp rentre bien (pratique, non ?), et que les procédures Charge et Filtre sont assimilées ;).
Pour le ruban, rien d'urgent, car il n'apportera rien à l'USF. Et ensuite, les CallBack peuvent très bien appeler elles-mêmes une autre macro.
A bientôt, pour la suite des aventures :rolleyes:...
Bonne soirée :cool:
PS : Sucrer les accents des majuscules, ça doit être possible, je vais jeter un œil...
 
Dernière édition:

david84

XLDnaute Barbatruc
Re : VBA Amélioration macro fichier association

Re:)
Ben dis donc, tu avances bien .
Disons que j'ai un bon "parrain" et que je suis bien entouré:p !
A comparer maintenant, tu préfères ton ancien fichier en formules, ou j'ai bien fait de t'emmener sur les sentiers de l'USF ?
J'avoue que c'est une belle expérience;). L'outil est vraiment intéressant et se prête plus naturellement à la gestion d'une BD.
Je vois aussi que RegExp rentre bien (pratique, non ?), et que les procédures Charge et Filtre sont assimilées
Disons que l'on est sur la bonne voie mais que c'est encore fragile. Mais bon je pense en avoir compris les principes de base.
Pour le ruban, rien d'urgent, car il n'apportera rien à l'USF. Et ensuite, les CallBack peuvent très bien appeler elles-mêmes une autre macro.
Ok. Je vais quand même regarder d'un peu plus près le fichier et le tuto de Jean-Bernard :) en attendant que tu me donnes la suite du programme:D.
A bientôt, pour la suite des aventures ...
Je n'attends que ça ! :):):)
Merci pour tout et A+
 
Dernière édition:

JNP

XLDnaute Barbatruc
Re : VBA Amélioration macro fichier association

Re :),
Pour se mettre de bonne humeur dès le matin (après la triste nouvelle d'hier :eek:), à tester :
Code:
Private Sub Association_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If Shift = 4 Then
MsgBox "Utilisation de Alt interdit !", vbCritical
KeyCode = 0
End If
End Sub
Private Sub Association_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Select Case KeyAscii
Case 97 To 122
KeyAscii = KeyAscii - 32 ' A à Z
Case 192, 194, 196, 224, 226, 228
KeyAscii = 65 ' A
Case 200 To 203, 232 To 235
KeyAscii = 69 ' E
Case 199, 231
KeyAscii = 67 ' C
Case 238, 206, 239, 207
KeyAscii = 73 ' I
Case 249, 217
KeyAscii = 85 ' U
Case 212, 244
KeyAscii = 79 ' O
Case 32 ' Espace
Case Else
KeyAscii = 0
MsgBox "Caractère interdit !", vbCritical
End Select
End Sub
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 :p...
Allez, au boulot :D...
 

Staple1600

XLDnaute Barbatruc
Re : VBA Amélioration macro fichier association

Bonjour David84, JNP


Oh joie, Oh allégresse, sonnez trompettes.:)

Monsieur David, je puis officiellement vous inscrire dans le club des RegExpiens d'XLD ?
(Y' a de la place , nous ne sommes que trois (les autres n'étant pas officiellement inscrits, ou ne s'étant pas déclarés fanas de RegExp)

Merci professeur JNP.

PS: Vous avez vu que nous sommes nombreux à lire votre dialogue sur XLD.
 

Discussions similaires


Haut Bas