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

IHM Discussion :

Calcul sur Zone de liste


Sujet :

IHM

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 88
    Points : 47
    Points
    47
    Par défaut Calcul sur Zone de liste
    Bonjour,

    J’ai un formulaire dans lequel il y a une zone de liste, qui contient un tableau de plusieurs colonnes, dont une colonne « Longueur » (champ numéro 7, et de type double). Je cherche à afficher dans mon formulaire via une zone de texte, un texte, ou autre moyen la SOMME de la colonne « Longueur » (pour les valeurs affichées dans ma zone de liste).

    Merci pour votre aide.

    JA

  2. #2
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 337
    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 337
    Points : 19 572
    Points
    19 572
    Billets dans le blog
    65
    Par défaut
    Salut,

    Ta zone de liste est alimentée par une requête je suppose ???

    Si oui, peux-tu poster son sql ?
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 88
    Points : 47
    Points
    47
    Par défaut
    voilà le SQL correspondant à la zone de liste.
    Il est intégré dans un petit bout de code vba.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SQL = "SELECT First(Streets_et_AltStreets.LINK_ID_MAX) AS LINK_ID_MAX, Streets_et_AltStreets.FEAT_ID, First(Streets_et_AltStreets.ST_NAME) AS Nom_complet, First(Streets_et_AltStreets.ST_NM_BASE) AS Nom_de_la_rue, First(Streets_et_AltStreets.ST_TYP_BEF) AS Type_de_voie, First(Streets_et_AltStreets.L_POSTCODE) AS Code_Postal, First(Streets_et_AltStreets.LONG_TOTALE_TRONCON) AS Longueur_totale_KM"
    SQL = SQL & " FROM Streets_et_AltStreets"
    SQL = SQL & " WHERE (((Streets_et_AltStreets.R_INSEE) Like '" & Me.Lst_Code_INSEE & "*') And ((Streets_et_AltStreets.LONG_TOTALE_TRONCON) Is Not Null)) Or (((Streets_et_AltStreets.L_INSEE) Like '" & Me.Lst_Code_INSEE & "*') And ((Streets_et_AltStreets.LONG_TOTALE_TRONCON) Is Not Null))"
    SQL = SQL & " GROUP BY Streets_et_AltStreets.FEAT_ID"
    SQL = SQL & " ORDER BY First(Streets_et_AltStreets.ST_NAME);"
    JA

  4. #4
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 337
    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 337
    Points : 19 572
    Points
    19 572
    Billets dans le blog
    65
    Par défaut
    Re,

    A la suite de ton code une fois que ta liste1 est mise à jour, tu mets le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    v = 0
     
    For i = 0 To Me.Liste1.ListCount - 1
    v = v + Me.Liste1.Column(6, i)
    Next i
     
    Me.Resultat.Value = v

    Si tu as 1 zone de liste nommée Liste1 et une zone de texte nommée Resultat
    Vous trouverez dans la FAQ, les sources ou les tutoriels, de l'information accessible au plus grand nombre, plein de bonnes choses à consulter sans modération

    Des tutoriels pour apprendre à créer des formulaires de planning dans vos applications Access :
    Gestion sur un planning des présences et des absences des employés
    Gestion des rendez-vous sur un calendrier mensuel


    Importer un fichier JSON dans une base de données Access :
    Import Fichier JSON

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 88
    Points : 47
    Points
    47
    Par défaut
    En utilisant ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    v = 0
     
    For i = 0 To Me.Liste1.ListCount - 1
    v = v + Me.Liste1.Column(6, i)
    Next i
     
    Me.Resultat.Value = v
    Le Me.resultat.value me renvoie : le nom de la colonne et toutes les valeurs de ma zone de liste (juste de la colonne qui m'intéresse). Alors que je cherche à obtenir la Somme de ces valeurs.
    Comment récupérer l'addition de la colonne 7 dans la variable v ?

    Merci

    JA

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 282
    Points : 356
    Points
    356
    Par défaut
    Essaye :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    v = v + cdbl(Me.Liste1.Column(6, i))
    tout en declarant
    - Bien programmer n'est pas choisir la solution la plus simple, mais la meilleure -

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 88
    Points : 47
    Points
    47
    Par défaut
    j'ai un message me disant :
    Incompatibilité de Type

    J'ai mis
    Dim v as Double
    et le champs de ma table est bien en réel double pourtant.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 282
    Points : 356
    Points
    356
    Par défaut
    es-tu certain que :

    • c'est bien la septieme colonne que tu veux additionner ? (la numerotation des colonnes commence a 0)
    • la septieme colonne ne contient que des donnees numeriques ?
    • si elle peut contenir des Null, utilise :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      v = v + cdbl(Nz(Me.Liste1.Column(6, i),0))
    - Bien programmer n'est pas choisir la solution la plus simple, mais la meilleure -

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 88
    Points : 47
    Points
    47
    Par défaut
    - C'est biean la 7ème colonne qui m'interresse. D'ailleurs, le Me.Liste1.Column(6, i) me retourne bien le nom de la colonne.
    - Et ce champ est de type double et ma requête écarte les valeurs pouvant être nulles.

    Voici mon code actuel :
    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
    25
    26
     
    Public Sub RefreshQuery()
    Dim SQL As String
    Dim v As Double
    Dim i As Long
     
    SQL = "SELECT First(Streets_et_AltStreets.LINK_ID_MAX) AS LINK_ID_MAX, Streets_et_AltStreets.FEAT_ID, First(Streets_et_AltStreets.ST_NAME) AS Nom_complet, First(Streets_et_AltStreets.ST_NM_BASE) AS Nom_de_la_rue, First(Streets_et_AltStreets.ST_TYP_BEF) AS Type_de_voie, First(Streets_et_AltStreets.L_POSTCODE) AS Code_Postal, First(Streets_et_AltStreets.LONG_TOTALE_TRONCON) AS Longueur_totale_KM"
    SQL = SQL & " FROM Streets_et_AltStreets"
    SQL = SQL & " WHERE (((Streets_et_AltStreets.R_INSEE) Like '" & Me.Lst_Code_INSEE & "*') And ((Streets_et_AltStreets.LONG_TOTALE_TRONCON) Is Not Null)) Or (((Streets_et_AltStreets.L_INSEE) Like '" & Me.Lst_Code_INSEE & "*') And ((Streets_et_AltStreets.LONG_TOTALE_TRONCON) Is Not Null))"
    SQL = SQL & " GROUP BY Streets_et_AltStreets.FEAT_ID"
    SQL = SQL & " ORDER BY First(Streets_et_AltStreets.ST_NAME);"
     
     
    Me.lstResults.RowSource = SQL
    Me.lstResults.Requery
     
     
    v = 0
    For i = 0 To Me.lstResults.ListCount - 1
    'v = v + CDbl(Me.lstResults.Column(6, i))
    'v = v + Me.lstResults.Column(6, i)
    v = v + CDbl(Nz(Me.lstResults.Column(6, i), 0))
    Next i
    Me.Resultat.Value = v
     
    End Sub
    Résultat : erreur de type "Incompatibilité de Type"


    Ce qui est bizarre, c'est que si je mets les lignes de codes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    ...
    Dim v As String
    ....
     
    v = 0
     
    For i = 0 To Me.Liste1.ListCount - 1
    v = v + Me.Liste1.Column(6, i)
    Next i
     
    Me.Resultat.Value = v
    ...
    J'obtiens dans ma zone de texte : le nom de la colonne et la liste de toutes les valeurs qui s'y trouvent (et nom la SOMME)

    Et dès que je mets
    j'ai une erreur de compatibilité, même avec vos autres propositions.

  10. #10
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    A mon avis, il y a un soucis de séparateur décimal. Utilise la fonction replace pour transformer le . en , ou l'inverse suivant le séparateur décimal que tu utilises.

  11. #11
    Membre du Club
    Inscrit en
    Août 2009
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 89
    Points : 61
    Points
    61
    Par défaut
    Bonjour,


    Oui, c'est le genre d'erreur toute bête qui te fait perdre des heures, je déteste ça moi aussi

    Bon, Essaye:
    - vérifie qu'il n'y a rien dans la source de ta zone de texte
    - essaye de faire MsgBox v pour voir ce que ça donne
    - ...
    J'obtiens dans ma zone de texte : le nom de la colonne et la liste de toutes les valeurs qui s'y trouvent (et nom la SOMME)
    nom de la colonne, donc entete de colonne non? si oui, je crois qu'il faut faire for i=1 to... (pas sûr!)
    .Column(6,0) : la ligne d'entete

    le séparateur décimal, c'est une piste aussi. Essaye avec seulement une ligne pour voir si CDbl() fait bien le travail, par exemple .Value = .Column(6,2) (une ligne avec un nombre réel bien sur)

    a+

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 88
    Points : 47
    Points
    47
    Par défaut
    J'ai modifié les options régionales pour passer du . à ,
    mais j'ai toujours la même erreur, à savoir "Incompatibilité de type".

    Y aurait-il une autre solution pour obtenir la somme d'un champ présent dans une zone de liste ?

    JA

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 88
    Points : 47
    Points
    47
    Par défaut
    YES
    ca fonctionne avec for i=1 to
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    v = 0
    For i = 1 To Me.lstResults.ListCount - 1
    v = v + Me.lstResults.Column(6, i)
    Next i
    Me.Resultat.Value = v
    (Nos mails s'étaient croisés)

    Merci à tous

  14. #14
    Membre du Club
    Inscrit en
    Août 2009
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 89
    Points : 61
    Points
    61
    Par défaut
    Y'a pas de quoi
    Bonne journée...

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

Discussions similaires

  1. Cliquer sur zone de liste pour valider la valeur
    Par gwendk dans le forum Access
    Réponses: 7
    Dernier message: 15/05/2006, 15h13
  2. clic sur zone de liste pour validation
    Par ormoy28 dans le forum Access
    Réponses: 7
    Dernier message: 11/05/2006, 11h03
  3. Question sur Zone de Liste !
    Par Orakle dans le forum IHM
    Réponses: 3
    Dernier message: 25/11/2005, 09h38
  4. Acess2k3: Bande noire sur zone de liste différente
    Par uloaccess dans le forum Access
    Réponses: 5
    Dernier message: 28/10/2005, 17h57
  5. Evènement sur zone de liste
    Par Mout85 dans le forum IHM
    Réponses: 3
    Dernier message: 20/06/2005, 11h44

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