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 :

Rang de classement selon un autre champ [AC-2010]


Sujet :

Requêtes et SQL.

  1. #1
    Membre à l'essai
    Homme Profil pro
    Expert Banque en ligne
    Inscrit en
    Septembre 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Expert Banque en ligne
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2005
    Messages : 17
    Points : 14
    Points
    14
    Par défaut Rang de classement selon un autre champ
    Bonjour,

    J'ai un besoin un peu tordu et ne trouve pas de réponse... Un coup de main svp ?
    Sur une table type contenant (parmi d'autres) 3 champs INDIVIDU;LIEU;NOMBRE je souhaite obtenir le rang de chaque couple lieu-nombre pour un même individu (nombre différent selon le lieu)


    En clair, avec :


    Paul;Paris;24
    Paul;Bordeaux;12
    Isa;Paris;10
    Isa;Metz;35
    Eric;Metz;24


    je souhaite obtenir :


    Paul;Paris;24;2
    Paul;Bordeaux;12;1
    Isa;Paris;10;1
    Isa;Metz;35;2
    Eric;Metz;24;1


    Est-ce possible ? Access ? Excel ? Autre ? Et comment ?...


    Merci de votre aide si vous avez une piste.

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Est-ce que tu peux avoir des exæquos ?

    du genre :

    Paul;Paris;24
    Paul;Toulouse;24
    Paul;Bordeaux;12
    Isa;Paris;10
    Isa;Metz;35
    Eric;Metz;24

    qui donnerai :

    Paul;Paris;24;2
    Paul;Toulouse;24;2
    Paul;Bordeaux;12;1
    Isa;Paris;10;1
    Isa;Metz;35;2
    Eric;Metz;24;1

    si oui, tu peux utiliser DCount() avec un truc du genre :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    DCount("*"; "TNomTaSource"; "[Nom]=""" & [TNomTaSource].[Nom] """ and [Nombre]<=" & [TNomTaSource].[Nombre])

    Attention il faut impérativement que les opérateurs logiques (and, or, not) soit en anglais dans la zone de critère.

    si non, il faut trouver un critère supplémentaire pour distinguer tes enregistrements comme :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    DCount("*"; "TNomTaSource"; "[Nom]=""" & [TNomTaSource].[Nom] """ and [Nombre]<=" & [TNomTaSource].[Nombre] & " and [Ville]<=""" & [TNomTaSource].[Ville] & """")

    Et je ne suis pas sur que cela donne le résultat voulu ... à tester.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Et évidement cela ce fait de façon très simple en Excel une fois les données dans le bon ordre.

    Où la colonne A est le nom, B la ville, le nombre et D la le rang et D1=1.

    à répéter sur chacune des lignes, va compter le rang à chaque changement de nom.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  4. #4
    Membre régulier
    Homme Profil pro
    Automaticien
    Inscrit en
    Décembre 2015
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Automaticien

    Informations forums :
    Inscription : Décembre 2015
    Messages : 84
    Points : 107
    Points
    107
    Par défaut
    Bonsoir,


    Je ne suis pas sur de tout comprendre concernant ton besoin... Mais si tu veux faire une sorte de compteur sur plusieurs critères qui s'incrémente à chaque ajout via un formulaire tu peux faire quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub Form_BeforeUpdate(Cancel As Integer)
        Dim strCriteria As String
     
        If IsNull(Me.ChampARemplir) Then
            strCriteria = "[Nom] = " & Me.Nom _
                & " AND [Ville] = " & Me.Ville _
                & " AND [Nombre] = " & Me.Nombre
            Me.ChampARemplir = Nz(DMax("[ChampARemplir]", Me.RecordSource, strCriteria), 0) + 1
        End If
    End Sub
    C'est très proche de la proposition de marot_r mais l'utilisation de DMax permet de prendre en compte les éventuels trous qui peuvent être présents à la suite d'une suppression d'enregistrements.
    Il y a 10 types de personnes dans le monde : ceux qui comptent en binaire et les autres.

  5. #5
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Attention avec DMax() en environnement multi-utilisateur il faut gérer le fait qu'il existe une très très faible probabilité que 2 personnes fassent le même calcul exactement au même moment et que le système retourne 2 fois le même numéro.
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  6. #6
    Membre régulier
    Homme Profil pro
    Automaticien
    Inscrit en
    Décembre 2015
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Automaticien

    Informations forums :
    Inscription : Décembre 2015
    Messages : 84
    Points : 107
    Points
    107
    Par défaut
    Bonjour,

    N'ayant jamais fait d'applications multi utilisateurs je n'ai jamais pu rencontrer ce problème, merci de l'info je le note dans un coin pour le jour où j'aurais à le faire !
    Il y a 10 types de personnes dans le monde : ceux qui comptent en binaire et les autres.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Expert Banque en ligne
    Inscrit en
    Septembre 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Expert Banque en ligne
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2005
    Messages : 17
    Points : 14
    Points
    14
    Par défaut Simplifions le problème...
    Merci de vos propositions fort aimables mais elles ne m'ont pas permis d'aboutir...
    Simplifions donc la problématique si cela peut aider à inventer une solution !

    Une table décrit tous les appareils détenus par une famille comme suit :

    Qui(txt);Quoi(txt)
    LaMaman; smartphoneApple
    LaMaman; tabletteLenovo
    LePapa; smartphoneSamsung
    LaFille; tabletteAcer
    LeFils; smartphoneAlcatel
    LeFils; tabletteAsus

    Oui, je sais, c'est pas une BDD super super pro mais c'est comme ça, on ne peut pas avoir tous les bols. Table héritée... donc non modifiable !
    Soit donc deux champs Txt dont un est redondant mais pas l'autre (pas de doublon possible dans le second).

    Comme je suis incapable d'écrire un truc du style « sélectionner le 1er 'Quoi' de chacun des 'Qui' », j'essaie à tout le moins d'ajouter un numéro d'itération (pour un futur Select) comme ci-dessous :

    Qui(txt);Quoi(txt);ITnum(integer)
    LaMaman; smartphoneApple;1 (==> premier enregistrement trouvé de LaMaman)
    LaMaman; tabletteLenovo;2 (==> second enregistrement trouvé de LaMaman)
    LePapa; smartphoneSamsung;1 (==> premier enregistrement trouvé de LePapa)
    LaFille; tabletteAcer;1 (etc.)
    LeFils; smartphoneAlcatel;1
    LeFils; tabletteAsus;2

    C'est là que je tourne en rond... #PleaseHelp

  8. #8
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Comme je suis incapable d'écrire un truc du style « sélectionner le 1er 'Quoi' de chacun des 'Qui' »,
    Pour faire cela tu n'as pas besoin de numéroter tes équipements.
    Si le critère est l'ordre alphabétique, une simple requête de regroupement va te donner cela.

    Un truc du genre :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT [TaTable].[Qui] as [Qui], Min([TaTable].[Quoi]) AS [Quoi]
    FROM [TaTable]
    GROUP BY [TaTable].[Qui]
    ORDER BY [TaTable].[Qui];

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  9. #9
    Membre à l'essai
    Homme Profil pro
    Expert Banque en ligne
    Inscrit en
    Septembre 2005
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Expert Banque en ligne
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2005
    Messages : 17
    Points : 14
    Points
    14
    Par défaut Merci ! :)
    Tout fonctionne exactement comme voulu.
    Merci de votre aide précieuse et bonne journée.
    #EpineDuPied

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

Discussions similaires

  1. Trigger : incrémenter un champ selon un autre champ
    Par David55 dans le forum Requêtes
    Réponses: 9
    Dernier message: 28/03/2011, 18h26
  2. [AC-2003] Numérotation automatique d'un champ selon un autre champ
    Par moht66 dans le forum VBA Access
    Réponses: 2
    Dernier message: 21/02/2011, 16h49
  3. Dernières entrées selon un autre champ
    Par kosowski dans le forum Langage SQL
    Réponses: 9
    Dernier message: 31/12/2009, 08h47
  4. [AC-2003] Comment rendre champ inaccessible selon réponse autre champs?
    Par Souriane dans le forum IHM
    Réponses: 7
    Dernier message: 27/11/2009, 21h05
  5. Affichage données selon un autre champ : Requête ou VBA?
    Par Noemy23 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 03/07/2007, 13h13

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