IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

Access Discussion :

simplification de code


Sujet :

Access

  1. #1
    Membre confirm�
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    59
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2005
    Messages : 59
    Par d�faut simplification de code
    bonjour,

    J,aimerai une solution pour simplifier ma formule merci.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
            Tableaualea(1, 1) = Int((10) * Rnd + 1)
    ligne101:
            Tableaualea(1, 2) = Int((10) * Rnd + 1)
      If Tableaualea(1, 2) = Tableaualea(1, 1) Then GoTo ligne101
    ligne102:
            Tableaualea(1, 3) = Int((10) * Rnd + 1)
      If Tableaualea(1, 3) = Tableaualea(1, 1) Or Tableaualea(1, 3) = Tableaualea(1, 2) Then GoTo ligne102
    ligne103:
            Tableaualea(1, 4) = Int((10) * Rnd + 1)
      If Tableaualea(1, 4) = Tableaualea(1, 1) Or Tableaualea(1, 4) = Tableaualea(1, 2) Or Tableaualea(1, 4) = Tableaualea(1, 3) Then GoTo ligne103
    ligne104:
            Tableaualea(1, 5) = Int((10) * Rnd + 1)
      If Tableaualea(1, 5) = Tableaualea(1, 1) Or Tableaualea(1, 5) = Tableaualea(1, 2) Or Tableaualea(1, 5) = Tableaualea(1, 3) Or Tableaualea(1, 5) = Tableaualea(1, 4) Then GoTo ligne104
    ligne105:
            Tableaualea(1, 6) = Int((10) * Rnd + 1)
      If Tableaualea(1, 6) = Tableaualea(1, 1) Or Tableaualea(1, 6) = Tableaualea(1, 2) Or Tableaualea(1, 6) = Tableaualea(1, 3) Or Tableaualea(1, 6) = Tableaualea(1, 4) Or Tableaualea(1, 6) = Tableaualea(1, 5) Then GoTo ligne105
    ligne106:
            Tableaualea(1, 7) = Int((10) * Rnd + 1)
      If Tableaualea(1, 7) = Tableaualea(1, 1) Or Tableaualea(1, 7) = Tableaualea(1, 2) Or Tableaualea(1, 7) = Tableaualea(1, 3) Or Tableaualea(1, 7) = Tableaualea(1, 4) Or Tableaualea(1, 7) = Tableaualea(1, 5) Or Tableaualea(1, 7) = Tableaualea(1, 6) Then GoTo ligne106
    ligne107:
            Tableaualea(1, 8) = Int((10) * Rnd + 1)
      If Tableaualea(1, 8) = Tableaualea(1, 1) Or Tableaualea(1, 8) = Tableaualea(1, 2) Or Tableaualea(1, 8) = Tableaualea(1, 3) Or Tableaualea(1, 8) = Tableaualea(1, 4) Or Tableaualea(1, 8) = Tableaualea(1, 5) Or Tableaualea(1, 8) = Tableaualea(1, 6) Or Tableaualea(1, 8) = Tableaualea(1, 7) Then GoTo ligne107
    ligne108:
            Tableaualea(1, 9) = Int((10) * Rnd + 1)
      If Tableaualea(1, 9) = Tableaualea(1, 1) Or Tableaualea(1, 9) = Tableaualea(1, 2) Or Tableaualea(1, 9) = Tableaualea(1, 3) Or Tableaualea(1, 9) = Tableaualea(1, 4) Or Tableaualea(1, 9) = Tableaualea(1, 5) Or Tableaualea(1, 9) = Tableaualea(1, 6) Or Tableaualea(1, 9) = Tableaualea(1, 7) Or Tableaualea(1, 9) = Tableaualea(1, 8) Then GoTo ligne108
    ligne109:
            Tableaualea(1, 10) = Int((10) * Rnd + 1)
      If Tableaualea(1, 10) = Tableaualea(1, 1) Or Tableaualea(1, 10) = Tableaualea(1, 2) Or Tableaualea(1, 10) = Tableaualea(1, 3) Or Tableaualea(1, 10) = Tableaualea(1, 4) Or Tableaualea(1, 10) = Tableaualea(1, 5) Or Tableaualea(1, 10) = Tableaualea(1, 6) Or Tableaualea(1, 10) = Tableaualea(1, 7) Or Tableaualea(1, 10) = Tableaualea(1, 8) Or Tableaualea(1, 10) = Tableaualea(1, 9) Then GoTo ligne109
    but du code
    remplir un tableau avec les chiffres de 1 � 10 de fa�on al�atoire sans doublons

    Jeffboj

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    F�vrier 2005
    Messages
    1 751
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 1 751
    Par d�faut Re: simplification de code
    Bonjour Jeffboj,
    Citation Envoy� par Jeffboj
    J,aimerai une solution pour simplifier ma formule [...]
    but du code
    remplir un tableau avec les chiffres de 1 � 10 de fa�on al�atoire sans doublons
    Je ne pense pas "simplifier" mais je te conseille vivement d'utiliser une collection pour m�moriser les valeurs que tu ne souhaites pas g�n�rer � nouveau.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    Public Sub RemplirTableau()
        Dim Tableaualea(1 To 1, 1 To 10), Coll As New Collection, i As Integer
     
        RndUnique fReset:=True
     
        For i = 1 To 10
            Tableaualea(1, i) = RndUnique(1, 10)
        Next i
    End Sub
     
    Public Function RndUnique(Optional lowerBound As Integer, _
                        Optional upperBound As Integer, _
                        Optional fReset As Boolean = False) As Integer
     
        Static Coll As New Collection
        Dim sKey As String, n As Integer, v As Variant
     
        If fReset = True Then
            Set Coll = New Collection
            Exit Function
        End If
     
        On Error Resume Next
        Do
            ' générer une valeur comprsie entre lowerBound et upperBound
            n = Int((upperBound - lowerBound + 1) * Rnd + lowerBound)
            sKey = CStr(n)
     
            ' Vérifier si la valeur a déjà été fournie
            v = Coll.Item(sKey)
     
            ' Produit une erreur si clé sKey absente de la collection
            If Err.Number <> 0 Then
                ' donc nouvelle valeur à ajouter dans la collection
                Coll.Add n, sKey
                RndUnique = n
                Exit Function
            End If
        Loop
    End Function

  3. #3
    Expert confirm�

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Par d�faut
    on pourrait peut �tre gagner en lisibilit� et performance ainsi
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    Function listediff(combien As Integer) As Boolean
    Dim coll1 As New Collection
    Dim coll2 As New Collection
    Dim boucle As Long
    Dim tirage As Long
    Randomize
    For boucle = 1 To combien
    coll1.Add Item:=boucle
    Next boucle
    For boucle = combien To 1 Step -1
    tirage = Int(boucle * Rnd) + 1
    coll2.Add (coll1(tirage))
    coll1.Remove (tirage)
    Next boucle
    For boucle = 1 To combien
    mamatrice(1, boucle) = coll2(boucle)
    Next boucle
    End Function

  4. #4
    Expert confirm�

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Par d�faut
    pardon jbo j'ai envoy� mon message sans voir le tien

  5. #5
    Membre Expert

    Profil pro
    Inscrit en
    F�vrier 2005
    Messages
    1 751
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2005
    Messages : 1 751
    Par d�faut
    En performance... peut �tre...

    En lisibilit�... j'en doute .

    Demande voir aux d�butants qui fr�quentent le forum

    A part �a, la vie est belle

  6. #6
    Membre confirm�
    Inscrit en
    Janvier 2005
    Messages
    104
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 104
    Par d�faut
    Recommencer � chaque fois que tu retombes sur un nombre d�j� pris n'est pas g�nant point de vue temps de calcul, mais c'est un peu barbare

    En remplissant un tableu de nombres al�atoires entre 11 et 10000, puis en faisant de i=0 � 9 : Max(tableau) = 10-i, �a devrait faire l'affaire. L'id�e est de remplacer les nombres al�atoires par leur ordre, y'a peut �tre plus �l�gant, c'est juste une id�e comme �a.

  7. #7
    Membre �clair� Avatar de lou87
    Profil pro
    Inscrit en
    F�vrier 2006
    Messages
    368
    D�tails du profil
    Informations personnelles :
    �ge : 38
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 368
    Par d�faut
    @ JBO :

    Moi je trouve son code lisible � radom ^^...

    Peut �tre parce que j'y suis habitu�e

  8. #8
    Expert confirm�

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Par d�faut
    Citation Envoy� par Tententai
    Recommencer � chaque fois que tu retombes sur un nombre d�j� pris n'est pas g�nant point de vue temps de calcul, mais c'est un peu barbare :wink:

    En remplissant un tableu de nombres al�atoires entre 11 et 10000, puis en faisant de i=0 � 9 : Max(tableau) = 10-i, �a devrait faire l'affaire. L'id�e est de remplacer les nombres al�atoires par leur ordre, y'a peut �tre plus �l�gant, c'est juste une id�e comme �a.
    c'est ce que fait mon code
    ps jbo j'ai d�j� pr�sent� mes excuses et mon commentaire sur la lisibilite
    visait le texte originel

  9. #9
    Expert �minent

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 42
    Localisation : France, Ain (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Par d�faut
    Citation Envoy� par lou87
    @ JBO :

    Moi je trouve son code lisible � radom ^^...

    Peut �tre parce que j'y suis habitu�e
    Et bien change d'habitude

    Un code propre c'est un code qui respecte :

    Une r�gle de nommage des variables correct (cf le tuto d'argy http://access.developpez.com/cours : http://argyronet.developpez.com/office/vba/convention/ )
    Une indentation claire et coh�rente
    etc

    Ne pas oublier de consulter l'article de papy turbo sur le developpement professionnel

    http://access.developpez.com/accessdevpro/

    Ceci dit, le code de random est � adapter. Random donne la solution brute, � vous de modifier le code � votre convenance pour le rendre compatible avec vos habitudes de developpeur

  10. #10
    Membre �clair� Avatar de lou87
    Profil pro
    Inscrit en
    F�vrier 2006
    Messages
    368
    D�tails du profil
    Informations personnelles :
    �ge : 38
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 368
    Par d�faut
    Citation Envoy� par random
    on pourrait peut �tre gagner en lisibilit� et performance ainsi
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
     
    Function listediff(combien As Integer) As Boolean
     
    Dim coll1 As New Collection
    Dim coll2 As New Collection
    Dim boucle As Long
    Dim tirage As Long
     
    Randomize
     
    For boucle = 1 To combien
       coll1.Add Item:=boucle
    Next boucle
     
    For boucle = combien To 1 Step -1
      tirage = Int(boucle * Rnd) + 1
      coll2.Add (coll1(tirage))
      coll1.Remove (tirage)
    Next boucle
     
    For boucle = 1 To combien
      mamatrice(1, boucle) = coll2(boucle)
    Next boucle
     
    End Function
    Elles sont bien mes habitudes, mais moi g�n�ralement je met des espaces pour m'y retrouver, mais bon ce que je veux dire c'est que toute personne est capable de lire le code � random.....


  11. #11
    Membre confirm�
    Inscrit en
    Janvier 2005
    Messages
    104
    D�tails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 104
    Par d�faut
    Citation Envoy� par random
    Citation Envoy� par Tententai
    Recommencer � chaque fois que tu retombes sur un nombre d�j� pris n'est pas g�nant point de vue temps de calcul, mais c'est un peu barbare

    En remplissant un tableu de nombres al�atoires entre 11 et 10000, puis en faisant de i=0 � 9 : Max(tableau) = 10-i, �a devrait faire l'affaire. L'id�e est de remplacer les nombres al�atoires par leur ordre, y'a peut �tre plus �l�gant, c'est juste une id�e comme �a.
    c'est ce que fait mon code
    D�sol� je m'adressais au post d'origine, on a du poster en m�me temps En tout cas c'est bien j'ai appris des trucs sur les collections au passage ^^

  12. #12
    Membre confirm�
    Homme Profil pro
    Inscrit en
    Janvier 2005
    Messages
    59
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2005
    Messages : 59
    Par d�faut
    merci � tout le monde je vais regarder celui qui me conviens le mieux.
    encore merci � tous

    Jeff

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [Tableaux] simplification de code
    Par lodan dans le forum Langage
    R�ponses: 6
    Dernier message: 05/10/2006, 09h59
  2. Simplification de code
    Par lodan dans le forum Langage
    R�ponses: 4
    Dernier message: 20/09/2006, 19h28
  3. Simplification de code
    Par lodan dans le forum Langage
    R�ponses: 2
    Dernier message: 31/08/2006, 21h51
  4. Simplification de code (suite)
    Par Jeffboj dans le forum Access
    R�ponses: 1
    Dernier message: 12/04/2006, 22h34
  5. [c#] Simplification de code
    Par Revan012 dans le forum Windows Forms
    R�ponses: 5
    Dernier message: 04/02/2006, 16h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo