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

Access Discussion :

Trier des données par ordre d'importance


Sujet :

Access

  1. #1
    Membre du Club Avatar de popoliline
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 88
    Points : 62
    Points
    62
    Par défaut Trier des données par ordre d'importance
    Bonjour,

    Est-il possible de trier des informations en fonction de leur importance?

    Par exemple, pour des accidents de culture:
    Si une parcelle perd 5ha à cause de "Trous" et 3ha à cause d' "Adventices", je voudrais obtenir dans deux zones de texte différentes: zone de texte1: "8ha" (ça c'est faisable, une somme des 2 surfaces) à cause de zone de texte2: "Trous + Adventices" (c'est là que je bloque, il faut d'abord avoir "Trous", car c'est la plus grosse causse d'accidents de culture)
    Autre exemple, si une parcelle perd 2ha à cause de "Trous", 4ha à cause d'"Adventices" et 3ha à cause de "Herbe" il me faudrait obtenir 9ha à cause de "Adventices + Herbe + Trous" (toujours du plus important au plus faible )

    Merci d'avance pour vos réponses.

  2. #2
    Membre chevronné
    Avatar de Demco
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 396
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 396
    Points : 2 228
    Points
    2 228
    Par défaut
    Je n'ai jamais eu à faire ça et ce n'est pas très clair mais ... essaie avec la fonction Iif() directement dans la requête.

    En espérant t'aider.
    J'aime les gâteaux.

  3. #3
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    tu ne précises pas sous quelle forme sont tes données

    en ligne

    parcelle incident surface
    1 trou 5
    1 adventice 2


    ou

    en colonne
    parcelle trou adventice
    1 5 2
    Elle est pas belle la vie ?

  4. #4
    Membre actif
    Inscrit en
    Juin 2006
    Messages
    273
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 273
    Points : 258
    Points
    258
    Par défaut
    Deja si tu as beaucoup de choix d'accidents, je te conseille de faire une table avec le nom de l'accident et son importance (un numero par exemple genre Trou 7 / Herbe 6 ...)

    Ensuite si tu manipules les accidents par des requetes, il te suffit de faire une jointure avec cette table sur le champ accident, et ajouter la colonne "importance" dans la requete. Puis tu n'as plus qu'a faire ordre decroissant sur cette colonne. Deja a partir du resultat de la requete tu peux concatener les accidents dans une chaine de caracteres en parcourant les resultats de la requete avec un recordset en VBA. Maintenant c'est vrai que si tu pouvais en dire plus sur quel format tu utilises pour manipuler les donnees, quelles requetes...

  5. #5
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    @Catoucat
    sauf erreur, l'importance n'est pas fonction du type de l'accident, mais de l'importance de l'accident.
    Si j'ai donc bien compris, ce que tu proposes est non conforme à la demande.
    Il n'en reste pas moins que l'idée est excellente si c'est toujours Trou qui est l'accident le plus important.

    @Popoliline
    Ta classification se fait par parcelle, donc ?
    Peut-il y avoir, dans la table, plusieurs fois le même accident pour la même parcelle ?
    Sinon, avec les éléments que je pense avoir compris, et pour répondre à ta question :
    Dans le premier cas, la solution est simple. Un calcul à base de SomDom (DSum) dans ton formulaire, et c'est fini.
    Dans le deuxième problème, tu devras créer une fonction qui
    • reçoive en paramètre la parcelle ;
    • crée une requête qui tri dans l'ordre décroissant la somme des surfaces regroupées par accident ;
    • boucle sur le recordset ainsi généré ;
    • fabrique la chaine des accidents et la renvoie en résultat.

    Voilà !
    Je te souhaite un bon séjour parmi nous.

  6. #6
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    A vue de Nez, comme cela, la fonction donnerait un truc du genre
    (désolé, c'est écrit à la volée, sans tests)

    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
    Function Accidents(NumParcelle As Long) as string
    Dim rst as dao.recordset
    dim strTemp as string
    set rst=currentdb.openrecordset("Select Accident from TaTable OrderBy Sum(Surface) Desc;",DbOpenSnapshot)
    Do until rst.eof
        strTemp=strTemp & "+" & rst(0)
        rst.movenext
    loop
     
    if strTemp ="" then
        exit function
    else
        strTemp = mid(strTemp,2)
    end if
     
    rst.close
    set rst=nothing
    end function

  7. #7
    Membre actif
    Inscrit en
    Juin 2006
    Messages
    273
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 273
    Points : 258
    Points
    258
    Par défaut
    Ahhh oui en effet j'avais mal compris

  8. #8
    Membre du Club Avatar de popoliline
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 88
    Points : 62
    Points
    62
    Par défaut
    tout d'abord, merci à tous pour vos réponses,
    juste quelques précision:

    Ta classification se fait par parcelle, donc ?
    Peut-il y avoir, dans la table, plusieurs fois le même accident pour la même parcelle ?
    donc ma classification se fait bien par parcelle
    et par contre, pour une même parcelle, pour un cycle donné, il n'y aura qu'une seule fois le même accident (en fait lors de l'observation terrain, on somme déjà les accidents par cétégories, donc une seule fois "Trou" et/ou une seule fois "Herbe" ect....

    @Catoutcat et pour confirmer mon problème, un "Trou" peut être l'accident le plus important pour une parcelle et pas pour une autre.

    @Random,
    en ligne
    parcelle incident surface
    1 trou 5
    1 adventice 2
    je voudrais mettre mes données de cette manière (car s'il faut rajouter un accident cela reste possible pour l'utilisateur (contrairement à la disposition en colonne où là cela deviendrait plus compliqué)

    @ Maxence HUBICHE,
    Je suis désolé mais je nage un peu avec les codes et je ne vois pas trop à quel endroit je doit insérer le code que tu m'a ecrit.
    donc si tu a un petit moment pour me répondre ,
    merci beaucoup.
    Pauline

  9. #9
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    Dans un module.
    Tu crées un nouveau module.
    Tu copies-colle le code
    Tu enregistre
    Tu fermes le Visual basic Editor (la fenêtre dans laquelle tu es)
    Et maintenant, tu as une nouvelle fonction de disponible, la fonction Accidents.

    Attention, il y aura peut-être quelques modifs à faire dans le code en fonction des noms des champs.
    A toi de voir !


    Tiens nous au courant.

  10. #10
    Membre expérimenté
    Avatar de Mahefasoa
    Homme Profil pro
    Manager IT
    Inscrit en
    Octobre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Manager IT

    Informations forums :
    Inscription : Octobre 2003
    Messages : 835
    Points : 1 664
    Points
    1 664
    Par défaut
    Salut popoliline,

    Si comme tu l'as confirmé, tu as une table (nommé TBL) du style parcelle/incident/surface, voici ce que je te propose.
    Dans un formulaire, tu as une zone de liste (nommé ZL contenant les parcelles) et deux zones de texte (nommés respectivement ZT1 et ZT2).
    A l'événement sur clic de la zone de liste, écris le code suivant:
    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
     
    Private Sub ZL_Click()
      Dim strIncident As String, lngSurface As Long
      Dim rs As DAO.Recordset
      Set rs = CurrentDb.OpenRecordset("SELECT TBL.Incident, TBL.Surface FROM TBL WHERE TBL.Parcelle=" & Me.ZL & " ORDER BY TBL.Surface DESC;", 
     
    dbOpenDynaset)
      With rs
        If .RecordCount <> 0 Then
          .MoveFirst
          Do While Not .EOF
            strIncident = strIncident & " + " & .Fields(0).Value
            lngSurface = lngSurface + .Fields(1).Value
            .MoveNext
            DoEvents
          Loop
          'affiche la surface totale
          Me.ZT1 = lngSurface
          'affiche les incidents
          Me.ZT2 = Mid(strIncident, 4)
        End If
      End With
      Set rs = Nothing
    End Sub
    Ce code se trouve dans la base attachée au format 2000 et 97.
    Fichiers attachés Fichiers attachés
    La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. Ici nous avons réuni théorie et pratique: Rien ne fonctionne ... et personne ne sait pourquoi!
    Albert Einstein

  11. #11
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    Solution intéressante, mais beaucoup moins générique que celle que j'ai montrée quelques posts au-dessus, car tu références des objets du formulaire.
    L'intérêt d'avoir une fonction, c'est que, si cela lui plait, elle pourra aussi l'utiliser dans une requête, une zone de texte, ....

  12. #12
    Membre expérimenté
    Avatar de Mahefasoa
    Homme Profil pro
    Manager IT
    Inscrit en
    Octobre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Manager IT

    Informations forums :
    Inscription : Octobre 2003
    Messages : 835
    Points : 1 664
    Points
    1 664
    Par défaut
    Ca c'est clair. Mais c'est ce qui m'est venu à l'esprit. De toute les manière, si elle le veut, elle pourra toujours en fabriquer une à partir de la.
    La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. Ici nous avons réuni théorie et pratique: Rien ne fonctionne ... et personne ne sait pourquoi!
    Albert Einstein

  13. #13
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    Citation Envoyé par Mahefasoa
    elle pourra toujours en fabriquer une à partir de la.
    Elle est déjà faite, quelques posts au dessus.
    En fait, ton code est quasiment identique à celui de la fonction que je lui ai proposée quelques lignes au-dessus.

    Mais
    tu ne passe pas d'argument à ta procédure tu récupères la valeur dans un controle. Ceci pose quelques soucis, comme, par exemple, si tu dois utiliser la même fonctionalité ailleurs => tu dois la réécrire
    tu ne renvoies pas de valeur puisque tu n'as pas fait de fonction tu inscris directement dans les contrôles. Ceci aussi peut poser souci, car s'il y a besoin de faire ce calcul dans une série de contrôles (affichage en continu) tu ne pourras pas y arriver.

    Alors, je le redis, c'est une 'bonne' solution.
    Mais la solution précédente est plus souple.
    Il eût été intéressant, plutôt, de proposer des améliorations à la fonction, plutôt que quelque chose qui marche, mais est moins profitable à l'utilisateur

  14. #14
    Membre expérimenté
    Avatar de Mahefasoa
    Homme Profil pro
    Manager IT
    Inscrit en
    Octobre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Manager IT

    Informations forums :
    Inscription : Octobre 2003
    Messages : 835
    Points : 1 664
    Points
    1 664
    Par défaut
    Leçon retenue Maxence!
    Merci pour les précisions.
    La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. Ici nous avons réuni théorie et pratique: Rien ne fonctionne ... et personne ne sait pourquoi!
    Albert Einstein

  15. #15
    Membre du Club Avatar de popoliline
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 88
    Points : 62
    Points
    62
    Par défaut
    bonjour à tous,
    déjà un grand merci pour votre aide et désolé de ne pas avoir donner de nouvelles mais je ne dispose pas de connexion internet le week-end.
    donc j'ai pu en profiter un peu pour tester les solutions que vous me proposiez.
    j'ai d'abord commencé par celle de Mahefasoa qui me paraît la plus simple pour le moment, mais je pense que je devrai par la suite passer par un module car je devrai probablement utiliser les infos dans des états

    donc j'ai insérer le code proposé par Mahefasoa dans mon formulaire, je l'ai modifié pour que celà corresponde à mes tables mais je suis face à un problème, d'erreur de syntaxe dans mes expressions.
    ma table est la suivante: 8_Accident
    Champs:
    • N°_Accident (numéro automatique)

    • Id_Casier (numérique Entier long (qui est ma clé primaire dans ma tabe: Casier, car c'est une relation 1 casier --> n Accidents)

    • Accident (Texte)

    • Surfac_Ac (numérique entier long)

    donc je ne vois pas trop comment résoudre ce problème, surement des " " qui doivent manquer ou quelquechose du genre
    voici mon code (erreur de syntaxe en rouge):
    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
    Private Sub ZL_Click()
      Dim strAccident As String, lngSurface As Long
      Dim rs As DAO.Recordset
      Set rs = CurrentDb.OpenRecordset("SELECT 8_Accident.Accident, 8_Accident.Surface 
    FROM 8_Accident WHERE 8_Accident.Id_Casier=" & Me.ZL & " ORDER BY 8_Accident.Surface DESC;", dbOpenDynaset)  
    With rs
        If .RecordCount <> 0 Then
          .MoveFirst
          Do While Not .EOF
            strAccident = strAccident & " + " & .Fields(0).Value
            lngSurface = lngSurface + .Fields(1).Value
            .MoveNext
            DoEvents
          Loop
          'affiche la surface totale
          Me.ZT1 = lngSurface
          'affiche les incidents
          Me.ZT2 = Mid(strAccident, 4)
        End If
      End With
      Set rs = Nothing
    End Sub
    autre petite question concernant la solution proposé par Maxence HUBICHE,
    je repécise que VBA et moi font bien plus que deux pour le moment (mais cela s'améliore grâce à vous ) .
    donc aprés avoir écris mon module, comment faire pour y faire appel dans mon formulaire? a quel moment précisément peut-on l'utiliser (dans des requêtes, formulaire, état)?

    encore merci pour toutes vos réponses
    Pauline

  16. #16
    Membre du Club Avatar de popoliline
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 88
    Points : 62
    Points
    62
    Par défaut
    re bonjour,
    désolé de faire remonter le poste mais je ne trouve toujours pas de solution à mon problème, j'ai beau cherhcer un peu partout mais rien,
    pour en revenir à mon problème de syntaxe, je ne vois pas comment le résoudre, en adaptant le code proposé par Mahefasoa je n'arrive pas à le faire fonctionner (je n'ai pas d'espace dans le nom de mes tables donc pas de [], pas de fautes d'orthographe non plus, je ne vois pas.....

    ensuite pour lancer un code contenu dans un module, j'ai trouvé qu'il fallait indiquer, sur un événement de la zone de liste (dans mon cas sur clik, je pense), le nom du module suivi de la procédure à appeler.
    par contre je ne sais pas trop quel procédure utiliser dans mon cas et comment l'écrire

    donc si quelqu'un avait un petit moment pour me donner quelques infos...
    Pauline

  17. #17
    Membre expérimenté
    Avatar de Mahefasoa
    Homme Profil pro
    Manager IT
    Inscrit en
    Octobre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Manager IT

    Informations forums :
    Inscription : Octobre 2003
    Messages : 835
    Points : 1 664
    Points
    1 664
    Par défaut
    Salut Pauline,

    1. Met des crochets autour du nom de la table. Donc au lieu de 8_Accident écris [8_Accident] et le message d'erreur sur 8_Accident.Accident n'apparait plus.
    2. Puis au lieu de Surface, écris Surfac_ac sinon, il t'aurait dit 1 attendu!

    J'ai vérifié tout ceci en intégrant dans la base exemple que je t'ai envoyée (je ne sais pas si tu l'as consulté).
    A+
    La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. Ici nous avons réuni théorie et pratique: Rien ne fonctionne ... et personne ne sait pourquoi!
    Albert Einstein

  18. #18
    Membre du Club Avatar de popoliline
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 88
    Points : 62
    Points
    62
    Par défaut
    Salut Mahefasoa,

    j'ai bien consulté la base exemple qui tu m'a envoyé, juste ce qu'il me fallait le problème est survenu quand j'ai voulu l'insérer dans ma base.

    donc, j'ai essayé de mettre des [ ] et de remplacer Surface par Surface-Ac (j'avais fait une petite erreur, vite corrigée) et ...............cela fonctionne, merci beaucoup,

    par contre, je voudrais pourvoir utiliser ce code dans un état qui me ferai apparaître tous les accidents par casiers. donc comme l'avai expliquer Maxence HUBICHE, il faudrait utiliser un module. Le code a déjà été fourni, (il faut juste que je vérifie si tout est bon) mais serai-t-il possible d'avoir quelques infos à ce sujet , comme par exemple comment l'appeler depuis un formulaire ou un état? quelle procédure utiliser ?

    encore merci

  19. #19
    Membre expérimenté
    Avatar de Mahefasoa
    Homme Profil pro
    Manager IT
    Inscrit en
    Octobre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Manager IT

    Informations forums :
    Inscription : Octobre 2003
    Messages : 835
    Points : 1 664
    Points
    1 664
    Par défaut
    Salut Pauline,

    1. Tu crée uun module et dans ce module, tu vas créer une fonction que tu nommes comme tu veux (pour l'instant je l'ai nommée TriParImportance) et tu y insères le code.
    En voici un exemple, tiré sur ce que je t'avais proposé. La fonction prend comme paramètre le numéro de la parcelle, fourni par Id_Casier.
    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
    Public Function TriParImportance(Pcelle As Long) As String
      TriParImportance = ""
      Dim strIncident As String
      Dim rs As DAO.Recordset
      Set rs = CurrentDb.OpenRecordset("SELECT [8_Accident].Accident, [8_Accident].Surfac_ac " & _
    	"FROM [8_Accident] " & _
    	"WHERE [8_Accident].Id_Casier=" & Pcelle & " " & _
    	"ORDER BY [8_Accident].Surfac_ac DESC;", _
    	dbOpenDynaset)
      With rs
        If .RecordCount <> 0 Then
          .MoveFirst
          Do While Not .EOF
            strIncident = strIncident & " + " & .Fields(0).Value
            .MoveNext
            DoEvents
          Loop
          'affiche les incidents
          TriParImportance = Mid(strIncident, 4)
        End If
      End With
      Set rs = Nothing
    End Function
    Remarque que j'ai enlevé la partie qui calcule la somme des surfaces.
    2. Tu enregistres le module
    3. Tu crée une requête qui va regrouper les Id_Casier, calculer la somme des Surface_Ac et afficher les Accidents par ordre d'importance (ceci devait provenir de la fonction). En quelques mots, tu dois créer une requête avec regroupement dont voici le SQL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT [8_Accident].Id_Casier, Sum([8_Accident].Surface_Ac) AS TotalSurface, TriParImportance([Id_Casier]) AS Dégats
    FROM [8_Accident]
    GROUP BY [8_Accident].Id_Casier, TriParImportance([Id_Casier]);
    J'ai mis en gras la fonction appelée avec son unique argument (paramètre) qui est Id_Casier.
    4. Enfin tu crée l'état sur la requête: la source de l'état est la requête. Ici la fonction n'est pas appelée à partir de l'état mais à partir de la requête!

    Pour appeler une fonction, c'est assez simple car il suffit de de l'affecter à un champ (contrôle) ou une variable. Pour le premier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    NomContrôle = NomFonction(Paramètre)
    Pour le second:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    NomVariable = NomFonction(Paramètre)
    Note que si aucun paramètre n'est requis par la fonction, tu laisse les parenthèses vides. Je crois que Maxence HUBICHE l'a déja expliqué assez clairement.
    Et normalement, le tour est joué.
    La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. Ici nous avons réuni théorie et pratique: Rien ne fonctionne ... et personne ne sait pourquoi!
    Albert Einstein

  20. #20
    Membre du Club Avatar de popoliline
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 88
    Points : 62
    Points
    62
    Par défaut
    salut Mahefasoa,

    merci pour ta réponse,
    et merciiiiiiiiiiiiiiiiiiiiii pour ta solution, cela marche à merveille

    j'ai bien eu quelques doutes au début, mais en fait, il y avait une toute petite erreur (un e) qui manqué à la fin de [8_Accident].Surfac_ac. mais tout est rentré dans l'ordre.
    par contre, une dernière petite question pour la route (et pour ce poste, car comment faire pour progresser dans access sans ce magnifique forum qui répond à toutes vos questions )
    donc si j'ai plus ou moins bien compris, pour utiliser ce module dans un formulaire (par exemple, saisir les accident directement et obtenir la somme et les accidents triès dans 2 champs séparés (pour la somme, j'ai saisie, elle est directement calculé ce n'est pas fait avec le module)) il faudrait que j'affecte la fonction à une zone de texte de cette manière:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    NomZoneDeTexte = TriParImportance(Pcelle)
    et là, j'obtiendrai le classement par odre de mes accidents dans cette zone de texte.
    c'est ça?

    sinon, c'est avec plaisir que je peux mettre ce poste en Résolu,
    (par contre, si quelqu'un pouvait juste me confirmer pour le formulaire)

    encore merci Mahefasoa et merci aux autres aussi

    Pauline

    PS:peut-être que ce code pourrait servir de source pour d'autres personnes,

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

Discussions similaires

  1. Trier des combobox par ordre croissant et alphabétique
    Par floflo50100 dans le forum Excel
    Réponses: 6
    Dernier message: 09/04/2015, 15h31
  2. [MySQL] Trier des données par catégories
    Par robinowned dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 22/11/2013, 14h43
  3. [XL-2010] Trier des données par intervalle et tracer un histogramme
    Par Grichka146 dans le forum Excel
    Réponses: 1
    Dernier message: 05/01/2012, 20h35
  4. Trier des lignes par ordre alphabétique ?
    Par Evocatii dans le forum Eclipse
    Réponses: 0
    Dernier message: 11/08/2007, 11h26
  5. Re - Trier des données par ordre d'importance
    Par popoliline dans le forum Access
    Réponses: 14
    Dernier message: 25/08/2006, 12h29

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