XL 2013 Automatisme pour remplir des TABs

Sigmund173

XLDnaute Occasionnel
Je suppose que si je veux mettre plusieurs groupes dans HR car la nomenclature n'est pas bonne je peux faire ça aussi et ça marcherait ?

Code:
Case TDon(LD, 1) Like "*HR": TDon(LD, 9) = "HR"
Case TDon(LD, 1) Like "*PERSONNEL": TDon(LD, 9) = "HR"
Case TDon(LD, 1) Like "*ADMIN": TDon(LD, 9) = "HR"
 

Dranreb

XLDnaute Barbatruc
Oui. Si besoin, il peut y avoir plusieurs conditions portant sur des colonnes différentequi aboutissent à la même destination. Le Select Case True s'arrêtera à la première vraie trouvée.
 

Sigmund173

XLDnaute Occasionnel
Bon c'est cool ça a l'air de fonctionner et la fonction "Like" vraiment top, j'ai crée quelques TABs en plus le rangement se fait bien et du coup la révision va être un jeu d'enfant
C'est classe, c'est propre, c'est très pro .... BRAVO
 

Sigmund173

XLDnaute Occasionnel
J'ai juste un petit souci sur le TAB pdf, par moment il me le cadre business entre deux pages
Et pour le souci qu'on avait évoqué avec le nom de la page, en fait quand on génère un pdf il met le nom du TAB dans l'entête du milieu et donc si on génère une autre TAB bah il garde le nom précédent, donc faut effacé à la main le nom pour que si on génère un autre pdf la place soit libre
 

Dranreb

XLDnaute Barbatruc
Après le LOt.DataBodyRange.Value = TR vous pouvez essayez ces instructions :
VB:
   WshExclPDF.ResetAllPageBreaks
   If LR > 40 Then WshExclPDF.HPageBreaks.Add Before:=LOt.HeaderRowRange.Offset(LR + 1)
Rien compris à votre histoire d'entête du milieu. Le nom de la feuille source (c'est à dire la feuille active) est toujours mis comme entête du milieu de WshExclPDF
 

Sigmund173

XLDnaute Occasionnel
Rien compris à votre histoire d'entête du milieu. Le nom de la feuille source (c'est à dire la feuille active) est toujours mis comme entête du milieu de WshExclPDF
En fait on avait vu que lorsqu'on génère le pdf dans le TAB HR, c'est écrit HR en entête dans le fichier pdf
Ensuite quand je génère le pdf dans Finance, c'est écrit HR en entête dans le fichier pdf
Puis dans Other, c'est écrit HR en entête dans le fichier pdf
Une fois qu'on a généré le premier pdf, il met dans le TAB "pdf" le nom du TAB qu'on vient de faire
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Oui j'avais oublié ce truc qui ne marchait pas comme il devrait.
Ça doit être un bogue dans la bibliothèque Excel et je ne sais quoi y faire à part des tentatives empiriques.
Mais pour l'instant, écrit comme ça ça a l'air de marcher :
VB:
'   Application.EnableEvents = False
'      Do: DoEvents
   Application.PrintCommunication = False
   With WshExclPDF.PageSetup
      .FitToPagesWide = 1
      .FitToPagesTall = False
      .LeftHeader = WshSumm.[U2].Value
      .RightHeader = WshSumm.[D2].Value & vbLf & WshSumm.[D3].Value & vbLf & WshSumm.[D4].Value
      .CenterHeader = WshSrc.Name
      End With
   Application.PrintCommunication = True
'            Loop Until WshExclPDF.PageSetup.CenterHeader = WshSrc.Name
'   Application.EnableEvents = True
J'ai laissé en commentaire des instructions que j'avais provisoirement mises durant mes essais.
 

Dranreb

XLDnaute Barbatruc
Mais je viens de voir que c'est le LeftHeader n'est pas plus changé…
Et aussi qu'on y met la valeur de la cellule U2 de Summary, mais elle est vide ! Serait-ce ça qui mettrait le bazar ?
Remarque: il y a une image par dessus dans la version que j'ai gardée.
Est-ce qu'on n'avait pas dit qu'on ne modifierait plus le LeftHeader dans la macro parce qu'il contiendrait une bonne fois pour toutes une image mise à partir d'un fichier ?
 

Sigmund173

XLDnaute Occasionnel
Tout à fait du coup j'avais viré le U2 et mis une image directement dans le TAB pdf comme l'image était fixe c'àtait très bien comme ça
En fait je ne comprends pas pourquoi il écrit le nom dans header dans le "template" TAB pdf quand on génère et si c'est normal qu'il écrit dedans, que si on clique à nouveau ça n'efface pas ou écrit par dessus
 

Dranreb

XLDnaute Barbatruc
Bon. J'ai repris le fichier que j'avais gardé, viré le .LeftHeader = …, mais, mis au début, le .CenterHeader = WshSrc.Name ne se faisait pas.
Mis en dernier il se fait. Allez savoir pourquoi …
Et le .RightHeader = …, est-il utile de le refaire à chaque fois ? Si la valeur de l'expression ne change jamais, on ne peut savoir s'il marche !
 

Sigmund173

XLDnaute Occasionnel
Bon. J'ai repris le fichier que j'avais gardé, viré le .LeftHeader = …, mais, mis au début, le .CenterHeader = WshSrc.Name ne se faisait pas.
Mis en dernier il se fait. Allez savoir pourquoi …
Et le .RightHeader = …, est-il utile de le refaire à chaque fois ? Si la valeur de l'expression ne change jamais, on ne peut savoir s'il marche !
Le RighHeader est tjs le même oui, l'idée était en faite de modifier le nom dans le summary et ça met à jour tout le document
Sinon pour chaque nouveau projet il faudra aussi mettre à jour le Summary et le pdf, ce qui n'est pas un souci non plus je vous l'accorde
Je voulais automatiser le plus possible
On rempli la page de garde et tout ce met à jour
 

Dranreb

XLDnaute Barbatruc
Peut être qu'il vaut mieux l'enlever et mette cette procédure dans WshSumm
VB:
Private Sub Worksheet_Deactivate()
   WshExclPDF.PageSetup.RightHeader = Me.[D2].Value & vbLf & Me.[D3].Value & vbLf & Me.[D4].Value
   End Sub
Mais pas sûr. Face à un bogue dans la programmation Microsoft, on est généralement démuni.
 

Sigmund173

XLDnaute Occasionnel
Une petite idée me vient comme maintenant on est plus dans le test mais qu'on l'utilse avec des vraies données, on pu voir qu'on avait 129 dossiers et que 47 étaient dans Other, 1 dans HR et 2 dans Finance, etc ...
Mais on peut voir que si on additionne le tout on n'a pas 129 au départ et 129 dispatché.
Est ce qu'il y aurait une possibilité de faire une TAB et de mettre tout ceux qu'on n'a pas touché, plus pour info et controle ?

POurquoi je dis, parce que j'ai passé du temps à chercher pourquoi on en avait aussi peu de dispatché comme discuté hier, d'ou cette idée
C'est juste une idée pour améliorer quelque chose qui est déjà exceptionnelle pour nous
 

Sigmund173

XLDnaute Occasionnel
Peut être qu'il vaut mieux l'enlever et mette cette procédure dans WshSumm
VB:
Private Sub Worksheet_Deactivate()
   WshExclPDF.PageSetup.RightHeader = Me.[D2].Value & vbLf & Me.[D3].Value & vbLf & Me.[D4].Value
   End Sub
Mais pas sûr. Face à un bogue dans la programmation Microsoft, on est généralement démuni.
Oui bien sur je peux essayer, je suis d'accord avec vous ça ne sert à rien de surcharger si inutile
ça je sais ou le mettre vu que vous me l'avez dit, mais qu'est ce que je dois virer du coup ?
 

Sigmund173

XLDnaute Occasionnel
Vous voudriez une liste des dossiers pour lesquel pas un seul GroupMember n'est transféré ?
Oui c'est ça, de cette manière si je fais le total des groupes au départ 129 et ceux dispatché je me retrouve avec le même nombre
Là dans mon cas concret je suis à 129 et dispatché 80
Du coup que ce passe-t-il avec les 49, un bug, un oubli, une faute dans le programme, une erreur dans la gestion des groupes au niveau entreprise, etc..?
 

Dranreb

XLDnaute Barbatruc
Je suppose qu'on pourrait faire comme ça :
VB:
Sub Dispatch()
   Dim TDon(), LD As Long, DicTrs As New Dictionary, TGDr(), LG As Long, _
      C As Long, Détail, Dst As SsGr, TR(), LR As Long, Wsh As Worksheet, RAS As Boolean
   TDon = PlgUti(WshTrans.[A2]).Value
   For LD = 1 To UBound(TDon, 1): DicTrs(TDon(LD, 1)) = True: Next LD
   TGDr = PlgUti(WshGDrv.[A2]).Value: LD = 0
   ReDim TDon(1 To 100000, 1 To 9)
   For LG = 1 To UBound(TGDr, 1)
      If DicTrs.Exists(TGDr(LG, 5)) Then
         LD = LD + 1
         For C = 1 To 8: TDon(LD, C) = TGDr(LG, C): Next C
         TDon(LD, 9) = "Folder Owner"
         For Each Détail In Split(TDon(LD, 7), ",")
            If Not DicTrs.Exists(Détail) Then
               LD = LD + 1
               For C = 1 To 6: TDon(LD, C) = TGDr(LG, C): Next C
               TDon(LD, 7) = Détail
               TDon(LD, 8) = TGDr(LG, 8)
               TDon(LD, 9) = "Deputy not transferred"
               End If: Next Détail: End If
      RAS = True
      For Each Détail In Split(TGDr(LG, 8), ",")
         If DicTrs.Exists(Détail) Then
            LD = LD + 1
            For C = 1 To 7: TDon(LD, C) = TGDr(LG, C): Next C
            TDon(LD, 8) = Détail
            Select Case True
            '   … Remettre les instructions actuelles
               Case Else: TDon(LD, 9) = "Other": End Select
            RAS = False: End If: Next Détail
      If RAS Then
         LD = LD + 1
         For C = 1 To 8: TDon(LD, C) = TGDr(LG, C): Next C
         TDon(LD, 9) = "Aucun transfert"
         End If: Next LG
   MGigogne.DernièreLigneÀIndexer = LD
   For Each Dst In Gigogne(TDon, 9)
      ReDim TR(1 To 500, 1 To 10): LR = 0
      For Each Détail In Dst.Co
         LR = LR + 1
         For C = 1 To 8: TR(LR, C) = Détail(C): Next C, Détail
      Set Wsh = ThisWorkbook.Worksheets(Dst.Id)
      With Wsh.[K2:I10000]: .ClearContents: .Interior.ColorIndex = xlColorIndexNone: End With
      Wsh.[A2].Resize(UBound(TR, 1), UBound(TR, 2)) = TR
      Wsh.Names.Add "Flag", Wsh.[I2].Resize(LR)
      Wsh.[Flag].Interior.Color = &HB8FD00
      Wsh.[Flag].Offset(, -1).Interior.Color = &HBDFF9D
      Next Dst
   End Sub
Attention: je n'ai pas les tests à jour du Select Case True. Implique la création d'une feuille "Aucun transfert"
 
Dernière édition:

Sigmund173

XLDnaute Occasionnel
Je vais créer une TAB en plus et je fais un essai puis je vous tiens au courant
Tjs encore épaté par la réactivité et la qualité du boulot
 

Discussions similaires


Haut Bas