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 du Club
    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
    Points : 66
    Points
    66
    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 émérite

    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
    Points : 2 368
    Points
    2 368
    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
    Points : 4 297
    Points
    4 297
    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
    Points : 4 297
    Points
    4 297
    Par défaut
    pardon jbo j'ai envoyé mon message sans voir le tien

  5. #5
    Membre émérite

    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
    Points : 2 368
    Points
    2 368
    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 régulier
    Inscrit en
    Janvier 2005
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 104
    Points : 123
    Points
    123
    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 habitué Avatar de lou87
    Profil pro
    Inscrit en
    Février 2006
    Messages
    368
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 368
    Points : 128
    Points
    128
    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
    Points : 4 297
    Points
    4 297
    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 sénior

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

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

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    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 habitué Avatar de lou87
    Profil pro
    Inscrit en
    Février 2006
    Messages
    368
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 368
    Points : 128
    Points
    128
    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 régulier
    Inscrit en
    Janvier 2005
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 104
    Points : 123
    Points
    123
    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 du Club
    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
    Points : 66
    Points
    66
    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, 10h59
  2. Simplification de code
    Par lodan dans le forum Langage
    Réponses: 4
    Dernier message: 20/09/2006, 20h28
  3. Simplification de code
    Par lodan dans le forum Langage
    Réponses: 2
    Dernier message: 31/08/2006, 22h51
  4. Simplification de code (suite)
    Par Jeffboj dans le forum Access
    Réponses: 1
    Dernier message: 12/04/2006, 23h34
  5. [c#] Simplification de code
    Par Revan012 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 04/02/2006, 17h44

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