remplir un Feild Name [Acess] - SQL/NoSQL - Programmation
Marsh Posté le 02-10-2006 à 17:08:03
en faite, je viens de m'aperçevoir d'une chose.
La suite que je veux n'est en faite pas de la Base 7 !!
Voici la suite:
01
12
23
34
45
56
60
71
82
93
...
Base 17 ?
quelqu'un peu m'aider ?
merci grandement !
Zorh.
Marsh Posté le 02-10-2006 à 17:27:17
Bonsoir,
j'ai trouvé cela pour toi :
Private Function Inverser(ByVal strChaine As System.String)
Dim intI As System.Int32
Dim strS As System.String
For intI = strChaine.Length - 1 To 0 Step -1
strS &= strChaine.Substring(intI, 1)
Next
lblResult.Text = strS
End Function
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim intNombre, intBase, intReste, intQuotient As System.Int32
intNombre = CInt(txtNombre.Text)
intBase = CInt(txtBase.Text)
intQuotient = 1
lblResult.Text = ""
' Tant que le quotient est différent de 0, le reste est affecté à chaque position du nombre converti
Do While intQuotient <> 0
intQuotient = intNombre \ intBase
intReste = intNombre Mod intBase
intNombre = intQuotient
' Si le reste > 9 ( code hexadécimal et plus ), une lettre est affecté au chiffre
If intReste > 9 Then
lblResult.Text &= Chr(intReste + 55)
Else
lblResult.Text &= intReste
End If
Loop
' On inverse la chaine puisque l'algorithme donne le nombre converti à l'envers
Inverser(lblResult.Text)
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim intNombre1, intBase1, intResult, intJ As System.Int32
intBase1 = CInt(txtBase1.Text)
' Convertit le nombre en base X en un nombre décimal
For intJ = 0 To txtNombre1.Text.Length - 1 Step 1
If Char.IsLetter(txtNombre1.Text.Substring((txtNombre1.Text.Length - 1 - intJ), 1)) Then
'Si il y a une lettre, on convertit en son chiffre décimal
'On prend la chaîne à l'envers puisque l'ordre des puissances est inversée
'par rapport à la chaîne de caractères
intResult += (Asc(txtNombre1.Text.Substring((txtNombre1.Text.Length - 1 - intJ), 1)) - 55) * intBase1 ^ intJ
Else
intResult += txtNombre1.Text.Substring((txtNombre1.Text.Length - 1 - intJ), 1) * intBase1 ^ intJ
End If
Next
lblResult1.Text = intResult
End Sub
sur copernic agent en demandant : "base 7" vba
Marsh Posté le 02-10-2006 à 21:21:37
Yahou !!!
bon je v me pendre et je regarderai sa demain quand je serais frais.
merci bcp !
Zorh.
Marsh Posté le 02-10-2006 à 21:45:28
Bonne nuit,
je n'ai pas testé, mais c'est censé dans la séquence bouton1 clic transformer un nombre dans la base indiquée et le bouton2 clic faire la transformation inverse.
pour créer le record je suppose que tu sais faire.
Cordialement
Marsh Posté le 03-10-2006 à 14:18:21
le revient sur mon sujet,
j'ai effectivement maintenant la possibilité de compter en base 7.
ma suite est en faite pas pareil ...
123456
6 se compte en base 7 cad de 0 à 6
mais le reste des chiffres se compte normallement ....
exemple:
1001
1012
1023
1034
1045
......
comment faire ?
Merci !
Zorh.
Marsh Posté le 03-10-2006 à 17:22:36
Bonsoir,
Je n'ai pas bien compris, 1001 donne 1001? etc??? je vais regarder ce soir comment fonctionne le module
Cordialement
Marsh Posté le 03-10-2006 à 21:22:09
Bonsoir,
J'ai adapté la première partie à VBA:
Texte0 contient la valeur à convertir
Texte2 le résultat
Texte6 la base
Commande4 le bouton de commande
cela semble fonctionner
Private Function Inverser(ByVal strChaine As String)
Dim intI As Long
Dim strS As String
montout = strChaine
compteur = Len(strChaine)
'montout = Selection.Text
monresultat = ""
For c = 1 To compteur
moncar = Mid(montout, c, 1)
monresultat = moncar + monresultat
Next c
Texte2 = monresultat
End Function
Private Sub Commande4_Click()
Dim intNombre, intBase, intReste, intQuotient As Long
intNombre = CInt(Texte0)
intBase = CInt(Texte6)
intQuotient = 1
Texte2 = ""
' Tant que le quotient est différent de 0, le reste est affecté à chaque position du nombre converti
Do While intQuotient <> 0
intQuotient = intNombre \ intBase
intReste = intNombre Mod intBase
intNombre = intQuotient
' Si le reste > 9 ( code hexadécimal et plus ), une lettre est affecté au chiffre
If intReste > 9 Then
Texte2 = Texte2 + Chr(intReste + 55)
Else
Texte2 = Texte2 + Str(intReste)
End If
Loop
' On inverse la chaine puisque l'algorithme donne le nombre converti à l'envers
Inverser (Texte2)
End Sub
Cordialement
Marsh Posté le 03-10-2006 à 21:46:13
Re,
tu veux:
01
12
....
93
104
115
126
130
141
152
...??
1002
1013
...????
Marsh Posté le 03-10-2006 à 22:00:54
Re re re
ne serait-ce pas cela que tu veux?
110 étant en exemple:
For i = 0 To 110
nbvoulu = 10 * i + ((i + 1) Mod 7)
MsgBox nbvoulu
Next i
Cordialement
Marsh Posté le 04-10-2006 à 11:12:17
seniorpapou Merci !
voici se que j'ai réussi à faire.
Function suivant(nb As Long) As Long
Dim tempo As Long
tempo = nb + 11
If Right(tempo, 1) = "7" Then tempo = tempo - 7
suivant = tempo
End Function
Sub calcul_LTA()
Dim mabase As DAO.Database
Dim matable As DAO.Recordset
Dim debut As Long
Dim nb_suite As Long
Dim boucle As Long
Set mabase = CurrentDb()
Set matable = mabase.OpenRecordset("Table1" )
debut = CLng(InputBox("début de la suite ??" ))
nb_suite = CLng(InputBox("Nombre de donné dans la suite ??" ))
For boucle = 1 To nb_suite
debut = suivant(debut)
matable.AddNew
matable("LTA" ) = debut
matable.Update
Next boucle
Set mabase = Nothing
End Sub
Cordialement,
Marsh Posté le 04-10-2006 à 14:05:06
Bonjour,
j'ai testé ta séquence, elle est presqu'au point. Si je peux me permettre une suggestion pour l'améliorer:
1) tester la validité de "debut" à la saisie
j'ai saisi 9 et c'est très bien passé, hors, il n'est pas dans la série.
2) la valeur saisie dans début n'est pas prise dans le fichier parce que "suivant" fait +11 tout de suite. Donc, si j'introduis 10 la première valeur est 21, si j'introduis 16 la première valeur est 20, si j'introduis 0 la première valeur est 11 . j'avais lu dans tes posts que ta première valeur était 1 (01).
tiens nous au courant.
Cordialement
Marsh Posté le 04-10-2006 à 14:24:35
bonjour seniorpapou,
effectivement j'ai eu une série pour faire mon projet et je n'est rien de plus.
série:
1001
1012
1023
1034
1045
1056
1060
1071
1082
1093
1104
1115
....
ta suggestion concernant le test de validité sur la saisie "debut" est très bonne !
malheureusement je vois pas comme je peus faire sa si tu as une idée ^^
je suis un piètre programmeur !
merci pour tout !
Zorh.
Marsh Posté le 04-10-2006 à 14:42:04
c bon j'ai trouvé
SAISIE:
debut = CLng(InputBox("début de la suite ??" ))
If Right(debut, 1) > 6 Then
MsgBox ("N° érroné !" )
GoTo SAISIE:
end if
Marsh Posté le 04-10-2006 à 14:55:01
Bon au final :
Function suivant(nb As Long) As Long
Dim tempo As Long
tempo = nb + 11
If Right(tempo, 1) = "7" Then tempo = tempo - 7
suivant = tempo
End Function
Sub calcul_LTA()
Dim mabase As DAO.Database
Dim matable As DAO.Recordset
Dim debut As Long
Dim nb_suite As Long
Dim boucle As Long
Set mabase = CurrentDb()
Set matable = mabase.OpenRecordset("Table1" )
SAISIE:
debut = CLng(InputBox("début de la suite ??" ))
If Right(debut, 1) > 6 Then
MsgBox ("N° LTA érroné !" )
GoTo SAISIE:
End If
debut = debut - 11
nb_suite = CLng(InputBox("Nombre de LTA disponible ??" ))
For boucle = 1 To nb_suite
debut = suivant(debut)
matable.AddNew
matable("LTA" ) = debut
matable.Update
Next boucle
Set mabase = Nothing
End Sub
tu aurai quelque chose à dire sur ça ?
merci de ton point de vue seniorpapou.
Zorh.
Marsh Posté le 04-10-2006 à 15:32:41
Bonjour,
En première lecture cela semble bon.
Je contrôlerai tout à l'heure
Cordialement
Marsh Posté le 04-10-2006 à 15:47:59
re,re
comme je vois que tu es en ligne:
si je mets 10, j'ai 10,21 etc...
si je mets 11, j'ai 11,22,etc ...est-ce cela que tu veux?
Marsh Posté le 04-10-2006 à 16:23:03
bien vu
tu as une suggestion de code pour sa ? je commence a être à sec et j'ai pas une grande connaissance en vba.
Merci.
Marsh Posté le 02-10-2006 à 11:50:18
Bonjour à tous,
Je souhaite créée une table comme suit:
A | B | C | D ...
w x y z
Sa j'y arrive
j'aimerai pouvoir crée la table vierge et avec un Formulaire lui demander de saisir une valeur début et fin
Toutes les valeurs comprise entre seront "injecter" dans A.
exemple valeur Saisie 5 (puis) 9
résultat dans la table:
A | B | C | D ...
5 x y z
6
7
8
9
jusqu'là je pense que sa doit être possible.
maintenant j'aimerai que "l'incrémenation" de face en BASE 7
cad -> ( révision math ) 0, 1, 2, 3, 4, 5, 6, 10, 11, ...
j'espère que vous m'avais suivie.
j'utilise acess que peu souvant et je ne serait pas faire cela si quelqu'un pourrai m'aider ?
je lui en remerci !
Cordialement,
Zorh.