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 :

Cumul de zone texte [AC-2016]


Sujet :

Requêtes et SQL.

  1. #1
    Membre habitué Avatar de fazpedro
    Homme Profil pro
    Inscrit en
    Août 2009
    Messages
    504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 504
    Points : 128
    Points
    128
    Par défaut Cumul de zone texte
    Bonjour,

    Je cherche à cumuler plusieurs zones de texte et je n'y arrive pas car la fonction somme ne s'exécute que sur des montants... avez-vous un idée ?
    Merci d'avance,

    Table :

    Nom Texte1
    Pierre Le texte de Pierre 1
    Marc Le texte de Marc 1
    Sophie Le texte de Sophie 1
    Pierre Le texte de Pierre 2
    Marc Le texte de Marc 2

    Voici ce que je souhaite : un regroupement par nom mais avec une zone texte "cumulée" :

    Nom Texte2
    Pierre Le texte de Pierre 1;Le texte de Pierre 2
    Marc Le texte de Marc 1;Le texte de Marc 2
    Sophie Le texte de Sophie 1

  2. #2
    Expert éminent Avatar de hyperion13
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 274
    Points : 6 583
    Points
    6 583
    Par défaut
    Salut
    Je pense que je ne serai pas le seul, mais je n'ai absolument rien compris à votre illustration.
    Soyez un peu plus clair dans votre demande.

    Sinon pour mettre bout à bout des valeurs : Me.Textbox1 &"-"& Me.Textbox2 etc.

  3. #3
    Membre habitué Avatar de fazpedro
    Homme Profil pro
    Inscrit en
    Août 2009
    Messages
    504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 504
    Points : 128
    Points
    128
    Par défaut
    Voici ce que je souhaite : un regroupement par nom mais avec une zone texte "cumulée" :

    Nom Texte2
    Pierre Le texte de Pierre 1;Le texte de Pierre 2
    Marc Le texte de Marc 1;Le texte de Marc 2
    Sophie Le texte de Sophie 1

    Requête SQL :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT DISTINCT Nom, Sum(Texte1) AS Texte2
    FROM MaTable
    GROUP BY Nom, Texte1;
    Message : Type de données incompatible dans l'expression du critère

  4. #4
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 865
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 865
    Points : 14 989
    Points
    14 989
    Par défaut
    bonjour,
    regarde dans ce lien il y a une fonction qui est proposée mais qui est à adapter à ton besoin (pour rappel ce code source datant un peu, il n'est pas nécessaire d'ajouter la référence Microsoft DAO, elle existe déjà par défaut).
    Fais-nous un retour si tu ne t'en sors pas pour l'adaptation

  5. #5
    Membre habitué Avatar de fazpedro
    Homme Profil pro
    Inscrit en
    Août 2009
    Messages
    504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 504
    Points : 128
    Points
    128
    Par défaut
    J'ai essayé avec le lien mais cela ne fonctionne pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT DISTINCT Tbl_projet.Projet, Recupparticipant(Projet) AS LesParticipants FROM Tbl_projet;
    Fonction Recupparticipant non définie ddans l'expression
    Nom ambigu détecté "Recupparticipant"
    Cette erreur se produit lorsqu’un événement ne peut pas être exécuté parce que l’emplacement de la logique correspondante est introuvable. 
    Par exemple, si la propriété OnOpen d’un formulaire est définie sur la valeur =[Field], 
    cette erreur se produit, car un nom de macro ou d’événement doit être exécuté lorsque cet événement se produit.

  6. #6
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 865
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 865
    Points : 14 989
    Points
    14 989
    Par défaut
    bon cela va être compliqué, tu sembles ne pas maîtriser ni VBA, ni SQL. Le code n'est pas à prendre tel quel mais à adapter à ton besoin.
    De plus, d'après le texte des erreurs que tu as posté je pense que tu utilises le code dans un formulaire, chose qui n'a pas été indiquée au début. Si tu veux une réponse claire et précise, il faut nous donner des renseignements clairs et précis: ou utilises-tu le code SQL posté ? (Source du formulaire, liste déroulante, Source contrôle d'une zone de texte, ou autre)

    En premier, tu dois copier le code ci-dessous dans un nouveau Module VBA:
    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
    Public Function RecupParticipant(Projet As Long) As String
    Dim res As DAO.Recordset
    Dim SQL As String
    'Selectionne les participant du projet
    SQL = "SELECT NomParticipant FROM Tbl_Projet WHERE Projet=" & Projet
    Set res = CurrentDb.OpenRecordset(SQL)
    'Concatene les différents enregistrement
    While Not res.EOF
        RecupParticipant = RecupParticipant & res.Fields(0).Value & ";"
        res.MoveNext
    Wend
    'Enleve le dernier espace
    RecupParticipant = Left(RecupParticipant, Len(RecupParticipant) - 1)
    'libere la mémoire
    Set res = Nothing
    End Function
    ensuite il faut remplacer le nom de la table Tbl_Projet par le nom de ta table (tu as donné comme exemple MaTable)
    Nomparticipant est à remplacer par Texte1
    Projet est à remplacer par Nom (attention Nom est un mot-réservé système, il ne faut pas que des colonnes de tables ou d'autres objets soient nommés ainsi). De plus, ce serait mieux d'utiliser un identifiant unique de type numérique, un champ NuméroAuto serait l'idéal.

    Si tu gardes Nom, qui est de type texte, il faut remplacer RecupParticipant(Projet As Long) par RecupParticipant(Nom As String)une fois modifié ton code devrait donner ceci:
    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
    Public Function RecupParticipant(Nom As String) As String
    Dim res As DAO.Recordset
    Dim SQL As String
    'Sélectionne les textes du nom passé en paramètre
    SQL = "SELECT Texte1 FROM Matable WHERE Nom='" & Nom &"'"
    Set res = CurrentDb.OpenRecordset(SQL)
    'Concatène les différents enregistrements
    While Not res.EOF
        RecupParticipant = RecupParticipant & res.Fields(0).Value & ";"
        res.MoveNext
    Wend
    'Enlève le dernier caractère ;
    RecupParticipant = Left(RecupParticipant, Len(RecupParticipant) - 1)
     
    'libere la mémoire
    Set res = Nothing
    End Function
    ensuite, tu dois utiliser cette fonction dans SQL comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT  Nom, RecupParticipant(Nom) AS Texte2
    FROM MaTable
    GROUP BY Nom;
    après, il est possible de renommer la fonction pour coller à ton besoin: ConcatenerTextes par exemple, mais ça c'est une autre histoire.
    D'ailleurs je crois qu'il existe déjà dans le forum (dans la FAQ?) une fonction concatener qui utilise plus de paramètres (je crois: la table, le champ de critère, le champ à regrouper) afin de rendre la fonction plus "universelle"

  7. #7
    Membre habitué Avatar de fazpedro
    Homme Profil pro
    Inscrit en
    Août 2009
    Messages
    504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 504
    Points : 128
    Points
    128
    Par défaut
    Merci de ta patience tee_grandbois

    Je viens d'essayer avec tes données mais j'ai toujours le même message en créant la requête SQL :
    Fonction Recupparticipant non définie dans l'expression

  8. #8
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 865
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 865
    Points : 14 989
    Points
    14 989
    Par défaut
    as-tu bien créé la fonction RecupParticipant dans un nouveau module standard, comme je te l'ai indiqué ?

  9. #9
    Membre habitué Avatar de fazpedro
    Homme Profil pro
    Inscrit en
    Août 2009
    Messages
    504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 504
    Points : 128
    Points
    128
    Par défaut
    Désolé tee_grandbois
    Effectivement, je l'avais créé ...mais dans un module VBA existant
    J'ai donc créé un nouveau module "Module1" et là cela fonctionne bien !
    Encore merci

    Pour résumer :

    Module standard :
    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
    Public Function RecupParticipant(Nom As String) As String
    Dim res As DAO.Recordset
    Dim SQL As String
    'Sélectionne les textes du nom passé en paramètre
    SQL = "SELECT Texte1 FROM Matable WHERE Nom='" & Nom & "'"
    Set res = CurrentDb.OpenRecordset(SQL)
    'Concatène les différents enregistrements
    While Not res.EOF
        RecupParticipant = RecupParticipant & res.Fields(0).Value & ";"
        res.MoveNext
    Wend
    'Enlève le dernier caractère ;
    RecupParticipant = Left(RecupParticipant, Len(RecupParticipant) - 1)
     
    'libere la mémoire
    Set res = Nothing
    End Function
    Requête SQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT [Nom], RecupParticipant([Nom]) AS Texte2
    FROM MaTable
    GROUP BY [Nom];
    Résultat :
    Nom Texte2
    Marc Le texte de Marc 1;Le texte de Marc 2
    Pierre Le texte de Pierre 1;Le texte de Pierre 2
    Sophie Le texte de Sophie 1

  10. #10
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 865
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 865
    Points : 14 989
    Points
    14 989
    Par défaut
    bonsoir,
    Effectivement, je l'avais créé ...mais dans un module VBA existant
    normalement, ce n'est pas ça qui est à l'origine de l'erreur, on peut très bien utiliser un module standard déjà existant, sauf si tu as essayé d'utiliser un module VBA existant de classe d'un formulaire ou d'état.

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

Discussions similaires

  1. zone text
    Par aliasss dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 30/06/2005, 10h49
  2. forcer le curseur à ce positionner dans une zone texte
    Par caton dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 08/04/2005, 15h17
  3. Edition zone texte du libelle d'un TREENODE / Evenement Echa
    Par bigbagisbigbag dans le forum C++Builder
    Réponses: 8
    Dernier message: 03/03/2005, 19h25
  4. Affichage Données avec Espace ds Zone Texte
    Par dai.kaioh dans le forum ASP
    Réponses: 2
    Dernier message: 22/02/2005, 17h43
  5. zone texte limitée
    Par virtuadrack dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 28/12/2004, 16h36

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