Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > IHM
IHM Ce forum est dédié aux questions relatives à la création de formulaires et d'états, avec ou sans code VBA, et macros.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/12/2011, 09h50   #1
Invité de passage
 
Femme
Administrateur de base de données
Inscription : décembre 2011
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Administrateur de base de données

Informations forums :
Inscription : décembre 2011
Messages : 6
Points : 1
Points : 1
Par défaut Création de formulaire de requête

Bonjour à tous,

J'ai un problème qui va vous paraitre simple mais je débute sur Access 2010 et n'y connais rien en VBA.
Je dois créer un formulaire de requête.
J'ai une table "campagne" qui comprend un champs "size" lui même composé de 8 items (size1, size2,..., size8) et d'autres items qui ne sont et ne doivent plus être utilisés.
Je souhaite que les utilisateurs puisse sélectionner dans le menu déroulant un ou plusieurs items parmi le 8 valides et que le nombre de lignes répondant à ces critères s'affiche dans une textbox.
Pour l'instant, j'arrive uniquement à exécuter et ouvrir une requête à partir de mon formulaire.
Pouvez-vous m'aider ?
Merci
alc1500 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2011, 09h24   #2
Rédacteur/Modérateur
 
Avatar de Jeannot45
 
Homme Jean BALLAT
Inscription : octobre 2004
Messages : 2 856
Détails du profil
Informations personnelles :
Nom : Homme Jean BALLAT
Âge : 63
Localisation : France, Loiret (Centre)

Informations forums :
Inscription : octobre 2004
Messages : 2 856
Points : 5 220
Points : 5 220


Hélas, j'ai pas tout compris.
Difficile d'apporter une aide dans ces conditions.
__________________
Jeannot

Liens Office indispensables à visiter: Cours (Tutos), F.A.Q., [B]Sources VBA

Ne posez pas de questions par MP, je n'ai pas le temps d'y répondre
Jeannot45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2011, 10h24   #3
Invité de passage
 
Femme
Administrateur de base de données
Inscription : décembre 2011
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Administrateur de base de données

Informations forums :
Inscription : décembre 2011
Messages : 6
Points : 1
Points : 1
form.png
Exbase.xlsx

Bonjour et merci d'avoir pris le temps de me lire.

En fait, je dois créer un formulaire pour que les commerciaux de ma société puissent faire des comptages.

Avec des exemples peut être que j'arriverai à être plus claire.
Je n'arrive pas à insérer mes copies d'écran dans mon message je vous les ai donc mis en pièces jointes.

Dans mon formulaire, j'ai une zone de liste à sélection multiple nommée "CompanySize".
Les items qui y figurent proviennent du champs "CompanySize" de ma base.
En fait, je veux que dans la text box nommée "résultat de votre recherche", s'affiche le nombre de lignes correspondant à "Size1" quand l'utilisateur à sélectionné "Size1" dans la zone de liste (dans ce cas, la réponse sera 3 car il y a 3 entreprises de "Size1" dans ma base source).
Si l'utilisateur choisit "Size1"+"Size3" alors le résultat sera 4 dans la text box.

J'espère que vous aurez la gentillesse de vous pencher à nouveau su mon problème.

Merci d'avance
alc1500 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2011, 09h30   #4
Rédacteur/Modérateur
 
Avatar de Jeannot45
 
Homme Jean BALLAT
Inscription : octobre 2004
Messages : 2 856
Détails du profil
Informations personnelles :
Nom : Homme Jean BALLAT
Âge : 63
Localisation : France, Loiret (Centre)

Informations forums :
Inscription : octobre 2004
Messages : 2 856
Points : 5 220
Points : 5 220


Le problème est assez complexe. Tu devras, après avoir sélectionné les tailles, extraire les lignes de la table répondant aux tailles sélectionnées et les compter.

Une procédure VBA est indispensable.

Je te joins un petite base exemple et le détail ci-dessous de la procédure affectée à l'évènement sur click du bouton OK dans le formulaire.

Code VBA :
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
27
28
29
30
31
32
Private Sub btnComptage_Click()
    ' Déclarations des variables locales
    Dim l_strItem As String, l_strSql As String
    Dim l_intNbItem As Integer, l_intCompteur As Integer
    Dim l_rsCompagny As DAO.Recordset
 
    ' Compte le nombre de lignes dans la liste
    l_intNbItem = Me.lstSize.ListCount
 
    ' Traitement de la liste
    For l_intCompteur = 0 To l_intNbItem
        If Me.lstSize.Selected(l_intCompteur) = True Then
            ' Création de la syntaxe de sélection des valeurs à compter
            l_strItem = l_strItem & ", '" & Me.lstSize.Column(0, l_intCompteur) & "'"
            ' Désélection de la ligne en cours
            Me.lstSize.Selected(l_intCompteur) = False
        End If
    Next
 
    ' Récupération de la chaine pour le calcul
    l_strItem = Right(l_strItem, Len(l_strItem) - 2)
    ' Création de la requete sélectionnant les lignes concernées
    l_strSql = "SELECT Compagny.CompagnySize, Compagny.CompagnySize FROM Compagny WHERE Compagny.CompagnySize In (" & l_strItem & ")"
    Set l_rsCompagny = CurrentDb.OpenRecordset(l_strSql)
 
    ' Comptage des lignes concernées
    With l_rsCompagny
        .MoveLast
        Me.txtNbCompagny = .RecordCount
        .MoveFirst
    End With
End Sub

Bon courage et bonne fin d'année
Fichiers attachés
Type de fichier : rar Size.rar (24,3 Ko, 7 affichages)
__________________
Jeannot

Liens Office indispensables à visiter: Cours (Tutos), F.A.Q., [B]Sources VBA

Ne posez pas de questions par MP, je n'ai pas le temps d'y répondre
Jeannot45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2011, 09h35   #5
Invité de passage
 
Femme
Administrateur de base de données
Inscription : décembre 2011
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Administrateur de base de données

Informations forums :
Inscription : décembre 2011
Messages : 6
Points : 1
Points : 1
Par défaut Merci !

En effet, J'aurais eu du mal à trouver ça toute seule !
Je vous remercie d'avoir pris le temps de rédiger ce code pour moi.
alc1500 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2011, 11h34   #6
Invité de passage
 
Femme
Administrateur de base de données
Inscription : décembre 2011
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Administrateur de base de données

Informations forums :
Inscription : décembre 2011
Messages : 6
Points : 1
Points : 1
Par défaut Re

Re-Bonjour,
Je vais réparer de suite. Je n'avais pas cliqué sur résolu parce que je n'arrive pas à faire fonctionner votre code.
Je pense que cela provient du fait que access est pour moi une interface utilisateurs et que ma BDD est sur un autre serveur sql. Est-ce possible selon vous ?
alc1500 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2011, 15h47   #7
Rédacteur/Modérateur
 
Avatar de Jeannot45
 
Homme Jean BALLAT
Inscription : octobre 2004
Messages : 2 856
Détails du profil
Informations personnelles :
Nom : Homme Jean BALLAT
Âge : 63
Localisation : France, Loiret (Centre)

Informations forums :
Inscription : octobre 2004
Messages : 2 856
Points : 5 220
Points : 5 220


Il te faut activer le code.
Tu ouvres Access puis dans l’onglet Fichier tu choisis :
a. « options »
b. Puis « Centre de gestion de la confidentialité »
c. Puis cliques sur le bouton « Paramètres du centre de gestion de la confidentialité »
d. Tu choisis alors « Emplacements approuvés »
e. Dans le bas de la fenêtre, tu cliques sur « Ajouter un emplacement »
f. Tu utilises alors le bouton « Parcourir » pour aller rechercher un dossier que tu auras créé et dans lequel se trouve la base que je t'ai envoyée.
g. Tu actives également l’option : « les sous-dossiers de cet emplacement sont également approuvés »

Lorsque tu ouvriras la base, le code devriendra actif
__________________
Jeannot

Liens Office indispensables à visiter: Cours (Tutos), F.A.Q., [B]Sources VBA

Ne posez pas de questions par MP, je n'ai pas le temps d'y répondre
Jeannot45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2012, 12h08   #8
Invité de passage
 
Femme
Administrateur de base de données
Inscription : décembre 2011
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Administrateur de base de données

Informations forums :
Inscription : décembre 2011
Messages : 6
Points : 1
Points : 1
Par défaut Merci

Bonjour et bonne année 2012 !

Je n'ai pas eu de problème avec ta base test ou ton code. Cela fonctionne très bien aussi chez moi.
Le souci arrive quand je transpose le code en interrogeant ma base de données qui se trouve sur un serveur.

Je n'ai modifié que les noms de tes champs et table que j'ai remplacé par les miens.

Pour moi,
La table "Compagny" = ***baseT-ALL EMAILS for PARTNERS campaigns***
Le champs CompagnySize = CompanySize
lstSize reste lstSize.

Voici ce que donne mon code

Code VBA :
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
27
28
29
30
31
32
33
34
Private Sub btnComptage_Click()
 ' Déclarations des variables locales
    Dim l_strItem As String, l_strSql As String
    Dim l_intNbItem As Integer, l_intCompteur As Integer
    Dim l_rs[***baseT-ALL EMAILS for PARTNERS campaigns***] As DAO.Recordset
 
    Me.txtNbCompany = ""
 
    ' Compte le nombre de lignes dans la liste
    l_intNbItem = Me.lstSize.ListCount
 
    ' Traitement de la liste
    For l_intCompteur = 0 To l_intNbItem
        If Me.lstSize.Selected(l_intCompteur) = True Then
            ' Création de la syntaxe de sélection des valeurs à compter
            l_strItem = l_strItem & ", '" & Me.lstSize.Column(0, l_intCompteur) & "'"
            ' Désélecion ne la ligne en cours
            Me.lstSize.Selected(l_intCompteur) = False
        End If
    Next
 
    ' Récupération de la chaine pour le calcul
    l_strItem = Right(l_strItem, Len(l_strItem) - 2)
    ' Création de la requete sélectionnant les lignes concernées
    l_strSql = "SELECT[***baseT-ALL EMAILS for PARTNERS campaigns***].CompanySize, [***baseT-ALL EMAILS for PARTNERS campaigns***].CompanySize FROM [***baseT-ALL EMAILS for PARTNERS campaigns***] WHERE [***baseT-ALL EMAILS for PARTNERS campaigns***].CompanySize In (" & l_strItem & ")"
    Set l_rs[***baseT-ALL EMAILS for PARTNERS campaigns***] = CurrentDb.OpenRecordset(l_strSql)
 
    ' Comptage des lignes concernées
    With l_rs[***baseT-ALL EMAILS for PARTNERS campaigns***]
        .MoveLast
        Me.txtNbCompany = .RecordCount
        .MoveFirst
    End With
End Sub

Lorsque je lance ma demande depuis le formulaire, VBA m'affiche "erreur de compilation : attendu : Expression" et me surligne la ligne 1 (Private Sub btnComptage_Click()) et la première étoile du nom de ma table en bleu...
J'ai essayer de remplacer les crochets par des parenthèses et là j'ai "erreur de compilation : Attendu: =". J'ai essayé de les enlever et j'ai le message "erreur de compilation : Attendu: fin d'instruction" ....

Je me demande s'il n'a pas dû mal à digérer les étoiles avant le nom de ma table.
alc1500 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2012, 07h47   #9
Rédacteur/Modérateur
 
Avatar de Jeannot45
 
Homme Jean BALLAT
Inscription : octobre 2004
Messages : 2 856
Détails du profil
Informations personnelles :
Nom : Homme Jean BALLAT
Âge : 63
Localisation : France, Loiret (Centre)

Informations forums :
Inscription : octobre 2004
Messages : 2 856
Points : 5 220
Points : 5 220


Je pense qu'il faut que tu revois le nom de ta variable. En effet, un nom doit être évocateur de ce qu'il représente sans pour autant être trop compliqué.
Il est souvent composé de 3 parties :

sa portée : locale (l_), module (m_), publique (p_)
son type : string (str), integer (int), long (lng), ...
un nom évocateur de l'objet

exemples :
l_strSql représente une variable locale de type chaine de caractères qui représente la syntaxe de la requête.
l_rsCompagny représente u ne varaible locale de type RecordSet et qui contient le résultat de la requete (C'est vrai que le nom de ma table est Compagny - nettement plus simple que le nom de ta table )

Je pense qu'en reprenant un nom plus simple tu devrais avoir le bon résultat.
Par contre ne perd jamais de vue la construction du nom de tes variables. Toujours utile quand tu relis un ancien développement.

Merci pour tes voeux, bonne année à toi et bon développement
__________________
Jeannot

Liens Office indispensables à visiter: Cours (Tutos), F.A.Q., [B]Sources VBA

Ne posez pas de questions par MP, je n'ai pas le temps d'y répondre
Jeannot45 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2012, 09h36   #10
Invité de passage
 
Femme
Administrateur de base de données
Inscription : décembre 2011
Messages : 6
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Administrateur de base de données

Informations forums :
Inscription : décembre 2011
Messages : 6
Points : 1
Points : 1
Bonjour,

J'ai suivi tes conseils et trouvé une solution !
Concernant le nom de ma table, elle est plus vieille que moi et je n'ai pas les droits pour le changer.

Encore merci pour ton aide précieuse !
alc1500 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h06.


 
 
 
 
Partenaires

Hébergement Web