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

VBA Access Discussion :

[Access 2007] Impression d'états à la chaine à partir d'une zone de liste


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite Avatar de azertix
    Homme Profil pro
    Technicien d'assistance informatique
    Inscrit en
    Juin 2007
    Messages
    961
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien d'assistance informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 961
    Par défaut [Access 2007] Impression d'états à la chaine à partir d'une zone de liste
    Bonjour à tous.
    Alors voilà, j'ai déjà un bouton qui me permet d'imprimer un état individuellement : je sélectionne la ligne dans la zone de liste et je clique sur le petit bouton avec l'imprimante (voir PJ) et mon état s'imprime en mode aperçu.
    Seulement, j'ai environ 300 états à imprimer, donc j'ai pensé qu'il serait judicieux d'imprimer tous les états de la zone de liste d'un coup.
    J'ai donc créé un bouton pour faire cela dont voici le code :
    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
    Private Sub cmdImprimerTout_Click()
        Dim dernLig As Integer
        Dim premLig As Integer
        Dim entCurrLigne As Integer
        Dim selec As Boolean
     
        ' Impression directe de toutes les notes
        ' Si aucune ligne n'est sélectionnée, toutes les notes de la ZdL sont imprimées
        ' Sinon on imprime toutes les notes à partir de la ligne sélectionnée
     
        ' Si aucune ligne n'est sélectionnée, on sélectionne la première ligne
        selec = Me.lstNotes.ItemsSelected.Count > 0
        If selec = False Then
            Me.lstNotes.Selected(0) = True
        End If
     
        dernLig = Me.lstNotes.ListCount - 1
        premLig = Me.lstNotes.ListIndex + 1
     
        ' Sélection de la ligne suivante et impression de l'état correspondant
        For entCurrLigne = premLig To dernLig
            Me.lstNotes.Selected(entCurrLigne) = True
            DoCmd.OpenReport "etaContratsNonTopes"
        Next entCurrLigne
    End Sub
    Le principe est de sélectionner par le code, toutes les lignes de la zdl une par une de la première à la dernière, et d'imprimer à chaque fois l'état correspondant.
    Si une ligne est déjà sélectionnée dans la zdl, on commence l'impression de cette ligne jusqu'à la fin, et si aucune ligne n'est sélectionnée, on imprime tout de la première à la dernière ligne.

    Donc, après débogage, j'ai observé que :
    - Quand aucune ligne n'est sélectionnée, les états s'impriment mais il sont vides d'informations.
    - Quand je sélectionne une ligne, seul l'état correspondant à la ligne sélectionnée s'imprime et en autant d'exemplaires que le nombre d'états qui auraient dû s'imprimer, bien que les lignes défilent correctement.

    Voilà, je crois avoir fait le tour.
    Merci de vos observations et conseils
    Images attachées Images attachées  

  2. #2
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Par défaut
    les états s'impriment mais il sont vides d'informations
    je t'avais répondu deux fois:
    cela dépend du contenu de la requete (voir des évenements) de ton Report.

    d'autant que d'envoyer 300 fois 1 état dans la file d'impression c'est pas très efficace.
    joue sur le filtre de ton report, comme cela tu n'auras plus qu'à faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    docmd.OpenReport "monReport",,,"[IdNotes]>" & premLig
    si ta zdl est ordonées sur <IdNotes>.


  3. #3
    Membre émérite Avatar de azertix
    Homme Profil pro
    Technicien d'assistance informatique
    Inscrit en
    Juin 2007
    Messages
    961
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien d'assistance informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 961
    Par défaut
    Citation Envoyé par vodiem Voir le message
    d'autant que d'envoyer 300 fois 1 état dans la file d'impression c'est pas très efficace.
    joue sur le filtre de ton report, comme cela tu n'auras plus qu'à faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    docmd.OpenReport "monReport",,,"[IdNotes]>" & premLig
    si ta zdl est ordonées sur <IdNotes>.

    Ben normalement, ça ne devrait pas être 300 fois le même puisqu'à chaque occurrence de la boucle la ligne suivante est sélectionnée.
    Or l'impression d'un seul état en le sélectionnant dans la zdl fonctionne
    C'est ça que je ne comprends pas, j'ai raisonné pour imprimer toutes les notes de la zdl comme quand j'imprime un état individuellement, sauf que j'ai fait une boucle For qui parcourt la zdl

  4. #4
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Par défaut
    dis voir tu tiens secret l'ouverture de ton report?

    si individuellement ca marche, comment sait-il quel état doit-il imprimer?
    tu as mis cela dans sa requete ou dans un code?
    tu vas me trouver gateux mais: c'est quoi ta requete ou le code.

    Citation Envoyé par azertix
    ça ne devrait pas être 300 fois le même
    je n'ai pas dis qu'il s'agissait du même.
    quand tu imprimes un document de 300 pages tu vas 300 fois choisir ta page et l'imprimer ou lui dire d'imprimer toutes les pages: c'est pas pareil.
    la file d'impression d'un coté contient un document de 300 pages et de l'autre 300 documents d'une page.

  5. #5
    Membre émérite Avatar de azertix
    Homme Profil pro
    Technicien d'assistance informatique
    Inscrit en
    Juin 2007
    Messages
    961
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien d'assistance informatique

    Informations forums :
    Inscription : Juin 2007
    Messages : 961
    Par défaut
    Citation Envoyé par vodiem Voir le message
    dis voir tu tiens secret l'ouverture de ton report?

    si individuellement ca marche, comment sait-il quel état doit-il imprimer?
    tu as mis cela dans sa requete ou dans un code?
    tu vas me trouver gateux mais: c'est quoi ta requete ou le code.
    Oui, c'est top secret
    Non, sans rire, l'ouverture de l'état est on ne peut plus simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub cmdImprimer_Click()
        ' Ouverture de l'état en mode aperçu
        DoCmd.OpenReport "etaContratsNonTopes", acViewPreview
    End Sub
    Et voilà la requète source de mon état :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT DISTINCT A.NomAgence, A.NumAgence AS N°Agence, V.NomVendeur, N.NumNote AS N°Note, N.DateNote, V.NumVendeur 
    FROM CONTRAT AS C, NOTES AS N, AGENCE AS A, VENDEUR AS V 
    WHERE C.NumNote=N.NumNote And C.NumAgence=A.NumAgence And C.NumVendeur=V.NumVendeur 
    ORDER BY A.NumAgence;

    Citation Envoyé par vodiem Voir le message
    je n'ai pas dis qu'il s'agissait du même.
    quand tu imprimes un document de 300 pages tu vas 300 fois choisir ta page et l'imprimer ou lui dire d'imprimer toutes les pages: c'est pas pareil.
    la file d'impression d'un coté contient un document de 300 pages et de l'autre 300 documents d'une page.
    Ok, je comprends ce que tu veux dire maintenant
    C'est vrai que c'est pas du tout pareil

    Edit : après relecture de ma requête, c'est vrai que je ne dis à aucun moment quelle note imprimer
    Ben je sais pas trop comment il sait laquelle imprimer, mais en tout cas c'est bien la bonne
    En fait, j'ai appliqué ton principe numéro un : quand ça marche, on touche plus

  6. #6
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Par défaut
    et non la source de ton état est la requete "reqEtat":
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT N.NumNote, N.DateNote, C.NumContrat, C.DateEffetContrat, C.NatureContrat, V.NomVendeur, A.NumAgence, A.NomAgence, Cl.NomCli
    FROM NOTES AS N INNER JOIN (CLIENT AS Cl INNER JOIN (AGENCE AS A INNER JOIN (VENDEUR AS V INNER JOIN CONTRAT AS C ON V.NumVendeur=C.NumVendeur) ON A.NumAgence=C.NumAgence) ON Cl.NumCli=C.NumCli) ON N.NumNote=C.NumNote
    WHERE (C.NumVendeur)=[Forms]![frmContratIrregulier]![lstNotes];
    c'est donc ta clause where qui filtre ton état.
    il suffit donc de travailler dessus.
    en fait il y a plusieur possiblité mais si "reqEtat" n'est pas utilisé ailleur: tu retires la partie WHERE et tu fais:
    pour imprimer tous à partir d'un lstNotes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    docmd.OpenReport "monReport",,,"(C.NumVendeur)>=[Forms]![frmContratIrregulier]![lstNotes]"
    sinon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    docmd.OpenReport "monReport",,,"(C.NumVendeur)=[Forms]![frmContratIrregulier]![lstNotes]"

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 26/12/2007, 13h36
  2. Réponses: 2
    Dernier message: 26/01/2007, 15h56
  3. zone de liste à partir d'une zone de liste
    Par ludo50 dans le forum Access
    Réponses: 3
    Dernier message: 22/11/2006, 20h17
  4. Réponses: 5
    Dernier message: 11/08/2006, 22h14
  5. requête à partir d'une zone de liste multiple??
    Par chambon.denis dans le forum Access
    Réponses: 5
    Dernier message: 23/01/2006, 10h46

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