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 :

etat et analyse croisé


Sujet :

Access

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2005
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 22
    Points : 19
    Points
    19
    Par défaut etat et analyse croisé
    Bonjour a tous,

    Je voudrais savoir si il etait possible de faire un etat depuis une requette analyse croisé ?

    ....ou si il y'a une solution a mon problème je suis prenneur pour toute idee ..........merci d'avance

    J'explique mon cas (surement un cas d'ecole kel ....bref ) :

    J'ai cree une requette qui me liste les produits de ma facture comme ceci :


    RefCateg | N° commande| NomMatière|Quantité| NomTaille|NomCouleur
    PROD1| 124| Coton / Voile de Coton Uni| 50| 36| Beige|
    PROD1| 124| Coton / Voile de Coton Uni| 100| 38| Beige|
    PROD1| 124| Coton / Voile de Coton Uni| 60| 40| Choco|
    PROD1| 124| Coton / Voile de Coton Uni| 200| 38| Ivoire|
    PROD2| 124| Coton / Voile de Coton Uni| 200| 36| Bleu|



    puis j'ai une autre requette base sur celle de dessus qui me fait l'analyse croisee sous la forme :


    NomCouleur|Total de Quantité|36|38|40|
    Beige|150|50|100|0|
    Bleu|200|200|0|0|
    Choco|60|0|0|60|
    Ivoire|200|0|200|0|

    ce qui me donne entière satisfaction - pourtant je n'arrive pas a faire un sous-etat à partir de cette requette

    qq'un(e) peut me conseiller et me donner un coup de main pour realiser cet etat ?

    merci d'avance

    polon

  2. #2
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Hello,

    quelle est ta difficulté ? En quoi créer un état à partir d'une requete d'analyse croisée diffère d'une autre création d'état ?

    tu parles d'état, puis de sous-état ?
    Ne mettez pas "Problème" dans vos titres, par définition derrière toute question se cache un problème
    12 tutoriels Access



  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2005
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 22
    Points : 19
    Points
    19
    Par défaut
    Bonjour,

    j'essaie de reexpliquer mon pb:

    Le premier listing que la requette me donne est ok(voir l'exemple plus bas)
    Le deuxième est ok aussi : je fait l'analyse croisee sur la première requette pour une RefCateg

    Le problème est que je n'arrive pas a faire l'etat qui me sorte pour chaque RefCateg le sous-etat avec l'analyse comme ceci :

    Ex :

    Requette qui me liste les produits de ma facture :

    RefCateg | N° commande| NomMatière|Quantité| NomTaille|NomCouleur
    PROD1| 124| Coton / Voile de Coton Uni| 50| 36| Beige|
    PROD1| 124| Coton / Voile de Coton Uni| 100| 38| Beige|
    PROD1| 124| Coton / Voile de Coton Uni| 60| 40| Choco|
    PROD1| 124| Coton / Voile de Coton Uni| 200| 38| Ivoire|
    PROD2| 124| Coton / Voile de Coton Uni| 200| 36| Bleu|

    Requette base sur la requette listé plus haut qui me fait l'analyse croisee (que pour RefCateg = PROD1):

    NomCouleur|Total de Quantité|36|38|40|
    Beige|150|50|100|0|
    Bleu|200|200|0|0|
    Choco|60|0|0|60|
    Ivoire|200|0|200|0|


    Je voudrais avoir mon etat sous cette forme

    Pour RefCateg = PROD1 le sous etat doit etre :

    NomCouleur|Total de Quantité|36|38|40|
    Beige|150|50|100|0|
    Bleu|200|200|0|0|
    Choco|60|0|0|60|
    Ivoire|200|0|200|0|

    RefCateg = PROD2 le sous etat doit etre :

    NomCouleur|Total de Quantité|36|38|40|
    Bleu|200|200|0|0|

    Voila a quoi je voudrais qu'il ressemble mon etat

    Desole pour mon francais - j'ai du mal a me faire comprendre par ecrit .

    merci pour votre aide

    Polon

    PS : j'ai mis volontairement en gras PROD2 pour mieux comprendre

  4. #4
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    Salut
    y a une solution.. elle existe dans une base exemple livrée avec access qui se trouve dans Office\exemples\solution.mdb l'état se nomme "Ventes des employés".
    si tu as besoin d'explications....

  5. #5
    Membre à l'essai
    Inscrit en
    Mai 2005
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 22
    Points : 19
    Points
    19
    Par défaut
    - moi je l'ai pas - as tu une idee d'ou je peut la trouver ?

    merci

    -----------------

    oups je l'ai - comtoir.mdb merci

    ----------------

    Entete de groupe / Pied de groupe - c'est ca la solution ? - je vais regarder ca mais si qq'un peut me donner une p'tite explication ou un lien ou on traite de En-tete et Pied de groupe ?

    merci d'avance

  6. #6
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    je ne sais pas si dans comptoir l'exemple que je t'ai cité s'y trouve....

    Edit : version Access97

    Procédure :
    Construire l'état avec :
    Dans l'entête de page : les champs nommés Entête1, Entête2 etc... (vont servir d'entête de colonnes)
    Dans le détail : les champs nommés Nombre1, Nombre2 etc... (Nombre1 va servir d'entête de ligne, Nombre2 et suivants vont recevoir les valeurs)
    Dans le pied d'état : les champs Total1 (avec valeur : Total (c'est l'étiquette en fait), Total2, Total3.... vont effectuer la somme des champs Nombre correspondant

    Tous ces champs sont donc indépendants et te permettront d'avoir des colonnes et des lignes créées dynamiquement en focntion du résultat de ta requête.

    Sinon voici le code à placer dans l'état :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ' ***** déclaration des variables ***** ' 
    Const Nombre_colonnes = 10 ' pour 10 étiquettes sur l'état maximum & _ 
        on peut en afficher plus et donc modifier cette variable 
    Dim Base As Database 
    Dim Enregistrement As Recordset 
    Dim NbColonnes As Integer 
    Dim Total_colonnes(1 To Nombre_colonnes) As Long 
    Dim Total_état As Long
    Détail : Au formatage
    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
    Private Sub Détail_Format(Cancel As Integer, FormatCount As Integer) 
     
        Dim entX As Integer 
     
        If Not Enregistrement.EOF Then 
            If Me.FormatCount = 1 Then 
                For entX = 1 To NbColonnes 
                    Me("Nombre" + Format(entX)) = xtabCnulls(Enregistrement(entX - 1)) 
                Next entX 
     
                For entX = NbColonnes + 2 To Nombre_colonnes 
                    Me("Nombre" + Format(entX)).Visible = False 
                Next entX 
     
                Enregistrement.MoveNext 
            End If 
        End If 
     
    End Sub
    Détail : sur impression
    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
    Private Sub Détail_Print(Cancel As Integer, PrintCount As Integer) 
     
        Dim entX As Integer 
        Dim Nblignes As Long 
     
        If Me.PrintCount = 1 Then 
            Nblignes = 0 
     
            For entX = 2 To NbColonnes 
                Nblignes = Nblignes + Me("Nombre" + Format(entX)) 
                Total_colonnes(entX) = Total_colonnes(entX) + Me("Nombre" + Format(entX)) 
            Next entX 
     
            Me("Nombre" + Format(NbColonnes + 1)) = Nblignes 
            Total_état = Total_état + Nblignes 
        End If 
     
    End Sub

    Détail : au reformatage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Détail_Retreat() 
     
        Enregistrement.MovePrevious 
     
    End Sub
    Entête état : Au formatage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub EntêteÉtat_Format(Annuler As Integer, FormatCount As Integer) 
     
        Enregistrement.MoveFirst 
        Initvar 
     
    End Sub
    Entête de page : au formatage
    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
    Private Sub EntêtePage_Format(Annuler As Integer, FormatCount As Integer) 
     
        Dim entX As Integer 
     
        ' Met les entêtes de colonnes 
        ' dans des zones de texte dans la section Entête. 
        For entX = 1 To NbColonnes 
            Me("Entête" + Format(entX)) = Enregistrement(entX - 1).Name 
        Next entX 
     
        ' Crée l'entête Totaux de la prochaine zone de liste disponible. 
        Me("Entête" + Format(NbColonnes + 1)) = "Totaux" 
     
        ' Cache les zones de texte inutilisées dans la section Entête. 
        For entX = (NbColonnes + 2) To Nombre_colonnes 
            Me("Entête" + Format(entX)).Visible = False 
        Next entX 
     
    End Sub
    Pied d'état : au formatage
    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
    Private Sub PiedÉtat_Format(Annuler As Integer, NBimpression As Integer) 
     
        Dim entX As Integer 
     
        For entX = 2 To NbColonnes 
            Me("Total" + Format(entX)) = Total_colonnes(entX) 
        Next entX 
     
        ' Place TotalEtat dans une boite de texte dans le pied d'état. 
        Me("Total" + Format(NbColonnes + 1)) = Total_état 
     
        ' Cache les zones de texte inutilisées dans le pied d'état. 
        For entX = (NbColonnes + 2) To Nombre_colonnes 
            Me("Total" + Format(entX)).Visible = False 
        Next entX 
     
    End Sub
    Etat : sur fermeture
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Report_Close() 
     
        Enregistrement.Close 
     
    End Sub

    Etat : sur aucune données
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Report_NoData(Annuler As Integer) 
     
        MsgBox "Aucun enregistrement n'a été trouvé.", vbExclamation, "Oh la boulette !!!" 
        Enregistrement.Close 
        Annuler = True 
     
    End Sub
    Etat : sur ouverture
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Report_Open(Annuler As Integer) 
     
        Dim Requête As QueryDef 
     
        Set Base = CurrentDb 
        Set Requête = Base.QueryDefs("NomRequeteAnalyseCroisée") 
        Set Enregistrement = Requête.OpenRecordset() 
     
        'Définit le nombre de colonnes de la requête 
        NbColonnes = Requête.Fields.Count 
     
    End Sub

    Codes à placer dans l'état :
    Sub Initvar
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub Initvar() 
     
        Dim entX As Integer 
        Total_état = 0 
     
        For entX = 1 To NbColonnes 
            Total_colonnes(entX) = 0 
        Next entX 
     
    End Sub
    Fonction xtabCnulls
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Function xtabCnulls(varX As Variant) 
     
        If IsNull(varX) Then 
            xtabCnulls = 0 
            Else 
            xtabCnulls = varX 
        End If 
     
    End Function
    PS : j'ai demandé à Demco si ça pouvait apparaitre dans la FAQ.

  7. #7
    Membre à l'essai
    Inscrit en
    Mai 2005
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 22
    Points : 19
    Points
    19
    Par défaut
    merci - je vais m'y mettre pour voir si j'ai compris qq chose

    je vous tiens au courant

    @+ Polon

  8. #8
    Nouveau membre du Club
    Inscrit en
    Avril 2003
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 80
    Points : 35
    Points
    35
    Par défaut
    J'ai réalisé cette procédure sous ACCESS 2002, ca fonctionne parfaitement. Le seul truc à modifier par rapport à ACCESS 97, c le nom de la procédure EntêtePage_Format à remplacer par ZoneEntêtePage_Format.
    Et ne pas oublier de mettre la requête en source de l'état.
    Cette procédure devrait apparaitre dans la FAQ, c pas compliqué à mettre en place et très efficace.

    Merci Kikof
    L'intelligence, c'est quand on sait qu'on ne sait pas

  9. #9
    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
    un pivot into aurait été plus simple
    Elle est pas belle la vie ?

  10. #10
    Nouveau membre du Club
    Inscrit en
    Avril 2003
    Messages
    80
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 80
    Points : 35
    Points
    35
    Par défaut
    Comment tu fais un pivot into?
    L'intelligence, c'est quand on sait qu'on ne sait pas

  11. #11
    Membre du Club
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    56
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 56
    Points : 51
    Points
    51
    Par défaut
    Salut,

    Je me permet de "déterrer" ce topic.
    J'ai le même problème (et je suis loin d'être le seul à ce que j'ai pu voir)
    sauf que je n'arrive pas à comprendre la solution de Kikof.
    Je pensais m'en sortir avec l'exemple livré avec Access...

    Je n'ai malheureusement pas l'état "ventes des employés" dans ma base Comptoirs.
    A-t-il été renommé ?
    Y-a-t-il un autre état contruit à partir d'une requête analyse croisée ?

    Merci d'avance

  12. #12
    Expert éminent
    Avatar de Lou Pitchoun
    Profil pro
    Inscrit en
    Février 2005
    Messages
    5 038
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Février 2005
    Messages : 5 038
    Points : 8 268
    Points
    8 268
    Par défaut
    Citation Envoyé par Armagnak
    Salut,
    Je n'ai malheureusement pas l'état "ventes des employés" dans ma base Comptoirs.
    A-t-il été renommé ?
    Y-a-t-il un autre état contruit à partir d'une requête analyse croisée ?

    Merci d'avance
    Salut,
    Cet exemple se trouve dans la base Solutions.mdb !!!!

    En "théorie", tu copies-colles le code dans l'état que tu crées. Tu changes le nom de la requete dans "Private Sub Report_Open(Annuler As Integer)" et comme ça a été dit, pour les versions supérieures, il faut remplacer EntêtePage_Format par ZoneEntêtePage_Format.

Discussions similaires

  1. [AC-2003] Erreur etat analyse croisé
    Par popofpopof dans le forum IHM
    Réponses: 2
    Dernier message: 04/09/2011, 19h46
  2. Operation avec champs analyse croisé
    Par omacama dans le forum Access
    Réponses: 35
    Dernier message: 12/02/2007, 14h37
  3. Requete Analyse croisé
    Par Yves2507 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 07/09/2006, 09h33
  4. Pb Etat / Requete analyse croisée
    Par oceanediana dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 21/07/2006, 09h34
  5. Réponses: 1
    Dernier message: 22/12/2005, 09h39

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