|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre régulier
![]() Inscription : septembre 2007 Messages : 280 ![]() |
bonjour à tous,
voila des heures que je cherche le moyen pour sélecionner un block spécifique sur un rapport afin de lui affecter un filtre (le tout par vba évidemment) j'ai bien trouvé ci dessous les fonctions pour isoler un document et un onglet mais je bute sur les tableaux que contienne cet onglet Dim DocObj As busobj.Document ' l'Object Document Set DocObj = ActiveDocument ' récupère le document actif Dim RepObj As busobj.Report ' l'Object Rapport Set RepObj = ActiveReport ' récupère le rapport actif y aurait il une âme charitable pour m'aider merci désolé pour le webmaster mais j'ai ouvert un autre fil ne sachant bien utilisé l'interface du site munity |
|
|
00
|
|
|
#2 | ||
![]() ![]() Bruno ROMAN-RUIZ Inscription : décembre 2006 Messages : 2 181 ![]() |
Code :
|
||
|
|
00
|
|
|
#3 |
|
Membre régulier
![]() Inscription : septembre 2007 Messages : 280 ![]() |
ok
merci pour la piste je teste et te tiens au courant munity |
|
|
00
|
|
|
#4 |
|
Membre régulier
![]() Inscription : septembre 2007 Messages : 280 ![]() |
cher BRUNO2R
il me semble que ta soluce corresponde à mon besoin en fait j'avais trouvé les bonnes instructions mais placé au mauvais endroit encore une petite question j'applique à ces tableaux 2 filtres avec la méthode RepObj.AddComplexFilter... seulement je souhaiterai appliqué un filtre spécifique au tableau 1 et 1 second au tableau 2 les valeurs de chacun des filtres sont bien entendu différentes existe t il une instruction permettant non pas un filtre global mais sur un tableau spécifique merci de ton aide par avance et surtout merci pour le déblocage déjà apporté |
|
|
00
|
|
|
#5 |
![]() ![]() Bruno ROMAN-RUIZ Inscription : décembre 2006 Messages : 2 181 ![]() |
Salut,
J'ai déjà utilisé en VB le AddComplexFilter mais sur un Report. J'ai vérifié dans l'explorateur d'objets VB AddComplexFilter n'est signalé que comme membre de Report. Et pourtant on le fait "à la main". As tu essayé de lister tous les objets BlockStructure de ton report à l'aide des index et toutes leurs propriétés pour voir si ton filtre appliqué manuellement apparait ... Je ne peux pas t'en dire plus n'ayant pas eu à le faire au niveau d'un tableau. |
|
|
00
|
|
|
#6 |
|
Membre régulier
![]() Inscription : septembre 2007 Messages : 280 ![]() |
salut BRUNO2R
merci de ta réponse, mais je pense que j'ai tout tenté et malheureusement n'ai pas trouvé je reste persuadé qu'il y a une soluce pourtant enfin, en informatique l'avantage c qu'il y a toujours plusieurs solutions possibles donc ma solution est de créer 2 nouvelles requêtes avec les mêmes objets mais pas les mêmes conditions et enfin de regrouper celle ci dans un tableau recap (en espérant ne pas avoir d'autres effets auxquels je n'aurais pas pensé) je te joins la macro que j'utilise afin de pouvoir automatiser soit en lancant la macro manuellement soit en utilisant le broadcast. encore merci de d'être penché sur mon problème Sub Automate() On Error GoTo Err_Sub Const ForReading = 1, ForWriting = 2, ForAppending = 8 Dim Fichier Dim destPath, racinePath, sParamFile, sDestFile, SFormat As String Dim DocObj As busobj.Document Dim RepObj As busobj.Report Dim RepObjs As busobj.Reports Dim objStructItem As busobj.ReportStructureItem Dim mesParametres(3) As String Dim maDate As String, monAnnee As String Dim ParFil1, ParFil2 'paramétrage racinePath = "\\SRVFS3\Presse\Extraction comptage\10 - Fichiers .var\" sDestFile = ActiveDocument.Name destPath = "C:\Documents and Settings\MalbrancDa\Bureau\" sParamFile = "FichierParametrages.var" SFormat = ".xls" Set DocObj = ActiveDocument Set RepObj = ActiveReport Set RepObjs = ActiveDocument.Reports 'création répertoire si nécessaire On Error GoTo Err_Mkdir MkDir destPath On Error GoTo Err_Sub 'ouverture et lecture fichier de param Set Fichier = CreateObject("Scripting.FileSystemObject") Set FichierParam = Fichier.OpenTextFile(racinePath & sParamFile, ForReading) While FichierParam.AtEndOfStream <> True fichierligne = FichierParam.ReadLine If Trim(fichierligne) <> "" Then 'test de ligne vide 'lecture des paramètres du fichier lesparametres = Split(fichierligne, ".") 'Création du tableau - La valeur de l'indice commence à 0 mesParametres(0) = lesparametres(0) mesParametres(1) = lesparametres(1) mesParametres(2) = lesparametres(2) ParFil1 = lesparametres(3) ParFil2 = lesparametres(4) '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 AppBO.Interactive = False AppBO.ActiveDocument.Refresh AppBO.Interactive = True 'Mise en place des filtres dynamiques For Each RepObj In RepObjs Set objStruct = RepObj.GeneralSectionStructure If lesparametres(0) = "GAD" Then For Each objStructItem In objStruct.Body Nom = objStructItem.Name If RepObj.Name = "COMPTAGE SPECIFIQUE" Then If objStructItem.Name = "COMPTAGE1" Then If ParFil2 = "" Then RepObj.AddComplexFilter "Offre", "=(0=0)" If ParFil2 <> "" Then RepObj.AddComplexFilter "Offre", "=<Offre>DansListe(" & ParFil2 & ")" RepObj.ForceCompute End If If objStructItem.Name = "COMPTAGE2" Then If ParFil2 = "" Then RepObj.AddComplexFilter "Offre", "=(0=0)" If ParFil2 <> "" Then RepObj.AddComplexFilter "Offre", "=Non(<Offre>DansListe(" & ParFil2 & "))" RepObj.ForceCompute End If End If Next Else If ParFil1 = "" Then RepObj.AddComplexFilter "Offre", "=(0=0)" If ParFil1 <> "" Then RepObj.AddComplexFilter "Offre", "=Non(<Offre>DansListe(" & ParFil1 & "))" RepObj.ForceCompute End If Next 'enregistrement rapport filename = sDestFile & " - " & mesParametres(0) & " Echéance " & mesParametres(1) & " à " & mesParametres(2) & SFormat filename = destPath & filename AppBO.ActiveDocument.SaveAs filename, 1 'Enregistre dans un fichier XLS 'Supprime l'intégralité des filtres dans le document For Each RepObj In RepObjs RepObj.AddComplexFilter "Offre", "=(0=0)" RepObj.ForceCompute Next End If 'fin du test de ligne vide Wend Exit_Sub: AppBO.Interactive = True Set AppBO = Nothing ' MsgBox "Terminé sans erreur" Exit Sub Err_Sub: AppBO.Interactive = True Set AppBO = Nothing MsgBox Err.Description Err_Mkdir: Resume Next End Sub 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 |
|
|
00
|
|
|
#7 | ||
![]() ![]() Bruno ROMAN-RUIZ Inscription : décembre 2006 Messages : 2 181 ![]() |
Trouvé sur
http://www.forumtopics.com/busobj/po...quote&p=371970 Code :
|
||
|
|
00
|
|
|
#8 |
|
Membre régulier
![]() Inscription : septembre 2007 Messages : 280 ![]() |
bonsoir bruno2r
merci pour ta proposition mais comme je l'ai dit j'ai réaliser 2 autres requêtes puis créer 2 blocs avec mes valeurs j'ai ensuite masquer les colonnes d'un des 2 blocs pour faire penser qu'il ne s'agisse que d'un seul bloc la solution proposé je ne suis pas certain de la comprendre (pas trop à l'aise avec l'anglais) enfin je pense qu'avec un peu de persevérance cela serait possible mais là j'ai plein d'autres rapport à automatiser avec macro et fichier.var donc je mets en stand by ta proposition encore merci au fait est ce que mon code va pouvoir te servir si tu lis le vba comme je le suppose tu as du remarqué qu'il y avait une fonction qui permet de mettre à jour des invites de requête dynamiquement par l'intermédiaire d'un fichier .var (séparateur ".") c vraiment génial.. j'avoue que je commence à developper sous bo avec vba (je suis plus à l'aise avec excel) et pense réellement que peu de choses sont impossibles à l'aide de macro munity |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com