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

Requêtes et SQL. Discussion :

extraire dans une nouvelle colonne le min issu de 3 autres colonnes


Sujet :

Requêtes et SQL.

  1. #1
    Candidat au Club
    Inscrit en
    Janvier 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 4
    Points : 3
    Points
    3
    Par défaut extraire dans une nouvelle colonne le min issu de 3 autres colonnes
    Bonjour,
    j'ai un souci tres bien geré sous excel, mais que je ne sais pas resoudre sous access:

    j'ai 4 colonnes:

    n° semaine Chiffre d'affaire 2008 Chiffre d'affaire 2007 Chiffre d'affaire 2006
    1 100€ 50€ 150€
    2 100€ 200€ 50€
    3 20€ 50€ 60€


    Ce que je veux c'est le min (ou le max d'ailleurs) de chacune de mes semaines
    ex
    semaine1 50€
    semaine2 50€
    semaine3 20€

    la fonction min dans access me renvoie le min de la colonne, et pas le min entre plusieurs colonnes.
    Merci de votre aide.

  2. #2
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 345
    Points : 19 591
    Points
    19 591
    Billets dans le blog
    65
    Par défaut
    salut,

    tu peux programmer ta propre fonction en VBA ,
    fonction a 3 parametres (tes 3 champs) que tu utiliseras ensuite dans ta requete

    @+

  3. #3
    Candidat au Club
    Inscrit en
    Janvier 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 4
    Points : 3
    Points
    3
    Par défaut re: extraire dans une nouvelle colonne le min issu de 2 autres colonnes
    Le probleme c'est que je suis une buse en VBA; il n'existe donc aucune fonction dans access?

  4. #4
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 905
    Points
    55 905
    Billets dans le blog
    131
    Par défaut
    Salut.

    Je pense qu'une requête avec le champ suivant donnerait le résultat souhaité
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Minimum: VraiFaux([ca2008]<VraiFaux([ca2006]<[ca2007];[ca2006];[ca2007]);[ca2008];VraiFaux([ca2006]<[ca2007];[ca2006];[ca2007]))
    A adapter à tes noms de champs, bien entendu

  5. #5
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 345
    Points : 19 591
    Points
    19 591
    Billets dans le blog
    65
    Par défaut
    tu peux aussi utiliser la fonction iif dans ta requete , fonction qui permet de prendre en compte des conditions, sinon voici une fonction min en VBA:

    à mettre dans un module:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Public Function mmin(c1 As Integer, c2 As Integer, c3 As Integer) As Integer
     
       If c1 <= c2 And c1 <= c3 Then
          mmin = c1
       ElseIf c2 <= c1 And c2 <= c3 Then
          mmin = c2
       Else
          mmin = c3
       End If
     
    End Function
    @+

  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Mars 2006
    Messages
    1 350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 350
    Points : 1 701
    Points
    1 701
    Par défaut
    Bonsoir,
    Citation Envoyé par ibilliau Voir le message
    il n'existe donc aucune fonction dans access?
    Si on est "Fan" d'Excel :
    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
    '// ajouter Microsoft Excel dans Outils/références
    Function Mini(ParamArray LesChamps())
        On Error Resume Next
        Dim xl As Excel.Application, i As Integer, t As Integer
        Dim A
        ReDim lesChamps2(UBound(LesChamps()))
        '// obligé si null ou monétaire
        For i = 0 To UBound(LesChamps())
            If Not IsNull(LesChamps(i)) Then
                lesChamps2(t) = CDbl(LesChamps(i))
                t = t + 1
            End If
        Next
     
        Set xl = New Excel.Application
        Mini = xl.WorksheetFunction.Min(lesChamps2)
        xl.Quit
        Set xl = Nothing
        If Err <> 0 Then Mini = Null
    End Function
    Et on continue :
    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
     
    Function Maxi(ParamArray LesChamps())
        On Error Resume Next
        Dim xl As Excel.Application, i As Integer, t As Integer
        Dim A
        ReDim lesChamps2(UBound(LesChamps()))
        '// obligé si null ou monétaire
        For i = 0 To UBound(LesChamps())
            If Not IsNull(LesChamps(i)) Then
                lesChamps2(t) = CDbl(LesChamps(i))
                t = t + 1
            End If
        Next
     
        Set xl = New Excel.Application
        Maxi = xl.WorksheetFunction.Max(lesChamps2)
        xl.Quit
        Set xl = Nothing
        If Err <> 0 Then Maxi = Null
     
    End Function
    Mais tout ceci "Rame". C'est triste...
    ***************************************************************************
    On travailles avec Access? Oui? Alors :

    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
    Public Function TrouveMin(ParamArray NosVariables() As Variant)
        'Retourne la variable la plus basse
     
        Dim intVariable As Integer
        Dim varMin
     
        For intVariable = 0 To UBound(NosVariables())
            If IsEmpty(varMin) Or IsNull(varMin) Or IsMissing(varMin) Then
                varMin = NosVariables(intVariable)
            End If
            If IsMissing(NosVariables(intVariable)) = False _
                And IsNull(NosVariables(intVariable)) = False _
                And IsNumeric(NosVariables(intVariable)) Then
                If NosVariables(intVariable) < varMin Then varMin = NosVariables(intVariable)
            End If
        Next intVariable
     
        TrouveMin = varMin
     
    End Function
    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
    Public Function TrouveMax(ParamArray NosVariables() As Variant)
        'Retourne la variable la plus basse
     
        Dim intVariable As Integer
        Dim varMax
     
        For intVariable = 0 To UBound(NosVariables())
            If IsEmpty(varMax) Or IsNull(varMax) Or IsMissing(varMax) Then
                varMax = NosVariables(intVariable)
            End If
            If IsMissing(NosVariables(intVariable)) = False _
                And IsNull(NosVariables(intVariable)) = False _
                And IsNumeric(NosVariables(intVariable)) Then
                If NosVariables(intVariable) > varMax Then varMax = NosVariables(intVariable)
            End If
        Next intVariable
     
        TrouveMax = varMax
     
    End Function
    Dans une requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT [n° semaine],[Chiffre d'affaire 2008],[Chiffre d'affaire 2007],[Chiffre d'affaire 2006],
     TrouveMin([Chiffre d'affaire 2008],[Chiffre d'affaire 2007],[Chiffre d'affaire 2006]) AS [Ton mini],
     TrouveMax([Chiffre d'affaire 2008],[Chiffre d'affaire 2007],[Chiffre d'affaire 2006]) AS [Ton maxi]
    FROM Tatable;
    Cordialement.

  7. #7
    Candidat au Club
    Inscrit en
    Janvier 2009
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Merci ça fonctionne.

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 18/02/2014, 13h24
  2. Réponses: 1
    Dernier message: 11/02/2011, 11h44
  3. Copier les données de plusieurs colonnes dans une nouvelle feuille
    Par lolonico1974 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 07/07/2010, 07h51
  4. Réponses: 1
    Dernier message: 21/07/2009, 11h34
  5. Réponses: 1
    Dernier message: 10/05/2006, 15h01

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