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

Deski Discussion :

Automatiser une requete en fonction d'une invite


Sujet :

Deski

  1. #1
    Membre éprouvé
    Avatar de yoyo3d
    Homme Profil pro
    Administratif
    Inscrit en
    Avril 2002
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Administratif
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2002
    Messages : 413
    Points : 1 254
    Points
    1 254
    Par défaut Automatiser une requete en fonction d'une invite
    Bonjour, je me debrouille un peu en VBA, mais je débute avec BO.

    j'ai réalisé une requete qui me donne le nombre de planning pour 1 centre.
    Lors de l'éxécution, je demande à l'utilisateur d'indiquer le centre concerné par le biais d'un invite. (j'aurais pu demander tous les centres d'un seul coup, mais j'ai 70 centres, et chaque centre me donne environ 800 000 lignes....)

    je voudrais lancer la requete, et pour chaque centre , enregistrer le résultat au format .txt

    1) comment je peux , avec visual basic, demander l'exécution d'une requete, 2) et lui préciser le nom de la variable en critere.

    merci de vos réponses...

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 772
    Points : 319
    Points
    319
    Par défaut
    salut

    pour affecter une variable à une ou plusieur invites voici le code

    tu crées un fichier texte dans laquelle ta macro va pointer les valeurs d'invite

    cet exemple te permet de filtrer sur le mois en cours
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ThisDocument.Variables(1).Value = Format(DateSerial(Year(Date - 1), Month(Date - 1), 1), "dd/mm/yyyy")
    ThisDocument.Variables(2).Value = Format(Date - 1, "dd/mm/yyyy") & " 23:59:59"


    pour boucler sur l'intégralité des centres issus de ta base
    il faut lui ajouter
    ce code va prendre chaque valeur unique du champ que tu veux pour ne sortir que le rapport filtré
    cela implique de ne mettre aucune valeur dans les conditions
    tu ramasses toute la base et tu filtres par macro
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Dim V1 As String, V2 As DocumentVariable
    Set V1 = ThisDocument.DocumentVariables("tavariableafiltrer")
    For i = 1 To UBound(V2.Values(boUniqueValues))
                        V1 = V2.Values(boUniqueValues)(i)
                            'pose du filtre sur chaque rapport
                                For Each Rep In Reps
                                    Rep.Activate                                  Rep.AddComplexFilter "tavariableafiltrer", "=<tavariableafiltrer>=""" & strGroupeurVals & """"
                                    'recalcul de l'ensemble du document
                                    Rep.ForceCompute
    Next
    puis en fin de traitement (ce code te permet de défiltrer tous les onglets du rapport

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    For Each Rep In Reps
                    Rep.Activate
                    Rep.AddComplexFilter "Tirage Aggrege Groupeur Flag", "= (0 = 0)"
                    Rep.ForceCompute
                Next
    en espérant t'avoir donné un piste...

    munity

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 772
    Points : 319
    Points
    319
    Par défaut
    ci joint un fil sur lequel j'expliquai l'intégralité du traitement par macro et invite
    http://www.developpez.net/forums/d11...nts-pdf-vides/

  4. #4
    Membre éprouvé
    Avatar de yoyo3d
    Homme Profil pro
    Administratif
    Inscrit en
    Avril 2002
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Administratif
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2002
    Messages : 413
    Points : 1 254
    Points
    1 254
    Par défaut
    ok, merci bien pour la réponse.
    je vais tester tout ça.

  5. #5
    Membre éprouvé
    Avatar de yoyo3d
    Homme Profil pro
    Administratif
    Inscrit en
    Avril 2002
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Administratif
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2002
    Messages : 413
    Points : 1 254
    Points
    1 254
    Par défaut
    Salut, je ne sais pas si je me suis bien exprimé,

    je pensais creer un tableau de string contenant la liste des noms de centre,

    et, boucler l'exécution de ma requete Bo sur cette liste de centres...
    genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim nomcentre as string
    nomcentre = array("la rochelle", "rochefort","etc"...)
     
    for i=1 to nombredecentre
          executerequete."xxx.rep"(nomcentre) 'ou nomcentre repond à l'invite
          enregistreresultat(nomcentre.txt)  
    next
    bon
    c'est schématisé "a mort" mais je ne sais pas comment demander l'éxécution de la requete xxx.rep en VB c'etait surtout ça dont j'avais besoin.

    (un peu comme demander l'execution d'une procedure en VBA pour excel...)

    je ne sais d'ailleurs pas si c'est vraiment possible...

    merci pour ta réponse, et encore désolé pour l'imprécision de ma question...

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 772
    Points : 319
    Points
    319
    Par défaut
    salut

    si j'ai bien compris tu souhaites avoir avec un rapport BO x fichiers (foncion du nombre de centre) ?
    1 Création d'un fichier .bat qui lance ton application BO
    2 macro qui se lance à l'ouverture de BO
    le traitement consiste à faire tourner la requête autant de fois que de centre existants
    le traitement par macro te raffraichi la requête par centre puis exporte le fichier au format texte à l'endroit désiré
    3 création d'un tache planifiée qui pointe sur le .bat et qui lancera l'intégralité du traitement

    est ce bien cela ?

    si oui
    il te suffit de créer un fichier .bat
    puis de créer un fichier .txt ou .var dans le quel tu mets tous les centres
    (tu peux meme faire en sorte que ce fichier se mette à jour en auto en créant un rapport avec uniquement ta liste de centre qui se génére à un endroit bien précis de ton serveur ou répertoire)
    de cette facon tu es sur d'avoir à dispo une liste compléte des centres existants

    de créer une invite dans la rêquête que la macro initialisera grace à ton fichier .txt ou .var
    développez la macro qui va mettre à jour le rapport

    je peux t'envoyer une solution que j'utilise et qui fonctionne plutot bien

    munity

  7. #7
    Membre éprouvé
    Avatar de yoyo3d
    Homme Profil pro
    Administratif
    Inscrit en
    Avril 2002
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Administratif
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2002
    Messages : 413
    Points : 1 254
    Points
    1 254
    Par défaut
    Salut, oui grosso modo, c'est cela que je cherche.
    1) pour le fichier .bat , je ne connaissais pas cette méthode, je pensais que la macro pouvais directement avoir la liste des centre en "dur" dans le code avec un array , mais si tu pense qu'avec un .bat c'est mieux... ok ça me permetra de voir comment tu fais.

    2) la macro qui se lance à l'ouverture, c'est mieux car , ce n'est pas forcement moi qui utilisera la macro ... et donc pour les autres utilisateurs potentiels, moins y a de manip, mieux c'est...

    pour la mise à jour du fichier.bat, cela ne sera pas forcement nécéssaire, la liste des centres correspond aux casernes du département, et on en construit pas tous les jours...

    3) pour la tache planifié, je n'y avais pas pensé, je veux bien des explications...

    merci pour tes explications, j'attends la suite avec impatience...

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 772
    Points : 319
    Points
    319
    Par défaut
    salut

    voici donc la manière dont j'automatise mes reports (uniquement en BO lourd => deski) car webi on peut pas faire de macro....

    etape 1
    création d'un fichier texte (.var)
    pas d'entete de colonne
    centre 1
    centre 2
    centre 3
    attention il faut que les centres soient correctement orthographiés sinon 'la requête ne retourne aucune données' et donc fichier vide
    etape 2
    créer le rapport avec invite sur le nom du centre
    etape 3
    créer la macro ci dessous
    attention ne pas oublier de cocher la case dans les références
    'microsoft scripting runtime'

    'MACRO PRINCIPALE
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
     
    Sub centre()
    On Error GoTo Err_Sub
     
    Dim Fichier
    Dim MesParametres(1) As String
    Dim destPath, racinePath, sParamFile, sDestFile, SFormat As String
    Dim reps As Reports, rep As Report
    Dim nbr As Integer, nir As Integer
    Dim fs, mesVariables, Counter, MaVariable, Interactive, SdestFil
     
    Set ActDoc = ThisDocument
    Set fs = CreateObject("Scripting.FileSystemObject")
     
    racinePath = "tonrépertoire"
    racineParam = ActiveDocument.Path & "\"
    sParamFile = "LISTE_CENTRE.var" 'créer un fichier texte et le renommer l'extension par .var versus .txt
     
     
    'Paramétrage
        dtefic = Format(CDate(Date), "yyyymmdd")
     
     
            ActDoc.Activate
     
    'ouverture et lectiure fichier de param
        Set Fichier = CreateObject("Scripting.FileSystemObject")
        Set FichierParam = Fichier.OpenTextFile(racineParam & sParamFile, ForReading)
        While FichierParam.AtEndOfStream <> True
        Fichierligne = FichierParam.ReadLine
            If Trim(Fichierligne) <> "" Then
                ' lecture des paramètrres du fichier
                    lesParametres = Split(Fichierligne, ";")
                    MesParametres(0) = lesParametres(0)
     
            End If
        'Lecture des paramètrres du fichier
                'Affectation des paramètres au rapport
                Set AppBO = Application
                Set mesVariables = AppBO.ActiveDocument.Variables
                Counter = 0
                For Each MaVariable In mesVariables
                    MaVariable.Value = MesParametres(Counter) ' Counter représente le champ et Counter+1 représente la valeur
                    Counter = Counter + 1 ' Incrémente le compteur.
                Next
     
        'Rafraîchissement du rapport
            Application.Interactive = False
                ActDoc.Refresh
                nblignes = Application.ActiveDocument.DataProviders.Item(1).NbRowsFetched
            Application.Interactive = True
     
        'Test nombre de lignes retourné par requête ne génére pas de fichier si pas de données
     
        If nblignes > 0  Then
                If fs.folderexists(racinePath & Format(dDateDeb, "yyyy") & "\") = False Then
                    fs.createfolder (racinePath & Format(dDateDeb, "yyyy") & "\")
                End If
                      destPath = racinePath & Format(dDateDeb, "yyyy") & "\"
     
                If fs.folderexists(destPath & Format(dDateDeb, "mmmm") & "\") = False Then
                    fs.createfolder (destPath & Format(dDateDeb, "mmmm") & "\")
                End If
                      destPath = destPath & Format(dDateDeb, "mmmm") & "\"
     
                        sNomFichier = ActiveDocument.Name & "_" & dtefic & "_" & lesParametres(0) &  ".txt"
                        FileName = destPath & sNomFichier
                        ActDoc.SaveAs FileName, 1
     
       End If    
     
    Wend
     
    'Fermeture fichier et application
    fin:
        Application.Interactive = False
        'Application.Interactive = True
        Application.Quit
    Err_Sub:
        Interactive = True
    Err_Mkdir:
        Resume Next
    End Sub
    'MACRO SECONDAIRE LECTURE DU FICHIER .VAR
    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 Split(ByVal sString As String, sDelimiter As String, Optional iCompare As Long = vbBinaryCompare) As Variant
        Dim sArray() As String, iArrayUpper As Integer _
            , iPosition As Integer
        iArrayUpper = 0
        iPosition = InStr(1, sString, sDelimiter, iCompare)
        Do While iPosition > 0
            ReDim Preserve sArray(iArrayUpper)
            sArray(iArrayUpper) = Left$(sString, iPosition - 1)
            sString = Right$(sString, Len(sString) - iPosition)
            iPosition = InStr(1, sString, sDelimiter, iCompare)
            iArrayUpper = iArrayUpper + 1
        Loop
        ReDim Preserve sArray(iArrayUpper)
        sArray(iArrayUpper) = sString
        Split = sArray
    End Function
    'LANCEMENT A L'OUVERTURE
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub Document_Open()
        centre
    End Sub
    le code sera peut être à retravrailler pour tes besoin
    j'ai essayé de le rendre le plus générique possible mais bon...
    je te laisse développer cette macro avant la suite pour le BAT et la tache planifiée

    attention lors du test car le fichier se ferme en fin de macro alors si tu n'as pas enregisté tes modifs ben t'as plus qu'à recommencer
    pour éviter change la fin en ajoutant un ' devant l'instruction application.quit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    fin:
        'Application.Interactive = False 
        Application.Interactive = True
        'Application.Quit
    Err_Sub:
        Interactive = True
    Err_Mkdir:
        Resume Next
    End Sub
    hésite pas.. si besoin

    munity

  9. #9
    Membre éprouvé
    Avatar de yoyo3d
    Homme Profil pro
    Administratif
    Inscrit en
    Avril 2002
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Administratif
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2002
    Messages : 413
    Points : 1 254
    Points
    1 254
    Par défaut
    Salut,

    pour simplifier le bisness, je vais plutot prendre le "code centre" plutôt que le nom, cela limitera au maximum les erreurs, (c'est un code à 3 chiffres...)

    La question bete: pourquoi ne pas crééer directement un fichier .txt. au lieu de .var?

    Encore merci.

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 772
    Points : 319
    Points
    319
    Par défaut
    salut

    oui c'est toujours mieux sur un Id que sur un libellé
    le principe est le meme de toute facon

    le fichier .var permet de savoir à quoi te sert celui ci .var pour fichier de paramètres ...(enfin je pense )
    je t'avouerai que je n'ai jamais chercher à placer la boucle sur un fichier .txt
    à tester

    munity

Discussions similaires

  1. [MySQL] Changement de couleur d'une cellule en fonction d'une requete
    Par freko dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 10/07/2008, 16h56
  2. [MySQL] afficher une requete en fonction de résultats d'autres requetes
    Par mayers dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 27/07/2007, 10h42
  3. [Fonction]récuperer dans une variable le résultat d'une requete
    Par nejisama8 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 28/04/2007, 12h34
  4. Réponses: 14
    Dernier message: 10/01/2007, 10h12
  5. Etat en fonction d'une requete dans un formulaire
    Par Cablan dans le forum Access
    Réponses: 5
    Dernier message: 16/11/2005, 15h25

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