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 :

Ordre des champs dans un enregistrements [AC-2007]


Sujet :

Requêtes et SQL.

  1. #1
    Membre habitué

    Homme Profil pro
    retraité
    Inscrit en
    Décembre 2014
    Messages
    373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Décembre 2014
    Messages : 373
    Points : 150
    Points
    150
    Billets dans le blog
    1
    Par défaut Ordre des champs dans un enregistrements
    Bonjour le forum

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    trie par ordre croissant les champs d'un enregistrement
    J'ai crée un base de relevé météorologie. De cette base j'ai une requête calculant, par année, le nombre de jour concernant la direction du vent, ce qui me donne 12 colonnes (Année, N, NE, E, SE.........Nbr Jours). Je voudrais, de cette base, trier par ordre croissant, les colonnes N, NE, E, .......... .Ce qui me donnerait le tableau suivant : 2017 - S-N-O-NO, pour l'année 2017 car S est supérieur à N qui N est supérieur à O qui O est supérieur à est suivant au autres points cardinaux.
    J'ai essayé par vraifaux, mais la formule est trop fastidieuse à concevoir.
    Alors la question est : Est-ce que c'est possible et si oui comment.
    Merci d'avance
    Cordialement

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 629
    Points : 34 334
    Points
    34 334
    Par défaut
    Salut,

    en fait tu as l'ordre des points cardinaux vs leur ordre alphabetique a gere ici

    Tu peux passer par une table intermediaire, dans laquelle tu stockes tes directions de vents et leurs numero d'ordre voulu, tu utiliseras cette table pour faire le tri sur l'ordre dans ta requete
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre habitué

    Homme Profil pro
    retraité
    Inscrit en
    Décembre 2014
    Messages
    373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Décembre 2014
    Messages : 373
    Points : 150
    Points
    150
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Jean-Philippe André Voir le message
    Salut,

    en fait tu as l'ordre des points cardinaux vs leur ordre alphabetique a gere ici

    Tu peux passer par une table intermediaire, dans laquelle tu stockes tes directions de vents et leurs numero d'ordre voulu, tu utiliseras cette table pour faire le tri sur l'ordre dans ta requete
    Re merci de ta réponse rapide.
    En fait ce n'est pas l'ordre alphabétique des points cardinaux qui m'intéresse, mais la valeur numérique des nombres de jours de chaque points cardinaux récapitulés par une requête précédente. Ce sont l'ordre croissant de chiffres à gérer correspondant aux points cardinaux.
    Cordialement

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    voici une solution, à voir si elle peut correspondre à ton attente....

    Le principe est de regrouper dans une seule colonne l'ordre des directions du vent par ordre décroissant du nombre de jour pour obtenir par exemple :
    Année Directions
    2017 N-O-S-...

    Pour ce faire, il faut ajouter ces 2 fonctions VBA dans un module :
    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
    Public Function TrierVents(ParamArray a() As Variant) As String
    Dim d As Long, f As Long, i As Long, j As Long, v As Variant, Idx() As Long, s As String
    d = LBound(a): f = UBound(a)
    If f > d Then
        ReDim Idx(d To f): Idx(d + 1) = d + 1
        For i = d + 3 To f Step 2
            j = i: Idx(j) = j: v = NzNEM(a(j), 0)
            Do Until NzNEM(a(Idx(j - 2)), 0) > v
                Idx(j) = Idx(j - 2): j = j - 2
                If j = d + 1 Then Exit Do
            Loop
            Idx(j) = i
        Next i
        For i = d + 1 To f Step 2: s = s & NzNEM(a(Idx(i) - 1), "?") & "-": Next i
        TrierVents = Left$(s, Len(s) - 1)
    End If
    End Function
    
    
    Private Function NzNEM(ByVal Value As Variant, ByVal ValueIfNullOrEmptyOrMissing As Variant) As Variant
    NzNEM = IIf(IsNull(Value) Or IsEmpty(Value) Or IsMissing(Value), ValueIfNullOrEmptyOrMissing, Value)
    End Function
    La fonction TrierVents sera appelée ainsi dans la requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT Année, TrierVents("N",[N], "NE", [NE], ....)
    FROM LaRequete
    Les arguments de TrierVents sont le nom de la direction puis sa valeur, ainsi de suite pour les 12 directions.

  5. #5
    Membre habitué

    Homme Profil pro
    retraité
    Inscrit en
    Décembre 2014
    Messages
    373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Décembre 2014
    Messages : 373
    Points : 150
    Points
    150
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par galoir Voir le message
    Bonjour,

    voici une solution, à voir si elle peut correspondre à ton attente....

    Le principe est de regrouper dans une seule colonne l'ordre des directions du vent par ordre décroissant du nombre de jour pour obtenir par exemple :
    Année Directions
    2017 N-O-S-...

    Pour ce faire, il faut ajouter ces 2 fonctions VBA dans un module :
    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
    Public Function TrierVents(ParamArray a() As Variant) As String
    Dim d As Long, f As Long, i As Long, j As Long, v As Variant, Idx() As Long, s As String
    d = LBound(a): f = UBound(a)
    If f > d Then
        ReDim Idx(d To f): Idx(d + 1) = d + 1
        For i = d + 3 To f Step 2
            j = i: Idx(j) = j: v = NzNEM(a(j), 0)
            Do Until NzNEM(a(Idx(j - 2)), 0) > v
                Idx(j) = Idx(j - 2): j = j - 2
                If j = d + 1 Then Exit Do
            Loop
            Idx(j) = i
        Next i
        For i = d + 1 To f Step 2: s = s & NzNEM(a(Idx(i) - 1), "?") & "-": Next i
        TrierVents = Left$(s, Len(s) - 1)
    End If
    End Function
    
    
    Private Function NzNEM(ByVal Value As Variant, ByVal ValueIfNullOrEmptyOrMissing As Variant) As Variant
    NzNEM = IIf(IsNull(Value) Or IsEmpty(Value) Or IsMissing(Value), ValueIfNullOrEmptyOrMissing, Value)
    End Function
    La fonction TrierVents sera appelée ainsi dans la requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT Année, TrierVents("N",[N], "NE", [NE], ....)
    FROM LaRequete
    Les arguments de TrierVents sont le nom de la direction puis sa valeur, ainsi de suite pour les 12 directions.
    Bonjour Galoir
    Merci pour ta réponse.
    Dans l'esprit c'est exactement ce qui est souhaitable et dans la forme je n'en souhaitais pas plus. Tout fonctionne à merveille.
    Merci encore au forum et principalement à toi Galoir.
    Cordialement

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 25/07/2007, 13h39
  2. ordre des champs dans une structure
    Par oussema dans le forum C
    Réponses: 8
    Dernier message: 08/03/2007, 18h42
  3. ordre des champs dans une table
    Par antartica dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 13/02/2007, 15h25
  4. [Débutant]Ordre des champs dans une table
    Par goony dans le forum Débuter
    Réponses: 4
    Dernier message: 16/02/2006, 12h05
  5. Ordre des champs dans une table
    Par patapetz dans le forum Outils
    Réponses: 5
    Dernier message: 30/07/2003, 06h53

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