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

SDK Discussion :

[6.5.1][VBA] comment supprimer une variable créée par un addcomplexfilter


Sujet :

SDK

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 14
    Points : 6
    Points
    6
    Par défaut [6.5.1][VBA] comment supprimer une variable créée par un addcomplexfilter
    Bonjour,
    Je dispose d'une application qui découpe un fichier en morceaux filtrés à l'aide de la méthode addcomplexfilter appliquée dans une boucle.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Rapport = Application.ActiveDocument.Reports.Item("MonRapport")
    .
    puis
    .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    For i = 0 To champfiltré
        Rapport.AddComplexFilter variable, Formule
    NEXT i
    Or une variable est créée à chaque invocation de cette méthode. Mon traitement s'alourdit et je me demande si le nombre des variables ainsi créées ne ralentit pas mon script.
    La méthode actuelle consiste à explorer la totalité des variables du document et de les comparer à la chaine créée par la boucle précédente ce qui est un peu lourd (mon document contient pas moins de 300 variables).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
            Set Toto = Application.ActiveDocument.DocumentVariables
            For k = 1 To Toto.Count
             If Toto.Item(k).Formula = Formule 
             THEN
                 Toto.Item(k).Delete
             End If
             Rapport.ForceCompute
            Next k
    Pouvez vous éclairer ma lanterne ?
    Merci

  2. #2
    Rédacteur
    Avatar de TomDuBouchon
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juin 2009
    Messages
    3 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 343
    Points : 5 848
    Points
    5 848
    Par défaut
    Salut,

    Est-ce que tu pourrais donner un exemple concret sur ce que tu souhaites obtenir car je t'avouerais que je n'ai pas tout compris...

    De plus, la méthode Addcomplexfilter ne crée pas de variable mais un filtre sur une variable existante.
    Dans la boucle que tu donnes dans ton exemple, dans la mesure où "variable" et "formule" ne sont pas modifiés, le filtre est modifié et recréé à l'identique autant de fois qu'il y a d'occurence de "i" pour atteindre "champfiltré"... Je ne vois du coup pas bien l'intérêt... Mais comme je l'ai dit je n'ai peut être tout simplement pas compris le but que tu cherches à atteindre.
    Pensez à consulter les FAQs BI, les Tutoriels BI et à effectuer des Recherches.
    Un message vous a aidé ? Votez en cliquant sur
    Votre problème est résolu ? Merci de l'indiquer en cliquant sur le bouton

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 14
    Points : 6
    Points
    6
    Par défaut Détails
    Je vais essayer d'être clair.

    J'essaie de modifier un script que je n'ai pas écrit.
    Le fichier BO contient des contrôles à adresser à des établissements scolaires.
    Il comporte une section établissement/
    Le script transforme en autant de fichier pdf qu'il y a d'établissement et les envoie par mail. Il utilise pour cela le addcomplexfilter sur le document actif.

    Mais bien que la taille des documents créés par BO soit quasiment la même pour chaque établissement, les temps d'exécution s'allongent.
    Or il se trouve que le nombre de variables créées par les addcomplexfilter est important (plus de 500) et qu'il n'est pas impossible que ce nombre croissant de variables soit pour quelque chose dans l'accroissement des temps d'execution du script.

    C'est la raison pour laquelle je chercherait soir à appliquer un filtre (plutôt qu'un addcomplexfilter) soit à détruire les variables créés à chaque addcomplexfilter.

    Ai-je été plus clair ?

  4. #4
    Rédacteur
    Avatar de TomDuBouchon
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juin 2009
    Messages
    3 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 343
    Points : 5 848
    Points
    5 848
    Par défaut
    OK, j'ai donc bien compris ce que tu voulais dire, mais le problème ne vient clairement pas de la méthode AddComplexFilter...

    Comme je te l'ai dit celle-ci ne crée pas de variable mais ajoute (ou modifie) un filtre élaboré sur une variable donnée avec une formule donnée, ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Rapport.AddComplexFilter <Etablissement> "=Paris"
    signifie qu'un filtre sera créé sur la variable <Etablissement> et que la formule relative à ce filtre sera "=Paris". N'apparaitront donc sur le rapport que les informations relatives à l'établissement "Paris".

    Par contre, je ne nie pas l'existence d'un problème de génération de variable dans ton code, il n'est simplement pas à ce niveau là. Envoie-nous ton code complet qu'on puisse déterminer d'où ça vient.
    Pensez à consulter les FAQs BI, les Tutoriels BI et à effectuer des Recherches.
    Un message vous a aidé ? Votez en cliquant sur
    Votre problème est résolu ? Merci de l'indiquer en cliquant sur le bouton

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

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

    voici ce que j'utlise pour supprimer le filtre complexe depuis VBA
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Rapport.AddComplexFilter <Etablissement>, "=(0=0)"
    en espérant que cela puisse t'aider

    munity

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 14
    Points : 6
    Points
    6
    Par défaut Voilà le code
    Je comprend qu'il ne créé pas de variable mais ajoute un filtre à une variable existante.
    D'où une question : comment se comporte-t-il quand aucun filtre n'existe sur la variable ?
    Je parle de création de variable car quand on navigue dans les formules, il y a autant de variables (lignes) visibles que d'invocation de la méthode addcomplexfilter et que pour faire du ménage il faut bien aller dans variables et supprimer.
    Merci pour votre aide voici le code en question
    Pour augmenter la lisibilité, j'ai modifié les commentaires
    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
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
     
    REM /*
    REM  Fichier modifié le 21/09/2009
    REM Ajout du Do events tous les 5 envois de mail
    REM Utilisation de l interface permettant de choisir le texte à envoyer 
    REM et d envoyer un test */
     
    Private Declare Function ENVOI Lib "dllmailbo.dll" Alias "SENDMAIL" (ByVal mess As String, ByVal FromAddr As String, ByVal ToAddr As String, ByVal LeSujet As String, ByVal ToAttach As String, ByVal ParamHost As String, ByVal ParamPort As Integer) As Long
    Public MObjet, MFrom, MContenu, Anom, MJoindre, ERepDest, ERapport, EFournisseur, EChRne As String
    Public ELstEtab() As String
    Public MAnnuler As Boolean
    REM /*  Ajout Bordeaux 11/10/2005 */
    Public MTest As Boolean
    Public MAdresseTest As String
    Public t() As String Remtableau où le fichier txt est copié
    Public posmsg() As String Rem /* Tableau de position des messages */
    Public marque() As String Rem /* tableau des identifiants des messages */
    Public msg() As String Rem /* tableau contenant le message à afficher */
    Public fmessages As String Rem /* emplacement physique du fichier contenant les messages */
    Sub Envoi_par_Mail()
     
     
    Dim ParamHote As String
    Dim ParamPort As Integer
    Dim MailFin As String
     
     
     
     
    REM /* ************ PARAMETRES MESSAGERIE ***************** */
     ParamHost = "***"
     ParamPort = ***
     MailFin = "***@***"
    REM /* Ajout Bordeaux 19/07/2007 */
     fmessages = "***"
    REM /***************************************************** */
     
     Dim ColRNE As Column
     Dim FileName, Adresse, Formule As String
     Dim Rapport As Report
     Dim Toto As DocumentVariables
     Dim repertoire As String
     Dim NbFournisseur As Integer
     Dim PiecesJointes As String
     Dim modulo As Integer
     Dim TabAlphabet(23) As String
     
     On Error GoTo SortErreur
     
     Dim j As Integer
     Dim k As Integer
     
     j = 0
     
     For i = 0 To 26
         If Chr(65 + i) <> "I" And Chr(65 + i) <> "O" And Chr(65 + i) <> "Q" Then
              TabAlphabet(j) = Chr(65 + i)
              j = j + 1
         End If
     Next i
     
     ReDim ELstEtab(0)
     ERapport = ""
     EFournisseur = ""
     EChRne = ""
     MAnnuler = False
     
     Load ParamsEnvoi
     ParamsEnvoi.Show
     
     REM  /* ********* création du répertoire où seront stocké les fichiers pdf ********* */
     repertoire = Dir(ERepDest, vbDirectory)
     
     If repertoire = "" Then
        MkDir (ERepDest)
     End If
     REM /* **************************************************************************** */
     
      repertoire = ERepDest
     
      Unload ParamsEnvoi
     
      If UBound(ELstEtab) < 1 Then
          MsgBox "Aucun RNE sélectionné !"
          Exit Sub
      End If
     
      If MAnnuler Then
          Exit Sub
      End If
     
      Load ParamsMsg
      ParamsMsg.Show
      Unload ParamsMsg
     
      If MAnnuler Then
          Exit Sub
      End If
     
      Set Rapport = Application.ActiveDocument.Reports.Item(ERapport)
      Set ColRNE = Application.ActiveDocument.DataProviders.Item(EFournisseur).Columns.Item(EChRne)
     
      NbFournisseur = Application.ActiveDocument.DataProviders.Count
     
     
      Dim trouve As Boolean
     
      For i = 1 To NbFournisseur
          trouve = False
          If EFournisseur <> Application.ActiveDocument.DataProviders.Item(i).Name Then
              For j = 1 To Application.ActiveDocument.DataProviders.Item(i).Columns.Count
                  If Application.ActiveDocument.DataProviders.Item(i).Columns.Item(j).Name = EChRne Then
                      trouve = True
                      Exit For
                  End If
              Next j
              If trouve Then
                  Exit For
              End If
          End If
      Next i
     
     
      REM /* filtre la colonne avec les rne sélectionnés et crée un pdf par rne */
      For i = 0 To UBound(ELstEtab) - 1
     
           If NbFournisseur > 1 And trouve Then
                Formule = "=<" + EChRne + "(" + EFournisseur + ")>=" + Chr(34) + ELstEtab(i) + Chr(34)
                Rapport.AddComplexFilter EChRne + "(" + EFournisseur + ")", Formule
           Else
                Formule = "=<" + EChRne + ">=" + Chr(34) + ELstEtab(i) + Chr(34)
                Rapport.AddComplexFilter EChRne, Formule
           End If
           Rapport.ForceCompute
           FileName = repertoire + "\\" + ELstEtab(i)
           Rapport.ExportAsPDF FileName
     
           Dim MySize As Long
           MySize = FileLen(FileName + ".pdf")
     
           If MySize > 3000000 Then
                MsgBox "Erreur : Taille du fichier trop importante (> à 3Mo)"
                GoTo SortErreur
           End If
     
           REM /* verif du RNE : prendre la partie des chiffres du rne, faire le modulo par 23 */
           REM /* ( 23 lettres dans l alphabet car on enlève les lettres O, I, Q ) */
           REM /* ajouter 1 au modulo, le résultat obtenu correspond à l'indice de la lettre de l'alphabet - O I Q */
           Rem /* ex : 0622949U, 0622949 mod 23 = 17, la 17ème lettre correspond à U donc le RNE est valide */
     
           modulo = (val(Left(ELstEtab(i), 7)) Mod 23)
     
           If Len(ELstEtab(i)) = 8 And TabAlphabet(modulo) = Right(ELstEtab(i), 1) Then
               Adresse = "ce." + ELstEtab(i)
     
           Else
               MsgBox "Rne non valide"
               GoTo SortErreur
           End If
     
           If MJoindre <> "" Then
               PiecesJointes = MJoindre + ";" + FileName + ".pdf"
           Else
               PiecesJointes = FileName + ".pdf"
           End If
     
     
           If MTest Then
           If (MAdresseTest <> Empty) Then
                ENVOI MContenu, MFrom, MAdresseTest, MObjet + " (à " + Adresse + ")", PiecesJointes, ParamHost, ParamPort
           Else
                ENVOI MContenu, MFrom, "***@***", MObjet + " (à " + Adresse + ")", PiecesJointes, ParamHost, ParamPort
           End If
           Else
                ENVOI MContenu, MFrom, Adresse + MailFin, MObjet + " (à " + Adresse + ")", PiecesJointes, ParamHost, ParamPort
           End If
     
      If (i Mod 5 = 0) Then
      DoEvents
      End If
      Next i
     
      MsgBox "Envoi Terminé"
      Exit Sub
     
    SortErreur:
       MsgBox "Erreur ou annulation"
       If Err.Number <> 0 Then
        msg = "L’erreur n° " & Str(Err.Number) & _
            " a été générée par " _
                & Err.Source & Chr(13) & Err.Description
        MsgBox msg, , "Erreur", Err.HelpFile, Err.HelpContext
     
    End If
     
    End Sub

  7. #7
    Rédacteur
    Avatar de TomDuBouchon
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juin 2009
    Messages
    3 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 343
    Points : 5 848
    Points
    5 848
    Par défaut
    Je me penche sur ton code dès que j'ai un peu de temps... Par contre, dans le message que tu as posté, retire de ton code les paramètres relatifs à ton entreprise (host, etc...) pour des raisons de sécurité, et mets des valeurs bidons à la place.
    Pensez à consulter les FAQs BI, les Tutoriels BI et à effectuer des Recherches.
    Un message vous a aidé ? Votez en cliquant sur
    Votre problème est résolu ? Merci de l'indiquer en cliquant sur le bouton

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par TomDuBouchon Voir le message
    Je me penche sur ton code dès que j'ai un peu de temps... Par contre, dans le message que tu as posté, retire de ton code les paramètres relatifs à ton entreprise (host, etc...) pour des raisons de sécurité, et mets des valeurs bidons à la place.
    C'est fait merci

  9. #9
    Rédacteur
    Avatar de TomDuBouchon
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juin 2009
    Messages
    3 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 343
    Points : 5 848
    Points
    5 848
    Par défaut
    A première vue, je ne vois pas ce qui cloche dans ton code...
    Je vais me pencher sur l'hypothèse de l'inexistence d'une variable lorsque celle-ci est appelée dans la méthode AddComplexFilter, pour voir si elle est générée automatiquement...

    Par contre, est-ce que tes .pdf sont bien générés avec le filtre sur l'établissement correspondant ?

    Pourrais-tu poster un exemple des variables créées : Nom et Formule.

    EDIT : De plus, es-tu sûr d'avoir mis tout le code ? Car je ne vois pas comment sont alimentés ELstEtab et EchRne...
    Pensez à consulter les FAQs BI, les Tutoriels BI et à effectuer des Recherches.
    Un message vous a aidé ? Votez en cliquant sur
    Votre problème est résolu ? Merci de l'indiquer en cliquant sur le bouton

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 14
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par TomDuBouchon Voir le message
    A première vue, je ne vois pas ce qui cloche dans ton code...
    Je vais me pencher sur l'hypothèse de l'inexistence d'une variable lorsque celle-ci est appelée dans la méthode AddComplexFilter, pour voir si elle est générée automatiquement...
    Par contre, est-ce que tes .pdf sont bien générés avec le filtre sur l'établissement correspondant ?
    Je confirme
    Citation Envoyé par TomDuBouchon Voir le message

    Pourrais-tu poster un exemple des variables créées : Nom et Formule.
    =<Identifiant Etablissement(Etablissements avec contrôles)>="0240004Z"
    Citation Envoyé par TomDuBouchon Voir le message
    EDIT : De plus, es-tu sûr d'avoir mis tout le code ? Car je ne vois pas comment sont alimentés ELstEtab et EchRne...
    formulaire : ParamsEnvoi
    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
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
     
    Private Sub Annuler_Click()
       Unload ParamsEnvoi
       MAnnuler = True
    End Sub
     
     
    Private Sub CommandButton1_Click()
     
        ReDim ELstEtab(0)
     
        ERapport = ListeRapport.Value
        ERepDest = RepDest.Text
        EFournisseur = ListeFournisseurs.Value
        EChRne = ListeChamps.Value
        For i = 0 To ListEtab.ListCount - 1
            If ListEtab.Selected(i) = True Then
                ReDim Preserve ELstEtab(UBound(ELstEtab) + 1)
                ELstEtab(UBound(ELstEtab) - 1) = ListEtab.List(i)
            End If
        Next i
     
        Unload ParamsEnvoi
    End Sub
     
    Private Sub ListeChamps_click()
     
        Set Rapport = Application.ActiveDocument.Reports.Item(ListeRapport.Value)
        Set ColRNE = Application.ActiveDocument.DataProviders.Item(ListeFournisseurs.Value).Columns.Item(ListeChamps.Value)
     
        Dim TabRne() As String
        ReDim TabRne(0)
     
        ListEtab.Clear
     
        Dim trouve As Boolean
     
        For i = 1 To ColRNE.Count
            trouve = False
            For j = 0 To UBound(TabRne)
                If TabRne(j) = ColRNE.Item(i) Then
                    trouve = True
                    Exit For
                End If
            Next j
            If trouve = False Then
                ReDim Preserve TabRne(UBound(TabRne) + 1)
                If IsNull(ColRNE.Item(i)) Then
                    TabRne(UBound(TabRne) - 1) = ""
                Else
                    TabRne(UBound(TabRne) - 1) = ColRNE.Item(i)
                End If
            End If
        Next i
     
        For i = 0 To UBound(TabRne) - 1
            ListEtab.AddItem TabRne(i)
        Next i
     
        ListEtab.ListIndex = 0
     
    End Sub
     
    Private Sub ListeFournisseurs_change()
     
        ListeChamps.Clear
     
        For i = 1 To Application.ActiveDocument.DataProviders.Item(ListeFournisseurs.Value).Columns.Count
            ListeChamps.AddItem (Application.ActiveDocument.DataProviders.Item(ListeFournisseurs.Value).Columns.Item(i).Name)
        Next i
        ListeChamps.ListIndex = 0
     
        Set Rapport = Application.ActiveDocument.Reports.Item(ListeRapport.Value)
        Set ColRNE = Application.ActiveDocument.DataProviders.Item(ListeFournisseurs.Value).Columns.Item(ListeChamps.Value)
     
        Dim TabRne() As String
        ReDim TabRne(0)
     
        ListEtab.Clear
     
        Dim trouve As Boolean
     
         For i = 1 To ColRNE.Count
            trouve = False
            For j = 0 To UBound(TabRne)
                If TabRne(j) = ColRNE.Item(i) Then
                    trouve = True
                    Exit For
                End If
            Next j
            If trouve = False Then
                ReDim Preserve TabRne(UBound(TabRne) + 1)
                If IsNull(ColRNE.Item(i)) Then
                    TabRne(UBound(TabRne) - 1) = ""
                Else
                    TabRne(UBound(TabRne) - 1) = ColRNE.Item(i)
                End If
            End If
        Next i
     
        For i = 0 To UBound(TabRne) - 1
            ListEtab.AddItem TabRne(i)
        Next i
        ListEtab.ListIndex = 0
     
    End Sub
     
     
    Private Sub UserForm_Activate()
     
        For i = 1 To Application.ActiveDocument.Reports.Count
            ListeRapport.AddItem (Application.ActiveDocument.Reports.Item(i).Name)
        Next i
        ListeRapport.ListIndex = 0
     
        For i = 1 To Application.ActiveDocument.DataProviders.Count
            ListeFournisseurs.AddItem (Application.ActiveDocument.DataProviders.Item(i).Name)
        Next i
        ListeFournisseurs.ListIndex = 0
     
    End Sub
    Formulaire : Paramsmsg
    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
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
     
    Private Sub Annuler_Click()
       Unload ParamsMsg
       MAnnuler = True
    End Sub
     
    Private Sub ComboBox1_Change()
    Dim objet As String     /* string tempo pour message à afficher */
    Dim objeta As String    /* string tempo pour messages assemblés avant affichage */
     
    nummsg = ComboBox1.ListIndex + 1
    mdeb = posmsg(nummsg)
    mfin = posmsg(nummsg + 1)
    longueur = mfin - mdeb
    objeta = ""
     
    Rem /* affiche des messages si ils contiennent plus de 3 lignes
    Rem ligne 1 email
    Rem  ligne 2 objet
    Rem ligne 3 et plus message */
     
    If longueur > 3 Then
        c = 1
        For i = mdeb + 3 To mfin - 1
            ReDim Preserve msg(c)
            msg(c) = t(i)
            c = c + 1
        Next
        f_from.Text = t(mdeb + 1)
        f_Objet.Text = t(mdeb + 2)
        For d = 1 To c - 1
            objet = msg(d) + Chr(13)
            objeta = objeta + objet
        Next d
        f_Text.Text = objeta
    Else:
        f_Text.Text = "Ce message ne convient pas toutes les informations nécessaires pour que vous puissiez correctement l'envoyer" + Chr(13) + "Veuillez en sélectionner un autre"
        f_from.Text = ""
        f_Objet.Text = ""
    End If
     
    End Sub
     
    Private Sub CommandButton1_Click()
     MObjet = ParamsMsg.f_Objet.Text
     MContenu = ParamsMsg.f_Text.Text
     MJoindre = ""
     MFrom = ParamsMsg.f_from.Text
     MTest = ChkTest.Value
     MAdresseTest = txtAdresseTest.Value
     
      Dim Valeur As String
     
     For i = 0 To AJoindre.ListCount - 1
         AJoindre.ListIndex = i
         If MJoindre <> "" Then
             MJoindre = MJoindre + ";" + AJoindre.Value
         Else
             MJoindre = AJoindre.Value
         End If
     Next i
     
     MAnnuler = False
     Unload ParamsMsg
    End Sub
     
    Private Sub OuvrirPJ_Click()
        Dim dlg As CFileDialog
     
        Set dlg = New CFileDialog
        dlg.DialogTitle = "Joindre en complément..."
        dlg.Filter = "Tous les fichiers|*.*"
        dlg.InitialDir = "C:\\"
        If dlg.Show(True) Then
            AJoindre.AddItem dlg.FileName
        End If
    End Sub
     
    Private Sub UserForm_Activate()
    Dim taille_tableau As Integer
    Dim i As Integer
    Dim longueur As Integer  Rem /*longueur du message selectionné */
    Dim mdeb As Integer Rem /* marqueur de début de message */
    Dim mfin As Integer Rem /* marqueur de fin de message */
     
    Rem /* initialisation des champs */
    f_Text.Text = ""
    f_from.Text = ""
    f_Objet.Text = ""
     
    Rem /* fermeture et ouverture puis extraction du fichier text dans t() */
    Close #1
    Open "g:\\bomail\\messages.txt" For Input As #1
    i = 0
    While Not EOF(1)
        ReDim Preserve t(i)
        Line Input #1, t(i)
        i = i + 1
    Wend
    taille_tableau = i
     
    rem /* le fichier test.txt est stocké dans le tableau t 
    rem  a une longueur = à taille_tableau */
     
    Rem /* recherche de la position des messages */
    i = 0
    nbr = 0
     
    While i < taille_tableau
        If InStr(t(i), Chr(91)) Then
            nbr = nbr + 1
            ReDim Preserve posmsg(nbr)
            posmsg(nbr) = i
        End If
        ReDim Preserve posmsg(nbr + 1)
        posmsg(nbr + 1) = taille_tableau
        i = i + 1
    Wend
    j = 0
     
    Rem /* Affichages des messages dans combobox1 pour choix */
    For i = 1 To nbr
        a = posmsg(i)
        ReDim Preserve marque(j)
        marque(j) = t(a)
        ComboBox1.AddItem (Mid(marque(j), 2, Len(marque(j)) - 2))
     
        j = j + 1
    Next i
     
    Rem /* marque() convient les identifiants pour les messages */
     
    End Sub

  11. #11
    Rédacteur
    Avatar de TomDuBouchon
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juin 2009
    Messages
    3 343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 343
    Points : 5 848
    Points
    5 848
    Par défaut
    Bon OK,

    En fait je crois que j'avais mal compris. En fait quand tu parles de variable il s'agit en fait de filtre (ce n'est pas la même chose) il n'y a d'ailleurs aucune variable générée par ton code.

    Ce qu'il y a, c'est que comme ton code, ton fournisseur etc... peuvent changer ça te crée un nombre de filtre complexe assez importants (qui ralentissent l'affichage d'ailleurs)

    Malheureusement, comme précisé sur cette page du site de SAP : "There is no way to delete a filter using the SDK" ou en Français, qu'il n'y a pas moyen de supprimer un filtre depuis le SDK.

    Résultat, tu as deux solutions :
    - Soit une fois le traitement terminé, tu ne sauvegardes surtout pas ton rapport.
    - Soit tu appliques la solution de munity en l'appliquant juste après ton export :
    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
    IF NbFournisseur > 1 AND trouve Then
                Formule = "=<" + EChRne + "(" + EFournisseur + ")>=" + Chr(34) + ELstEtab(i) + Chr(34)
                Rapport.AddComplexFilter EChRne + "(" + EFournisseur + ")", Formule
           Else
                Formule = "=<" + EChRne + ">=" + Chr(34) + ELstEtab(i) + Chr(34)
                Rapport.AddComplexFilter EChRne, Formule
           End IF
           Rapport.ForceCompute
           FileName = repertoire + "\\" + ELstEtab(i)
           Rapport.ExportAsPDF FileName
           // Tu rajoutes ci-dessous :
           IF NbFournisseur > 1 AND trouve Then
                Formule = "=(0=0)"
                Rapport.AddComplexFilter EChRne + "(" + EFournisseur + ")", Formule
           Else
                Formule = "=(0=0)"
                Rapport.AddComplexFilter EChRne, Formule
    Ca permettra de remplacer le filtre apposé juste avant pour faire en sorte de réafficher toutes les données. Et comme la formule est moins compliquée, ça devrait moins ralentir ton traitement (mais un peu quand même)
    Pensez à consulter les FAQs BI, les Tutoriels BI et à effectuer des Recherches.
    Un message vous a aidé ? Votez en cliquant sur
    Votre problème est résolu ? Merci de l'indiquer en cliquant sur le bouton

Discussions similaires

  1. [VBA] Comment supprimer une ligne entiere dans excel
    Par babouoles dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 06/07/2017, 08h34
  2. [XL-2010] Problème de récupération d'une variable créée par un userform dans un module
    Par r.morel dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 26/08/2014, 17h21
  3. Je n'arrive pas à supprimer une Table créée par VBA
    Par ac264 dans le forum VBA Access
    Réponses: 2
    Dernier message: 01/02/2010, 10h55
  4. Comment définir une variable connu par tous les évènements
    Par whitespirit dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 17/06/2008, 14h55
  5. Comment apeler une variable d'un etat pour le VBA
    Par chetflo dans le forum Access
    Réponses: 2
    Dernier message: 26/11/2005, 13h40

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