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:

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+
 

Pièces jointes

  • Test_New_BD_asso_03_10.zip
    111.9 KB · Affichages: 67

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+
 

Pièces jointes

  • Test_New_BD_asso_bis_03_10.zip
    113 KB · Affichages: 67
  • Test_New_BD_asso_bis_03_10.zip
    113 KB · Affichages: 64
  • Test_New_BD_asso_bis_03_10.zip
    113 KB · Affichages: 62

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+
 

Pièces jointes

  • Test_BD_JNP_05_10.zip
    121.5 KB · Affichages: 71
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.
 

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:

Discussions similaires

Réponses
7
Affichages
292
Réponses
13
Affichages
256
Réponses
1
Affichages
77
Compte Supprimé 979
C