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

VBA Access Discussion :

Sélectionner les deux valeurs mini de plusieurs champs.


Sujet :

VBA Access

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Responsable sécurité
    Inscrit en
    Septembre 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Féroé

    Informations professionnelles :
    Activité : Responsable sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2014
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Sélectionner les deux valeurs mini de plusieurs champs.
    Bonjour,

    Je cherche à sélectionner les deux valeurs les plus petites appartenant à 5 champs numériques différents se trouvant sur 5 colonnes différentes d'une même requête

    Ces deux valeurs par lignes devront être sélectionnées pour réaliser un calcul par la suite.
    Ex :
    Champ 1 Champ 2 Champ 3 Champ 4 Champ 5
    0.2 0.3 1 5 0.1

    résultat attendu 0.1 et 0.2.


    J'ai bien tenté les fonctions min et max avec le générateur d'expression, mais je n'y parviens pas.... et de toute façon je n' obtiendrais que la plus plus petite et non les deux.

    Je ne maîtrise pas le SQL.....

    merci bien de votre réponse.

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Bonjour,

    Je ne sais pas comment tu veux présenter ton résultat, mais sans VBA, je ne pense pas qu'on peut y arriver.
    Je propose le code suivant qui permet de trouver les 2 minimum pour chaque ligne et les injecter dans une table finale avec 2 champs :

    'Trouver les 2 minimum de 5 champs de la Table1 et
    'envoyer les résultats dans la Table2
    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 Trouver2MinChamps()
    Dim rs As DAO.Recordset, rsFinal As DAO.Recordset
    Dim Min1 As Double, Min2 As Double
    Dim MinInd1 As Integer, MinInd2 As Integer, i As Integer
    Set rs = CurrentDb.OpenRecordset("Table1", dbOpenDynaset)
    Set rsFinal = CurrentDb.OpenRecordset("Table2", dbOpenDynaset)
    With rs
        While Not .EOF 'Parcourir tous les enregistrements
            Min1 = .Fields(0) 'Trouver le premier minimum
            For i = 1 To 4 'Parcourir les 5 champs de la table 1
                If .Fields(i) < Min1 Then 'Comparer avec le minimum précédent
                    Min1 = .Fields(i) 'Attribuer les valeurs et les index minimum
                    MinInd1 = i
                End If
            Next i
            Min2 = .Fields(0) 'Trouver le deuxième minimum
            For i = 1 To 4
                If .Fields(i) < Min2 And i <> MinInd1 Then 'Comparer avec le précédent et que l'index soit différent
                    Min2 = .Fields(i)
                    MinInd2 = i
                End If
            Next i
            'Debug.Print MinInd1, Min1, MinInd2, Min2
            'Supprimer les données de la table finale Table2
            DoCmd.SetWarnings False
            DoCmd.RunSQL "DELETE * FROM Table2"
            DoCmd.SetWarnings True
            'Ajouter les valeurs dans la table finale Table2
            rsFinal.AddNew
            rsFinal![Mini1] = Min1
            rsFinal![Mini2] = Min2
            rsFinal.Update
            .MoveNext
        Wend
    End With
    rsFinal.Close
    Set rsFinal = Nothing
    rs.Close
    Set rs = Nothing
    End Sub
    Cordialement,
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Responsable sécurité
    Inscrit en
    Septembre 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Féroé

    Informations professionnelles :
    Activité : Responsable sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2014
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci beaucoup pour cette réponse.
    on va essayer de se dépatouiller... en fait on pensait à une solution sans programmation mais avec l'interface ACCESS seule !
    maintenant on sait que ce n'est pas possible !

    je n'ose pas demander comment on insère ces lignes de commandes dans access nous en serions bien incapable.

    merci encore et bonne journée !

    Citation Envoyé par madefemere Voir le message
    Bonjour,

    Je ne sais pas comment tu veux présenter ton résultat, mais sans VBA, je ne pense pas qu'on peut y arriver.
    Je propose le code suivant qui permet de trouver les 2 minimum pour chaque ligne et les injecter dans une table finale avec 2 champs :

    'Trouver les 2 minimum de 5 champs de la Table1 et
    'envoyer les résultats dans la Table2
    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 Trouver2MinChamps()
    Dim rs As DAO.Recordset, rsFinal As DAO.Recordset
    Dim Min1 As Double, Min2 As Double
    Dim MinInd1 As Integer, MinInd2 As Integer, i As Integer
    Set rs = CurrentDb.OpenRecordset("Table1", dbOpenDynaset)
    Set rsFinal = CurrentDb.OpenRecordset("Table2", dbOpenDynaset)
    With rs
        While Not .EOF 'Parcourir tous les enregistrements
            Min1 = .Fields(0) 'Trouver le premier minimum
            For i = 1 To 4 'Parcourir les 5 champs de la table 1
                If .Fields(i) < Min1 Then 'Comparer avec le minimum précédent
                    Min1 = .Fields(i) 'Attribuer les valeurs et les index minimum
                    MinInd1 = i
                End If
            Next i
            Min2 = .Fields(0) 'Trouver le deuxième minimum
            For i = 1 To 4
                If .Fields(i) < Min2 And i <> MinInd1 Then 'Comparer avec le précédent et que l'index soit différent
                    Min2 = .Fields(i)
                    MinInd2 = i
                End If
            Next i
            'Debug.Print MinInd1, Min1, MinInd2, Min2
            'Supprimer les données de la table finale Table2
            DoCmd.SetWarnings False
            DoCmd.RunSQL "DELETE * FROM Table2"
            DoCmd.SetWarnings True
            'Ajouter les valeurs dans la table finale Table2
            rsFinal.AddNew
            rsFinal![Mini1] = Min1
            rsFinal![Mini2] = Min2
            rsFinal.Update
            .MoveNext
        Wend
    End With
    rsFinal.Close
    Set rsFinal = Nothing
    rs.Close
    Set rs = Nothing
    End Sub
    Cordialement,

  4. #4
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Bonjour,

    Il n'y a pas de question bête ! et chez nous existe un adâge qui dit " Vaut mieux poser une question pour qu'on en rigole que faire mal et se faire sermonner !".
    Le code que j'ai donné est à coller dans un module "indépendant" dans le VBE.
    Pour l'exécuter, il y a 2 façons :
    1- Aller dans la "fenêtre d'exécution" du VBE et taper ? Trouver2MinChamps et Valider. et le code va s'exécuter.
    2- Créer un formulaire avec un contrôle. Et appeler la procédure Trouver2MinChamps sur un évènement d'un contrôle. Quand l'évènement du contrôle va se produire, le code va s'exécuter.

    Si vous avez besoin d'un exemple de BD très simple, vous dites..

    Cordialement,
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

Discussions similaires

  1. [AC-2002] Valeur mini de plusieurs champs
    Par titi95 dans le forum Requêtes et SQL.
    Réponses: 17
    Dernier message: 01/10/2010, 16h30
  2. Réponses: 1
    Dernier message: 13/03/2007, 09h52
  3. Sélectionner les N premiers mots d'un champ texte
    Par keskispas dans le forum SQL
    Réponses: 19
    Dernier message: 22/01/2007, 14h22
  4. [MySQL] Recuperer les deux premiers caracteres d'un champ
    Par Msieurduss dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 15/06/2006, 14h40
  5. Valeur mini pour un Champs avec un bouton + et un - a coté
    Par budiste dans le forum Général JavaScript
    Réponses: 15
    Dernier message: 01/12/2005, 14h09

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