Fiche recap type TCD ==> Nlle Question a Dranreb

CelluleVide

XLDnaute Occasionnel
Bonjour a tous,
Je souhaite faire une fiche recapitulative a partir d'un tableau.
Dans ce tableau, je peux avoir, pour une meme date, plusieurs clients. et je voudrais faire le détail des données pour chaque client d'une meme date.
Le principe est celui du TCD mais je n'arrive pas a le faire.
Le fichier joint montre ce que je souhaite obtenir.

Bonne journée.
 

Pièces jointes

  • Exemple pal.xlsx
    16.7 KB · Affichages: 58

Dranreb

XLDnaute Barbatruc
Bonjour.

Ça à tester dans un module standard :
VB:
Option Explicit

Sub Detail()
Dim Dat As Date, TE(), LE&, CE&, TS(1 To 48, 1 To 8), LS&, CS&, HFC As Date, LS2&, CS2&
Dat = Feuil3.[C4].Value
TE = Feuil1.UsedRange.Value
For LE = 2 To UBound(TE, 1)
   If TE(LE, 1) = Dat Then
      If HFC < TE(LE, 4) Then HFC = TE(LE, 4)
      TS(LS + 2, CS + 3) = TE(LE, 5)
      LS2 = LS + 3: CS2 = CS + 2
      For CE = 6 To 15
         If TE(LE, CE) <> 0 Then
            LS2 = LS2 + 1
            TS(LS2, CS2) = TE(1, CE)
            TS(LS2, CS2 + 1) = TE(LE, CE): End If: Next CE
      CS = (CS + 4) Mod 8: If CS = 0 Then LS = LS + 14
      End If: Next LE
Feuil3.[A7:H48].Value = TS
Feuil3.[G2].Value = HFC
End Sub
Ensuite dans Feuil3 (Detail chargement) :
VB:
Option Explicit

Private Sub Worksheet_Activate()
Detail
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$C$4" Then Detail
End Sub
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Ta solution est parfaite
Non elle ne l'était pas, j'oubliai plein de détails. Nouvelle mouture :
VB:
Sub Detail()
Dim Dat As Date, TE(), LE&, LEDéb&, CE&, TS(1 To 48, 1 To 8), LS&, CS&, HFC As Date, LS2&, CS2&
Dat = Feuil3.[C4].Value
TE = Feuil1.UsedRange.Value
LS = 6
For LE = 2 To UBound(TE, 1)
   If TE(LE, 1) = Dat Then
      If HFC < TE(LE, 4) Then HFC = TE(LE, 4)
      If LEDéb = 0 Then LEDéb = LE
      TS(LS + 2, CS + 2) = "Client " & Format(TE(LE, 4), "hh:mm") & " :" ' = "Client :"
      TS(LS + 2, CS + 3) = TE(LE, 5)
      LS2 = LS + 3: CS2 = CS + 2
      For CE = 6 To 15
         If TE(LE, CE) <> 0 Then
            LS2 = LS2 + 1
            TS(LS2, CS2) = TE(1, CE)
            TS(LS2, CS2 + 1) = TE(LE, CE): End If: Next CE
      CS = (CS + 4) Mod 8: If CS = 0 Then LS = LS + 14
      End If: Next LE
TS(4, 2) = "Date": TS(4, 3) = Dat
If LEDéb > 0 Then
   TS(2, 2) = "Chef d'Équipe": TS(2, 3) = TE(LEDéb, 2)
   TS(2, 6) = "Heure fin camion": TS(2, 7) = HFC
   TS(4, 6) = "Immat Remorque": TS(4, 7) = TE(LEDéb, 3): End If
Feuil3.[A1:H48].Value = TS
End Sub
 

CelluleVide

XLDnaute Occasionnel
Bonjour Gosselien,
Ta solution par formule est bien aussi il va falloir que je me decide a savoir quelle version employée!
Dranreb,
J'avais bien vu qu'il manquait quelques détails mais je travailllais (avec peine!) pour les compléter car le gros du boulot etait fait.
Tu as été bien plus véloce que moi
Merci a vous Deux!
Bon Weekend.
 

gosselien

XLDnaute Barbatruc
Bonjour Gosselien,
Ta solution par formule est bien aussi il va falloir que je me decide a savoir quelle version employée!
Dranreb,
J'avais bien vu qu'il manquait quelques détails mais je travailllais (avec peine!) pour les compléter car le gros du boulot etait fait.
Tu as été bien plus véloce que moi
Merci a vous Deux!
Bon Weekend.
Si tu es inexpérimenté, je pense que dans ce cas, la formule sera + facile à appréhender, mais le code VBA sera plus rapide si tu as beaucoup de lignes à traiter; de plus, pour la formule, les zones nommées doivent être revues si tu as plus de lignes que dans l'exemple, ce qui se fait facilement et rapidement bien sûr.
P.
 

CelluleVide

XLDnaute Occasionnel
Je travaille avec la version VBA de Dranreb car ça me permet de me forger une expérience dans le domaine.
Par contre, la boucle élimine les champs vides ou nul ce qui fait que les listes ne sont pas toutes identiques.
Peut-on remedier a cela en mettant zero quand il n'y a rien (ou zéro)?
PS: Ne vous alarmer pas si je ne vous répond pas de suite car je rentre dans une réunion qui risque de retarder mon départ en Weekend...
 

CelluleVide

XLDnaute Occasionnel
Bonjour,
Je reprends ce fil pour une demande complémentaire et un probleme a l'execution:
1) Peut-on créer plusieurs fiches recap : il en faut une par remorque?
2) message d'erreur "Erreur 9 l'indice n'appartient pas a la selection" a la ligne suivante:
TS(LS + 2, CS + 2) = "Client Fini a:" & Format(TE(LE, 4), "hh:mm") & " :" ' = "Client :"
(il semble que TS =55 dans le cas présent alors que la variable TS est définie par "TS(1 To 54, 1 To 8)"

Voir la description en piece jointe.
D'avance merci
 

Pièces jointes

  • Exemple pal V2.xlsm
    33.3 KB · Affichages: 45

Dranreb

XLDnaute Barbatruc
Ah, impérativement uniquement pour la date choisie alors. On la choisi où ?
Et s'il devait y avoir plusieurs chefs d'équipe pour une même remorque ?
Peut on en profiter pour mettre un nom à la feuille genre Immat remorque & Chef d'équipe ?

Je pense que je vais ranger les données dans une collection d'objets de type SsGroup fabriquée par ma fonction GroupOrg.
À moins que l'ordre de classement des données soit toujours le même et propice à l'exploration séquentielle ?
Mais même alors ça compliquerait de devoir tester moi même les ruptures plutôt que d'explorer la collection par un
For Each Camion In Données…

Combien de lignes au maximum pourra contenir le feuille Recap toutes dates confondues ?
Si ça reste raisonnable (moins de 10000 environ) on peut fabriquer la collection pour toutes les dates et les proposer dans une ComboBox d'un petit UserForm qu'on afficherait au moyen d'un bouton dans la feuille Récap
 
Dernière édition:

CelluleVide

XLDnaute Occasionnel
j'avais mis une macro evenementielle dans la feuille detail chargement qui lancait la macro "Détail" au changement de date en C4
Mais on peut ajouter un bouton de lancement qui ouvre une msg box ou on choisit la date.
Pour le reste, je te laisse juge tes capacités dépassent largement mes compétences en VBA.
Si toutefois j'abusais , je te demanderais si tu peux commenter un peu ton code pour j'essaies de me former.
A+
 

Discussions similaires

Statistiques des forums

Discussions
312 305
Messages
2 087 084
Membres
103 461
dernier inscrit
dams94