le_syd1961
Messages postés10Date d'inscriptionlundi 12 juin 2006StatutMembreDernière intervention23 novembre 2007
-
30 oct. 2007 à 13:04
le_syd1961
Messages postés10Date d'inscriptionlundi 12 juin 2006StatutMembreDernière intervention23 novembre 2007
-
7 nov. 2007 à 18:36
Bonjour a tous ....
Jusqu'a présent j'ai réussi à trouver tout ce que je souhaitais ds les forums (ici ou ailleurs ...) mais là ... je vois pas pourtant ce doit etre tout bête !...
Explication globale :
Je mets en place une feuille excell destinée a saisir des cartes de score de Golf... J'ai listé tous les parcours de France (eh oui !!!) en les triant par régions. Tout parcours de golf est identifié (dans les faits) par une carte de parcours indiquant, outre la difficulté globale du parcours, la difficulté de chaque trou (de 1 à 18), ordre de difficulté qui n est pas forcement l'ordre de jeu (le trou 1 peut etre le plus facile et en ce cas on dit que le handicap du trou est 18, le trou le plus difficile etant le trou Handicap 1).
En résumé, un parcours est defini par la succession des 18 "par (global)" (les trous se joue en 3, 4 ou 5 cps qd on est champion) et son "Handicap" (difficulté de 1 à 18 de chaque trou et qui permet de determiner, en fonction du niveau de chaque jouer (l'index du joueur), en combien de coups lui va devoir jouer chaque trou ...
Organisation de mon programme :
Dans une Userform, j'ai une frame contenant deux lignes de 18 textbox(es) ... une ligne de 18 pour les Pars et une de ligne de 18 pour les Handicaps et nommées P1 a P18 et H1 a H18. Afin de concatener facilement les 36 données à la file (dans une cellule attenante a celle du nom du parcours sur ma feuille de donnée "datas"), je transforme chaque valeur HCP(Handicap) en Base 19 pour n'avoir que 18 valeurs par le parcours.
Si, par exemple, pour un parcours donné j'ai pour valeur de handicap des 5 premiers trous "12 - 8 - 1 - 3 - 10" c est plus facile de stocker et manipuler une chaine alpha sous la forme "C813A" que de chercher ensuite ou se trouve la séparation entre les valeurs en Base 10 ...
Cette transformation de base 10 en base 19 se fait en transparence pour l'utilisateur ... il saisi donc dans la textbox H1 (pour l'exemple précité) : la valeur 12 ... Manque de bol avec ma procedure que voici :
Private Sub H1_Change() Val(3) Right(ActiveSheet.Range(Coordonne_dat), 17) ' Coordonne_dat chaine de 36 caracteres : 18 pour les Par et 18 pour les Hcp
Val(2) = Base10N(Newcard.H1.Value, 19) ' Base10N(Valeur,BaseX) va changer la valeur entree en base 19
Val(1) = Left(ActiveSheet.Range(Coordonne_dat), 18) ' Val(1) c'est la chaine AVANT le caractere a changer et Val(3) la chaine APRES
ActiveSheet.Range(Coordonne_dat) = Val(1) & Val(2) & Val(3) 'Et la je recompose la chaine que je sauve dans ActiveSheet.Range(Coordonne_dat)
Newcard.H1.BackColor = 8454042 ' Le fond précedement rouge (valeur a entrer) devient vert (valeur intégrée)
End Sub
la sous routine Base10N est appellée dés que l'utilisateur entre le chiffre "1" au lieu d'attendre que la saisie soit terminée pour se faire ....
Ma question est donc la suivante : Comment puis je faire pour ne lancer la Sub Hx_Change() seulement lorsque la touche Tab ou Enter est utilisée ??
Merci a vous ...
Yves
Le stress, c'est quand pour la premiere fois, la deuxieme fois tu peux pas ... l'angoisse, c est quand pour la deuxieme fois, la premiere fois tu peux pas !!!
A voir également:
Stopper l excecution d'une procedure jusqu a la fin de saisie de l'utilisateur d
le_syd1961
Messages postés10Date d'inscriptionlundi 12 juin 2006StatutMembreDernière intervention23 novembre 2007 7 nov. 2007 à 18:36
Merci Renfield de t'interresser a mon soucis ...
pour reprendre tes remarques une a une :
- Val est un mot clé reservé Aucun soucis avec la variable Val(x) ... pas de message d erreur a ce niveau la ...
Mais je peux changer si ça gène ...
- Tu ne déclares aucune variable ? Toutes mes variables sont déclarées en "Public" dans le Module de mon classeur
______________________________________________________________________
' Déclaration des variables du projet dans MODULE1
Option Explicit
Public Ctrl As Control
Public Region As String, Golf As String, Golf_ID As String
Public Colonne As String, Colonne_dat As String
Public New_Golf As String, Message As String, Val(1 To 3)As String
Public Coordonne As String, Coordonne_datAs String, Val_dat As String
Public Touche As Integer, Index As Integer, Slope As Integer, Check As Integer
Public SSS As Integer, Ligne As Integer, Ligne_dat As Integer
Public Region_num As Single, In_Jour As Single, In_Mois As Single, In_An As Single
Public i As Single, Jour As Single, Mois As Single, An As Single
Public V_Slope(1 To 4) As String, V_SSS(1 To 4) As String, Def_Golf_ID As String
Public Tampon(1 To 4) As String, Golf_ID_Check As String
Public Blanc As Boolean, Jaune As Boolean, Bleu As Boolean, Rouge As Boolean
Public Const DICTIONNARY = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
Public pnr As Boolean
_______________________________________________________________________
- Aucune verification dans ton Else... tu fais Right(..., 17) sans avoir validé la saisie
J'utilise la valeur entrée dans la texbox (voir la ligne ici en gras ...)
la valeur est ensuite enregistrée en base 19 à la bonne position dans la chaine stockée dans l'ActiveSheet.Range(Coordonne_dat)
________________________________________________________________________
Private Sub H1_AfterUpDate() If Newcard.H1.Value "" Or Newcard.H1.Value "Z" Or Newcard.H1.Value = "0" Then
Newcard.H1.BackColor = 10628345
Newcard.H1.Value = "0"
Else
Val(3) = Right(Tampon(1), 17)
Val(2) = Base10N(Newcard.H1.Caption, 19)
Val(1) = Left(Tampon(1), 18)
Tampon(3) = Val(1) & Val(2) & Val(3) & "-" & Tampon(2)
ActiveSheet.Range("I1") = Tampon(3)
ActiveSheet.Range(Coordonne_dat) = Tampon(3)
Tampon(1) = Left(Tampon(3), 36)
Newcard.H1.BackColor = 8454042
End If
End Sub
____________________________________________________________
- Tentes de debugger ton code en pas, en ajoutant un/des point d'arret (F9) He bien oui ... mais en refaisant tourner le code pour vous détailler plus mon blème je me rends compte
que ça bugge pas a cause de AfterUpdate mais a cause du .Caption !!!
que j'ai modifié en .Value (on essaie parfois des trucs en tatonnant quand on connait pas gd chose comme moi sourire)
ET CA MARCHE .... enfin pour le moment ... Merci en tout cas à vous (MPi pour ler AfterUpDate et Renfield pour m'avoir fait revenir sur mon code au bon endroit ...)
Le stress, c'est quand pour la premiere fois, la deuxieme fois tu peux pas ... l'angoisse, c est quand pour la deuxieme fois, la premiere fois tu peux pas !!!
le_syd1961
Messages postés10Date d'inscriptionlundi 12 juin 2006StatutMembreDernière intervention23 novembre 2007 30 oct. 2007 à 20:39
Ok merci j'essaie ca ...
Le stress, c'est quand pour la premiere fois, la deuxieme fois tu peux pas ... l'angoisse, c est quand pour la deuxieme fois, la premiere fois tu peux pas !!!
le_syd1961
Messages postés10Date d'inscriptionlundi 12 juin 2006StatutMembreDernière intervention23 novembre 2007 6 nov. 2007 à 10:22
Bon ... je bloque la !...
lorsque j'utilise Private Sub Textbox_Exit j'obtiens une erreur j'ai essayé ça : Private Sub Textbox_AfterUpDate()
(avec of course Textbox = Nom reel de ma textbox en l'occurence de H1 a H18) mais ca bloque aussi ...
Je ne sais pas comment formuler le fait d'attendre la fin d'une saisie avant de poursuivre la procedure ...
cpp
Private Sub H1_AfterUpDate() If Newcard.H1.Value "" Or Newcard.H1.Value "Z" Or Newcard.H1.Value = "0" Then
Newcard.H1.BackColor = 10628345
Newcard.H1.Value = "0"
Else
Val(3) = Right(Tampon(1), 17)
Val(2) = Base10N(Newcard.H1.Caption, 19)
Val(1) = Left(Tampon(1), 18)
Tampon(3) = Val(1) & Val(2) & Val(3) & "-" & Tampon(2)
ActiveSheet.Range("I1") = Tampon(3)
ActiveSheet.Range(Coordonne_dat) = Tampon(3)
Tampon(1) = Left(Tampon(3), 36)
Newcard.H1.BackColor = 8454042
End If
End Sub
/cpp
Le stress, c'est quand pour la premiere fois, la deuxieme fois tu peux pas ... l'angoisse, c est quand pour la deuxieme fois, la premiere fois tu peux pas !!!
le_syd1961
Messages postés10Date d'inscriptionlundi 12 juin 2006StatutMembreDernière intervention23 novembre 2007 6 nov. 2007 à 10:23
je ne sais pas utiliser la balise cpp et /cpp désolé !
Merci de m'apporter une reponse ... c est rageant d etre bloqué sur une broutille pareille !! (et je ne parle pas de la balise !)
Le stress, c'est quand pour la premiere fois, la deuxieme fois tu peux pas ... l'angoisse, c est quand pour la deuxieme fois, la premiere fois tu peux pas !!!
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 7 nov. 2007 à 06:40
- Val est un mot clé reservé
- tu ne déclare aucune variable ?
- aucune verification dans ton Else... tu fais Right(..., 17) sans avoir validé la saisie
- tentes de debugger ton code en pas, en ajoutant un/des point d'arret (F9)
- cpp /cpp n'existe pas, faut formatter a la main, ou utiliser un outil (tools.codes-sources.com)
sois moins évasif, "ca bloque" est un constat qui a tendance a pas nous apprendre grand chose... un comportement, un code erreur...