Bonjour
Je voulais créer des nombres complémentaires pour afficher des opérations du
type suivant (choisir la taille des nombres, la quantité de leurs chiffres
qui seront complémentaires; mélanger ou non ces nombres etc...)
37 + 13 + 48 + 12 = (seul le dernier chiffre est le complémentaire à 10 du
nombre suivant) 7 + 3 = 10 et 8 + 2 = 10
ou 456 + 244 + 512 + 188 = (seul les deux derniers chiffres sont
complémentaires à 100 du nombre suivant) 56 + 44 = 100 et 12 + 88 = 100
j'ai donc créer la classe suivante :
'additionner des nombres qui sont complémentaires les uns des autres
Public Function Ope4(ByRef Tableau() As Variant, ByVal high As Long, ByVal _
low As Long, ByVal Deci As Boolean, ByVal NbrChifApVirgule As Integer, ByVal
_
Combien As Integer, Melanger As Boolean, NbrChifrPriCpte As Integer) As
Variant
Randomize Timer
ReDim Tableau(0 To Combien, 0 To Combien)
Dim y, v, Comp As Integer
Dim N2, N1 As Integer
v = NbrChifApVirgule
'complémentaire à combien 10, 100, 1000 ?
Comp = 1
For y = 1 To NbrChifrPriCpte
Comp = 10 * Comp
Next y
Select Case Deci
Case False 'cas des entiers
For v = 0 To Combien
For y = 0 To Combien
N1 = Int((high - low + 1) * Rnd) + low 'je tire un nombre
x = Right(N1, NbrChifrPriCpte) 'je teste la fin de celui-ci
If x = 0 Then
x = 10
End If
Tableau(v, y) = N1 ' je le mets dans le tableau
Ope4 = Tableau(v, y)
y = y + 1 'j'avance
N2 = Int((high - low + 1) * Rnd) + low 'je tire le nombre suivant
dont la fin doit être le complémentaire du précédent
N2 = Left(N2, Len(N2) - (NbrChifrPriCpte)) & (Comp - x) 'je
l'adapte
Tableau(v, y) = N2 ' je le mets dans le tableau
Ope4 = Tableau(v, y)
N2 = 0
N1 = 0
Next y
v = v + 1
Next v
Case Else 'cas des décimaux
End Select
End Function
et dans ma form1 contenant des labels et des command button
Private Sub Command12_Click()
Dim t() As Variant
Dim c6 As Class1
Set c6 = New Class1
For i = 0 To 3
Label4(i) = c6.Ope4(t(), 100, 0, False, 0, 1, False, 1)
'Label4(i) = FormatNumber(Label4(i))
Next i
End Sub
je suis incapable d'afficher l'ensemble des nombres fabriqués par la Ope4.
Apparemment ils sont bien fabriqués (avec F8 je contrôle les infobulles du
code et c ok)
Par contre je ne sais pas sélectionner dans tout ce qui est fabriqué
(collection de nombres ?) au niveau de ma form1 afin de les afficher comme
je le souhaite.
merci de votre aide
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Jean-Marc
"Pascal" a écrit dans le message de news:41b20b44$0$8116$
Bonjour Je voulais créer des nombres complémentaires pour afficher des opérations
du
type suivant (choisir la taille des nombres, la quantité de leurs chiffres qui seront complémentaires; mélanger ou non ces nombres etc...)
37 + 13 + 48 + 12 = (seul le dernier chiffre est le complémentaire à 10 du nombre suivant) 7 + 3 = 10 et 8 + 2 = 10 ou 456 + 244 + 512 + 188 = (seul les deux derniers chiffres sont complémentaires à 100 du nombre suivant) 56 + 44 = 100 et 12 + 88 = 100 j'ai donc créer la classe suivante :
<snip le code>
je suis incapable d'afficher l'ensemble des nombres fabriqués par la Ope4. Apparemment ils sont bien fabriqués (avec F8 je contrôle les infobulles du code et c ok) Par contre je ne sais pas sélectionner dans tout ce qui est fabriqué (collection de nombres ?) au niveau de ma form1 afin de les afficher comme je le souhaite.
Hello,
j'ai remis un peu d'ordre dans la fonction de la classe, pour que au moins ça puisse compiler :-( Ton code a des gros soucis (algorithmiques, techniques) et il ne fait pas ce que tu crois. Difficile de t'expliquer en quelques lignes tout ce qui ne va pas. Au minimum, essaie de lire et de bien comprendre comment marche un retour de fonction en VB. Tu verras en particulier que les affectations Ope4 = Tableau(...) ne veulent rien dire dans ce contexte. Si tu passes un tableau Byref, c'est précisément que tu comptes le modifier. Donc utilises le tableau lors du retour de la fonction pour l'affichage. Je te renvoie à la lecture (utile je pense) de:
En annexe, le code de la fonction, un peu corrigé etcommenté.
' ' IL FAUT TOUJOURS METTRE CECI EN TETE DE MODULE, FORM, ETC. ' C EST LA SEULE FACON DE VOIR LES DECLARATIONS MANQUANTES Option Explicit
Public Function Ope4(ByRef Tableau() As Variant, ByVal high As Long, ByVal _ low As Long, ByVal Deci As Boolean, ByVal NbrChifApVirgule As Integer, ByVal _ Combien As Integer, Melanger As Boolean, NbrChifrPriCpte As Integer) As Variant
ReDim Tableau(0 To Combien, 0 To Combien) ' ATTENTION : il faut typer CHAQUE variable Dim y As Integer, v As Integer, Comp As Integer Dim N2 As Integer, N1 As Integer ' idem, typer chaque variable ' il faut délclarer x ! on le voit de suite avec Option explicit Dim x As Integer
' on termine les déclarations avant de commencer le code Randomize Timer
v = NbrChifApVirgule 'complémentaire à combien 10, 100, 1000 ? Comp = 1 ' toujours indenter dans un for For y = 1 To NbrChifrPriCpte Comp = 10 * Comp Next y
Select Case Deci Case False 'cas des entiers For v = 0 To Combien ' idem => indenter proprement For y = 0 To Combien ' idem
N1 = Int((high - low + 1) * Rnd) + low 'je tire un nombre ' LA fonction Right return un Variant String ' et tu teste avec 0 (un entier) ' NON !! convertir en entier alors! ' en plus, on ne doit pas utiliser Right ' mais right$ x = CInt(Right$(N1, NbrChifrPriCpte)) 'je teste la fin de celui-ci If x = 0 Then x = 10 ' on indente proprement End If
Tableau(v, y) = N1 ' je le mets dans le tableau
' pourquoi ces assignations en plein milieu ?? but ?? ' le principal probleme ici: voir la doc Ope4 = Tableau(v, y)
' <<=== horrible!! - à proscrire absolument y = y + 1 'j'avance
N2 = Int((high - low + 1) * Rnd) + low 'je tire le nombre suivant dont la fin doit être le complémentaire du précédent N2 = Left(N2, Len(N2) - (NbrChifrPriCpte)) & (Comp - x) 'je l 'adapte Tableau(v, y) = N2 ' je le mets dans le tableau
' pourquoi ces assignations en plein milieu ?? but ?? ' idem, le probleme vient de la Ope4 = Tableau(v, y)
N2 = 0 N1 = 0 Next y
v = v + 1 ' !!! <== c'est quoi cette horreur ????????? ' en faisant ça tu avances v 2 par 2 !! c'est le but ???? ' si oui, ecrire plutot : for v = 0 to combien step 2
Next v Case Else 'cas des décimaux
End Select End Function
-- Jean-marc "There are only 10 kind of people those who understand binary and those who don't."
"Pascal" <scalpanospm@wanadoo.rf> a écrit dans le message de
news:41b20b44$0$8116$8fcfb975@news.wanadoo.fr...
Bonjour
Je voulais créer des nombres complémentaires pour afficher des opérations
du
type suivant (choisir la taille des nombres, la quantité de leurs chiffres
qui seront complémentaires; mélanger ou non ces nombres etc...)
37 + 13 + 48 + 12 = (seul le dernier chiffre est le complémentaire à 10 du
nombre suivant) 7 + 3 = 10 et 8 + 2 = 10
ou 456 + 244 + 512 + 188 = (seul les deux derniers chiffres sont
complémentaires à 100 du nombre suivant) 56 + 44 = 100 et 12 + 88 = 100
j'ai donc créer la classe suivante :
<snip le code>
je suis incapable d'afficher l'ensemble des nombres fabriqués par la Ope4.
Apparemment ils sont bien fabriqués (avec F8 je contrôle les infobulles du
code et c ok)
Par contre je ne sais pas sélectionner dans tout ce qui est fabriqué
(collection de nombres ?) au niveau de ma form1 afin de les afficher comme
je le souhaite.
Hello,
j'ai remis un peu d'ordre dans la fonction de la classe, pour que
au moins ça puisse compiler :-( Ton code a des gros soucis
(algorithmiques, techniques) et il ne fait pas ce que tu crois.
Difficile de t'expliquer en quelques lignes tout ce qui ne va pas.
Au minimum, essaie de lire et de bien comprendre comment marche un
retour de fonction en VB. Tu verras en particulier que les
affectations Ope4 = Tableau(...) ne veulent rien dire dans ce
contexte. Si tu passes un tableau Byref, c'est précisément que tu
comptes le modifier. Donc utilises le tableau lors du retour de la
fonction pour l'affichage. Je te renvoie à la lecture (utile je
pense) de:
En annexe, le code de la fonction, un peu corrigé etcommenté.
'
' IL FAUT TOUJOURS METTRE CECI EN TETE DE MODULE, FORM, ETC.
' C EST LA SEULE FACON DE VOIR LES DECLARATIONS MANQUANTES
Option Explicit
Public Function Ope4(ByRef Tableau() As Variant, ByVal high As Long, ByVal _
low As Long, ByVal Deci As Boolean, ByVal NbrChifApVirgule As Integer, ByVal
_
Combien As Integer, Melanger As Boolean, NbrChifrPriCpte As Integer) As
Variant
ReDim Tableau(0 To Combien, 0 To Combien)
' ATTENTION : il faut typer CHAQUE variable
Dim y As Integer, v As Integer, Comp As Integer
Dim N2 As Integer, N1 As Integer ' idem, typer chaque variable
' il faut délclarer x ! on le voit de suite avec Option explicit
Dim x As Integer
' on termine les déclarations avant de commencer le code
Randomize Timer
v = NbrChifApVirgule
'complémentaire à combien 10, 100, 1000 ?
Comp = 1
' toujours indenter dans un for
For y = 1 To NbrChifrPriCpte
Comp = 10 * Comp
Next y
Select Case Deci
Case False 'cas des entiers
For v = 0 To Combien ' idem => indenter proprement
For y = 0 To Combien ' idem
N1 = Int((high - low + 1) * Rnd) + low 'je tire un nombre
' LA fonction Right return un Variant String
' et tu teste avec 0 (un entier)
' NON !! convertir en entier alors!
' en plus, on ne doit pas utiliser Right
' mais right$
x = CInt(Right$(N1, NbrChifrPriCpte)) 'je teste la fin de
celui-ci
If x = 0 Then
x = 10 ' on indente proprement
End If
Tableau(v, y) = N1 ' je le mets dans le tableau
' pourquoi ces assignations en plein milieu ?? but ??
' le principal probleme ici: voir la doc
Ope4 = Tableau(v, y)
' <<=== horrible!! - à proscrire absolument
y = y + 1 'j'avance
N2 = Int((high - low + 1) * Rnd) + low 'je tire le nombre
suivant dont la fin doit être le complémentaire du précédent
N2 = Left(N2, Len(N2) - (NbrChifrPriCpte)) & (Comp - x) 'je
l 'adapte
Tableau(v, y) = N2 ' je le mets dans le tableau
' pourquoi ces assignations en plein milieu ?? but ??
' idem, le probleme vient de la
Ope4 = Tableau(v, y)
N2 = 0
N1 = 0
Next y
v = v + 1 ' !!! <== c'est quoi cette horreur ?????????
' en faisant ça tu avances v 2 par 2 !! c'est le but ????
' si oui, ecrire plutot : for v = 0 to combien step 2
Next v
Case Else 'cas des décimaux
End Select
End Function
--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."
"Pascal" a écrit dans le message de news:41b20b44$0$8116$
Bonjour Je voulais créer des nombres complémentaires pour afficher des opérations
du
type suivant (choisir la taille des nombres, la quantité de leurs chiffres qui seront complémentaires; mélanger ou non ces nombres etc...)
37 + 13 + 48 + 12 = (seul le dernier chiffre est le complémentaire à 10 du nombre suivant) 7 + 3 = 10 et 8 + 2 = 10 ou 456 + 244 + 512 + 188 = (seul les deux derniers chiffres sont complémentaires à 100 du nombre suivant) 56 + 44 = 100 et 12 + 88 = 100 j'ai donc créer la classe suivante :
<snip le code>
je suis incapable d'afficher l'ensemble des nombres fabriqués par la Ope4. Apparemment ils sont bien fabriqués (avec F8 je contrôle les infobulles du code et c ok) Par contre je ne sais pas sélectionner dans tout ce qui est fabriqué (collection de nombres ?) au niveau de ma form1 afin de les afficher comme je le souhaite.
Hello,
j'ai remis un peu d'ordre dans la fonction de la classe, pour que au moins ça puisse compiler :-( Ton code a des gros soucis (algorithmiques, techniques) et il ne fait pas ce que tu crois. Difficile de t'expliquer en quelques lignes tout ce qui ne va pas. Au minimum, essaie de lire et de bien comprendre comment marche un retour de fonction en VB. Tu verras en particulier que les affectations Ope4 = Tableau(...) ne veulent rien dire dans ce contexte. Si tu passes un tableau Byref, c'est précisément que tu comptes le modifier. Donc utilises le tableau lors du retour de la fonction pour l'affichage. Je te renvoie à la lecture (utile je pense) de:
En annexe, le code de la fonction, un peu corrigé etcommenté.
' ' IL FAUT TOUJOURS METTRE CECI EN TETE DE MODULE, FORM, ETC. ' C EST LA SEULE FACON DE VOIR LES DECLARATIONS MANQUANTES Option Explicit
Public Function Ope4(ByRef Tableau() As Variant, ByVal high As Long, ByVal _ low As Long, ByVal Deci As Boolean, ByVal NbrChifApVirgule As Integer, ByVal _ Combien As Integer, Melanger As Boolean, NbrChifrPriCpte As Integer) As Variant
ReDim Tableau(0 To Combien, 0 To Combien) ' ATTENTION : il faut typer CHAQUE variable Dim y As Integer, v As Integer, Comp As Integer Dim N2 As Integer, N1 As Integer ' idem, typer chaque variable ' il faut délclarer x ! on le voit de suite avec Option explicit Dim x As Integer
' on termine les déclarations avant de commencer le code Randomize Timer
v = NbrChifApVirgule 'complémentaire à combien 10, 100, 1000 ? Comp = 1 ' toujours indenter dans un for For y = 1 To NbrChifrPriCpte Comp = 10 * Comp Next y
Select Case Deci Case False 'cas des entiers For v = 0 To Combien ' idem => indenter proprement For y = 0 To Combien ' idem
N1 = Int((high - low + 1) * Rnd) + low 'je tire un nombre ' LA fonction Right return un Variant String ' et tu teste avec 0 (un entier) ' NON !! convertir en entier alors! ' en plus, on ne doit pas utiliser Right ' mais right$ x = CInt(Right$(N1, NbrChifrPriCpte)) 'je teste la fin de celui-ci If x = 0 Then x = 10 ' on indente proprement End If
Tableau(v, y) = N1 ' je le mets dans le tableau
' pourquoi ces assignations en plein milieu ?? but ?? ' le principal probleme ici: voir la doc Ope4 = Tableau(v, y)
' <<=== horrible!! - à proscrire absolument y = y + 1 'j'avance
N2 = Int((high - low + 1) * Rnd) + low 'je tire le nombre suivant dont la fin doit être le complémentaire du précédent N2 = Left(N2, Len(N2) - (NbrChifrPriCpte)) & (Comp - x) 'je l 'adapte Tableau(v, y) = N2 ' je le mets dans le tableau
' pourquoi ces assignations en plein milieu ?? but ?? ' idem, le probleme vient de la Ope4 = Tableau(v, y)
N2 = 0 N1 = 0 Next y
v = v + 1 ' !!! <== c'est quoi cette horreur ????????? ' en faisant ça tu avances v 2 par 2 !! c'est le but ???? ' si oui, ecrire plutot : for v = 0 to combien step 2
Next v Case Else 'cas des décimaux
End Select End Function
-- Jean-marc "There are only 10 kind of people those who understand binary and those who don't."
Pascal
bon j'ai changé mon fusil d'épaule et j'ai essayé autre chose:
créer une classe3
Option Explicit 'tirage aléatoire de nombres entiers ou décimaux Public Function Rand(ByVal high As Long, ByVal low As Long, ByVal Deci As Boolean, _ ByVal NbrChifApVirgule As Integer) As Variant
Dim i As Integer, v As Integer v = NbrChifApVirgule Select Case Deci Case False 'entiers Rand = Int((high - low + 1) * Rnd) + low Rand = FormatNumber(Rand, v, vbFalse, vbFalse, vbUseDefault) Case Else 'décimaux Rand = ((high - low + 1) * Rnd) + low Rand = FormatNumber(Rand, v, vbFalse, vbFalse, vbUseDefault) End Select End Function
puis dans ma form contenant des labels et un cmdbutton :
Private Sub Command13_Click()
Dim c4 As Class3 Set c4 = New Class3 Dim i As Integer, x As Integer, NbrChifrPriCpte As Integer Dim Comp As Integer, Combien As Integer Dim T() As Variant
Combien = 10 'Combien de nombres ? 'complémentaire à combien 10, 100, 1000 ?
NbrChifrPriCpte = 4 ' donc à 10000
Comp = 1 For i = 1 To NbrChifrPriCpte Comp = 10 * Comp Next i
ReDim T(1 To Combien)
For i = 1 To Combien - 1 Step 2 'je tire les nombres T(i) = c4.Rand(10000, 1000, False, 0) ' je les mets dans le tableau Label4(i) = T(i) j'affiche x = CLng(Right$(T(i), NbrChifrPriCpte)) 'je teste la fin du nombre et si il n'y a que des zéros If x = 0 Then 'je fais gaffe au résultat de la prochaine soustraction sinon le nombre complémentaire pourrait avoir un drôle d'allure... (d'ailleurs je me demande si le procédé est bien efficace à 100% ? x = 10 End If T(i + 1) = c4.Rand(10000, 1000, False, 0) T(i + 1) = CLng(Left$(T(i + 1), Len(T(i + 1)) - (NbrChifrPriCpte)) & (Comp - x)) 'je l'adapte, je le mets dans le tableau Label4(i + 1) = FormatNumber(T(i + 1), 0) Next i
End Sub
bon j'ai changé mon fusil d'épaule et j'ai essayé autre chose:
créer une classe3
Option Explicit
'tirage aléatoire de nombres entiers ou décimaux
Public Function Rand(ByVal high As Long, ByVal low As Long, ByVal Deci As
Boolean, _
ByVal NbrChifApVirgule As Integer) As Variant
Dim i As Integer, v As Integer
v = NbrChifApVirgule
Select Case Deci
Case False 'entiers
Rand = Int((high - low + 1) * Rnd) + low
Rand = FormatNumber(Rand, v, vbFalse, vbFalse, vbUseDefault)
Case Else 'décimaux
Rand = ((high - low + 1) * Rnd) + low
Rand = FormatNumber(Rand, v, vbFalse, vbFalse, vbUseDefault)
End Select
End Function
puis dans ma form contenant des labels et un cmdbutton :
Private Sub Command13_Click()
Dim c4 As Class3
Set c4 = New Class3
Dim i As Integer, x As Integer, NbrChifrPriCpte As Integer
Dim Comp As Integer, Combien As Integer
Dim T() As Variant
Combien = 10 'Combien de nombres ?
'complémentaire à combien 10, 100, 1000 ?
NbrChifrPriCpte = 4 ' donc à 10000
Comp = 1
For i = 1 To NbrChifrPriCpte
Comp = 10 * Comp
Next i
ReDim T(1 To Combien)
For i = 1 To Combien - 1 Step 2 'je tire les nombres
T(i) = c4.Rand(10000, 1000, False, 0) ' je les mets dans le
tableau
Label4(i) = T(i) j'affiche
x = CLng(Right$(T(i), NbrChifrPriCpte)) 'je teste la fin du
nombre et si il n'y a que des zéros
If x = 0 Then 'je fais gaffe au résultat de la prochaine
soustraction sinon le nombre complémentaire pourrait avoir un drôle
d'allure... (d'ailleurs je me demande si le procédé est bien efficace à
100% ?
x = 10
End If
T(i + 1) = c4.Rand(10000, 1000, False, 0)
T(i + 1) = CLng(Left$(T(i + 1), Len(T(i + 1)) - (NbrChifrPriCpte)) &
(Comp - x)) 'je l'adapte, je le mets dans le tableau
Label4(i + 1) = FormatNumber(T(i + 1), 0)
Next i
bon j'ai changé mon fusil d'épaule et j'ai essayé autre chose:
créer une classe3
Option Explicit 'tirage aléatoire de nombres entiers ou décimaux Public Function Rand(ByVal high As Long, ByVal low As Long, ByVal Deci As Boolean, _ ByVal NbrChifApVirgule As Integer) As Variant
Dim i As Integer, v As Integer v = NbrChifApVirgule Select Case Deci Case False 'entiers Rand = Int((high - low + 1) * Rnd) + low Rand = FormatNumber(Rand, v, vbFalse, vbFalse, vbUseDefault) Case Else 'décimaux Rand = ((high - low + 1) * Rnd) + low Rand = FormatNumber(Rand, v, vbFalse, vbFalse, vbUseDefault) End Select End Function
puis dans ma form contenant des labels et un cmdbutton :
Private Sub Command13_Click()
Dim c4 As Class3 Set c4 = New Class3 Dim i As Integer, x As Integer, NbrChifrPriCpte As Integer Dim Comp As Integer, Combien As Integer Dim T() As Variant
Combien = 10 'Combien de nombres ? 'complémentaire à combien 10, 100, 1000 ?
NbrChifrPriCpte = 4 ' donc à 10000
Comp = 1 For i = 1 To NbrChifrPriCpte Comp = 10 * Comp Next i
ReDim T(1 To Combien)
For i = 1 To Combien - 1 Step 2 'je tire les nombres T(i) = c4.Rand(10000, 1000, False, 0) ' je les mets dans le tableau Label4(i) = T(i) j'affiche x = CLng(Right$(T(i), NbrChifrPriCpte)) 'je teste la fin du nombre et si il n'y a que des zéros If x = 0 Then 'je fais gaffe au résultat de la prochaine soustraction sinon le nombre complémentaire pourrait avoir un drôle d'allure... (d'ailleurs je me demande si le procédé est bien efficace à 100% ? x = 10 End If T(i + 1) = c4.Rand(10000, 1000, False, 0) T(i + 1) = CLng(Left$(T(i + 1), Len(T(i + 1)) - (NbrChifrPriCpte)) & (Comp - x)) 'je l'adapte, je le mets dans le tableau Label4(i + 1) = FormatNumber(T(i + 1), 0) Next i
End Sub
Jean-Marc
"Pascal" a écrit dans le message de news:41b35f7c$0$3435$
bon j'ai changé mon fusil d'épaule et j'ai essayé autre chose:
créer une classe3
Option Explicit 'tirage aléatoire de nombres entiers ou décimaux Public Function Rand(ByVal high As Long, ByVal low As Long, ByVal Deci As Boolean, _ ByVal NbrChifApVirgule As Integer) As Variant
Dim i As Integer, v As Integer v = NbrChifApVirgule Select Case Deci Case False 'entiers Rand = Int((high - low + 1) * Rnd) + low Rand = FormatNumber(Rand, v, vbFalse, vbFalse, vbUseDefault) Case Else 'décimaux Rand = ((high - low + 1) * Rnd) + low Rand = FormatNumber(Rand, v, vbFalse, vbFalse, vbUseDefault) End Select End Function
puis dans ma form contenant des labels et un cmdbutton :
Private Sub Command13_Click()
Dim c4 As Class3 Set c4 = New Class3 Dim i As Integer, x As Integer, NbrChifrPriCpte As Integer Dim Comp As Integer, Combien As Integer Dim T() As Variant
Combien = 10 'Combien de nombres ? 'complémentaire à combien 10, 100, 1000 ?
NbrChifrPriCpte = 4 ' donc à 10000
Comp = 1 For i = 1 To NbrChifrPriCpte Comp = 10 * Comp Next i
ReDim T(1 To Combien)
For i = 1 To Combien - 1 Step 2 'je tire les nombres T(i) = c4.Rand(10000, 1000, False, 0) ' je les mets dans le tableau Label4(i) = T(i) j'affiche x = CLng(Right$(T(i), NbrChifrPriCpte)) 'je teste la fin du nombre et si il n'y a que des zéros If x = 0 Then 'je fais gaffe au résultat de la prochaine soustraction sinon le nombre complémentaire pourrait avoir un drôle d'allure... (d'ailleurs je me demande si le procédé est bien efficace à 100% ? x = 10 End If T(i + 1) = c4.Rand(10000, 1000, False, 0) T(i + 1) = CLng(Left$(T(i + 1), Len(T(i + 1)) - (NbrChifrPriCpte))
&
(Comp - x)) 'je l'adapte, je le mets dans le tableau Label4(i + 1) = FormatNumber(T(i + 1), 0) Next i
End Sub
Ca n'a pas l'air mal, mais tu n'es pas obligé de créer ta focntion dans un module de classe. Une simple fonction publique dans ta forme ou dans un module normal fait aussi bien l'affaire.
-- Jean-marc "There are only 10 kind of people those who understand binary and those who don't."
"Pascal" <sclp@wndoo.fr> a écrit dans le message de
news:41b35f7c$0$3435$8fcfb975@news.wanadoo.fr...
bon j'ai changé mon fusil d'épaule et j'ai essayé autre chose:
créer une classe3
Option Explicit
'tirage aléatoire de nombres entiers ou décimaux
Public Function Rand(ByVal high As Long, ByVal low As Long, ByVal Deci As
Boolean, _
ByVal NbrChifApVirgule As Integer) As Variant
Dim i As Integer, v As Integer
v = NbrChifApVirgule
Select Case Deci
Case False 'entiers
Rand = Int((high - low + 1) * Rnd) + low
Rand = FormatNumber(Rand, v, vbFalse, vbFalse, vbUseDefault)
Case Else 'décimaux
Rand = ((high - low + 1) * Rnd) + low
Rand = FormatNumber(Rand, v, vbFalse, vbFalse, vbUseDefault)
End Select
End Function
puis dans ma form contenant des labels et un cmdbutton :
Private Sub Command13_Click()
Dim c4 As Class3
Set c4 = New Class3
Dim i As Integer, x As Integer, NbrChifrPriCpte As Integer
Dim Comp As Integer, Combien As Integer
Dim T() As Variant
Combien = 10 'Combien de nombres ?
'complémentaire à combien 10, 100, 1000 ?
NbrChifrPriCpte = 4 ' donc à 10000
Comp = 1
For i = 1 To NbrChifrPriCpte
Comp = 10 * Comp
Next i
ReDim T(1 To Combien)
For i = 1 To Combien - 1 Step 2 'je tire les nombres
T(i) = c4.Rand(10000, 1000, False, 0) ' je les mets dans le
tableau
Label4(i) = T(i) j'affiche
x = CLng(Right$(T(i), NbrChifrPriCpte)) 'je teste la fin du
nombre et si il n'y a que des zéros
If x = 0 Then 'je fais gaffe au résultat de la prochaine
soustraction sinon le nombre complémentaire pourrait avoir un drôle
d'allure... (d'ailleurs je me demande si le procédé est bien efficace à
100% ?
x = 10
End If
T(i + 1) = c4.Rand(10000, 1000, False, 0)
T(i + 1) = CLng(Left$(T(i + 1), Len(T(i + 1)) - (NbrChifrPriCpte))
&
(Comp - x)) 'je l'adapte, je le mets dans le tableau
Label4(i + 1) = FormatNumber(T(i + 1), 0)
Next i
End Sub
Ca n'a pas l'air mal, mais tu n'es pas obligé de créer ta focntion dans un
module de classe. Une simple fonction publique dans ta forme ou dans un
module normal fait aussi bien l'affaire.
--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."
"Pascal" a écrit dans le message de news:41b35f7c$0$3435$
bon j'ai changé mon fusil d'épaule et j'ai essayé autre chose:
créer une classe3
Option Explicit 'tirage aléatoire de nombres entiers ou décimaux Public Function Rand(ByVal high As Long, ByVal low As Long, ByVal Deci As Boolean, _ ByVal NbrChifApVirgule As Integer) As Variant
Dim i As Integer, v As Integer v = NbrChifApVirgule Select Case Deci Case False 'entiers Rand = Int((high - low + 1) * Rnd) + low Rand = FormatNumber(Rand, v, vbFalse, vbFalse, vbUseDefault) Case Else 'décimaux Rand = ((high - low + 1) * Rnd) + low Rand = FormatNumber(Rand, v, vbFalse, vbFalse, vbUseDefault) End Select End Function
puis dans ma form contenant des labels et un cmdbutton :
Private Sub Command13_Click()
Dim c4 As Class3 Set c4 = New Class3 Dim i As Integer, x As Integer, NbrChifrPriCpte As Integer Dim Comp As Integer, Combien As Integer Dim T() As Variant
Combien = 10 'Combien de nombres ? 'complémentaire à combien 10, 100, 1000 ?
NbrChifrPriCpte = 4 ' donc à 10000
Comp = 1 For i = 1 To NbrChifrPriCpte Comp = 10 * Comp Next i
ReDim T(1 To Combien)
For i = 1 To Combien - 1 Step 2 'je tire les nombres T(i) = c4.Rand(10000, 1000, False, 0) ' je les mets dans le tableau Label4(i) = T(i) j'affiche x = CLng(Right$(T(i), NbrChifrPriCpte)) 'je teste la fin du nombre et si il n'y a que des zéros If x = 0 Then 'je fais gaffe au résultat de la prochaine soustraction sinon le nombre complémentaire pourrait avoir un drôle d'allure... (d'ailleurs je me demande si le procédé est bien efficace à 100% ? x = 10 End If T(i + 1) = c4.Rand(10000, 1000, False, 0) T(i + 1) = CLng(Left$(T(i + 1), Len(T(i + 1)) - (NbrChifrPriCpte))
&
(Comp - x)) 'je l'adapte, je le mets dans le tableau Label4(i + 1) = FormatNumber(T(i + 1), 0) Next i
End Sub
Ca n'a pas l'air mal, mais tu n'es pas obligé de créer ta focntion dans un module de classe. Une simple fonction publique dans ta forme ou dans un module normal fait aussi bien l'affaire.
-- Jean-marc "There are only 10 kind of people those who understand binary and those who don't."