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 :

boucle pour la valeur min d'un champ


Sujet :

VBA Access

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 91
    Points : 46
    Points
    46
    Par défaut boucle pour la valeur min d'un champ
    je cherche une boucle qui retourne la valeure min d'un champ d'une table
    voila le code que j'ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub Commande20_Click()
    Dim MaBase As Database
    Dim MaTable As TableDefs
    Dim MonChamp As Field
    Dim MinNombre As Integer
    Set MaBase = CurrentDb
    Set MaTable = Table1
    With MaTable
    Set MonChamp = Nombre
    End With
    Set MinNombre = Min(MonChamp)
    Debug.Print MinNombre
    End Sub
    la fonction min n'existe pas je crois?

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 197
    Points : 300
    Points
    300
    Par défaut
    Bonjour,

    Tu peux travailler avec un recordset pour utiliser la fonction Min.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Private Sub Commande20_Click()
        Dim myRst As DAO.Recordset
        set myRst = currentDb.OpenRecordset("Select Min(MonChamp) As PlusPetit From MaTable", dbOpenSnapshot)
        If Not myRst.Eof then
            MinNombre = myRst!PlusPetit
        Else
            MinNombre = 0
        Endif
        myRst.Close
    End Sub

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 91
    Points : 46
    Points
    46
    Par défaut
    merci pour ta réponse si rapide
    voila le code que j'ai mis ça marche toujours pas
    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
    Private Sub Commande20_Click()
    Dim myRst As DAO.Recordset
    Dim MaBase As Database
    Dim MaTable As TableDefs
    Dim MonChamp As Field
    Dim MinNombre As Variant
    Set MaBase = CurrentDb
    Set MaTable = Table1
    With MaTable
    Set MonChamp = Nombre
    Set myRst = CurrentDb.OpenRecordset("Select Min(MonChamp) As PlusPetit From MaTable", dbOpenSnapshot)
        If Not myRst.EOF Then
            MinNombre = myRst!PlusPetit
        Else
            MinNombre = 0
        End If
        myRst.Close
    End With
    Debug.Print MinNombre
    Set MinNombre = Nothing
    End Sub
    message d'erreure objet requis

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 197
    Points : 300
    Points
    300
    Par défaut
    Tu as déclaré minNombre en tant que Variant, c'est donc une variable et pas un objet.

    Donc la ligne Set minNombre = Nothing n'est pas correcte.

    Accessoirement, il faut que tu adaptes mon exemple à ton cas précis en changeant les valeurs "MaTable" et "MonChamp" avec les noms réels des objets que tu manipules; c'est à dire le nom de la table qui contient les données et le nom du champ dont tu veux obtenir la valeur minimum.

    En outre les lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim MaTable As TableDefs
    Dim MonChamp As Field
    Set MaBase = CurrentDb
    Set MaTable = Table1
    With MaTable
    Set MonChamp = Nombre
    ...
    End With
    son superflues...

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Si ce n'est pas une table trop grosse, tu peux utiliser la fonction de domaine DMin

    http://starec.developpez.com/tuto/fo...maines/#LIII-A

    Philippe

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 91
    Points : 46
    Points
    46
    Par défaut
    j'ai modifier le code j'ai colé un espion sur Table1 l'espion retourne empty/vide
    donc il reconnait pas Table1 alors qu'elle existe vraiment, donc je crois qu'il faut que je rajoute qulque chose pour qu'il reconnait table1
    Private Sub Commande20_Click()
    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
     
    Dim myRst As DAO.Recordset
    Dim MaBase As Database
    Dim MaTable As TableDef
    Dim MonChamp As Field
    Dim MinNombre As Integer
    Set MaBase = CurrentDb
    With MaBase
    Set MaTable = Table1
    Set MonChamp = nombre
    Set myRst = CurrentDb.OpenRecordset("Select Min(MonChamp) As PlusPetit From MaTable", dbOpenSnapshot)
        If Not myRst.EOF Then
            MinNombre = myRst!PlusPetit
        Else
            MinNombre = 0
        End If
        myRst.Close
        Debug.Print MinNombre
    End With
    Set MaBase = Nothing
    Set MaTable = Nothing
    Set MonChamp = Nothing
    End Sub

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 197
    Points : 300
    Points
    300
    Par défaut
    Bon, je recommence...

    Il faut que tu remplaces ton code par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Private Sub Commande20_Click()
        Dim myRst As DAO.Recordset, MinNombre As Long
        set myRst = currentDb.OpenRecordset("Select Min(MonChamp) As PlusPetit From MaTable", dbOpenSnapshot)
        If Not myRst.Eof then
            MinNombre = myRst!PlusPetit
        Else
            MinNombre = 0
        Endif
        Debug.Print MinNombre
        myRst.Close
    End Sub
    et que dans le Select, tu remplaces "MonChamp" par le nom du champ dont tu souhaites trouver la valeur minimum et "MaTable" par le nom de la table qui contient tes données.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Boucle pour récuperer valeurs manquantes
    Par mamiche dans le forum SAS Base
    Réponses: 10
    Dernier message: 29/10/2012, 15h58
  2. [AC-2007] Valeur MIN d'un champ calculé
    Par micbett dans le forum Requêtes et SQL.
    Réponses: 16
    Dernier message: 16/02/2012, 22h26
  3. Réponses: 3
    Dernier message: 29/04/2010, 13h54
  4. Boucle pour controler valeurs de cellules et faire des actions ensuite
    Par Le Rom dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 28/02/2010, 12h43
  5. sélection pour deux valeurs fixes d'un champ
    Par avairet dans le forum Requêtes
    Réponses: 10
    Dernier message: 25/03/2008, 10h52

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