Trier à partir une base de donnée complex

creolia

XLDnaute Impliqué
Bonsoir à tous

je suis bloquer sur une extraction de la BDD je sais pas si c'est possible mais pour moi c'est compliquer

en fait j'ai une BDD de 80 sapeurs on utilise un programme en ligne de gestion de disponibilité avec extraction en CSV autant dire excel

les journée sont divisé en 3 partis Matin Apres-midi nuit

donc l'extraction donne exemple

Agent1 M
A
N


évidement tous les sapeur sont pas disponible tous les jours et toute les période de la journée

je cherche donc une solution pour extraire la BDD et classer par date de jour qui est disponible dans les 3 période

je vous ai fais un fichier

avec la source de ma BDD et le résultat attendu

j’espère vous pourrez m'aider je souhaite pas une liste déroulante un membre ma gentillement proposé y a quelque semaine sa c'est pas un soucis mais bien une liste comme dans l'onglet résultat

je vous remercie par avance pour mon petit centre de secours
 

Pièces jointes

  • TESTE.xlsx
    9.9 KB · Affichages: 50
  • TESTE.xlsx
    9.9 KB · Affichages: 45

creolia

XLDnaute Impliqué
Re : Trier à partir une base de donnée complex

Re coucou
c'est vrais hier soir j'ai poster mon message un peut tard vous l'avez peut être pas vue je refais un petit up pour mon problème ne voyer pas là une impatience juste être sur que mon message à été vue merci
 

Dugenou

XLDnaute Barbatruc
Re : Trier à partir une base de donnée complex

Bonjour,
Un essai en pj : l'extract est retravaillé dans un tableau placé à droite (tu peux ainsi coller ton nouvel extract à la place de l'ancien.
Formules matricielles (validées par ctrl+maj +enter puis recopiées) pour le résultat
Zone nommée ListeNom pour s'adapter à longueur du vrai tableau (menu formules/ gestionnaire de noms)

A ta disposition pour explications si besoin
 

Pièces jointes

  • creolia.xlsx
    16.4 KB · Affichages: 42
  • creolia.xlsx
    16.4 KB · Affichages: 42

creolia

XLDnaute Impliqué
Re : Trier à partir une base de donnée complex

Bonjour Degenou et merci pour ton aide précieuse que je vais m'empresser de regarder

pour pas faire le mec qui attend et ne sachant pas si j'aurais une réponse j'ai bricoler tant bien que mal quelque chose en chinant à droite à gauche

j'ai pût le faire pour une date
Code:
Dim NL As Long
NL = [Feuil1].Range("A" & Cells.Rows.Count).End(xlUp).Row + 1
With Sheets("source")
Sheets("RESULTAT").Range("B3:X100").Clear
For x = 2 To Feuil2.Range("B65536").End(xlUp).Row
If .Range("B" & x) = "M" Then Sheets("RESULTAT").Range("b65000").End(xlUp).Offset(1, 0) = .Range("A" & x)
If .Range("B" & x) = "A" Then Sheets("RESULTAT").Range("c65000").End(xlUp).Offset(1, 0) = .Range("A" & x - 1)
If .Range("B" & x) = "N" Then Sheets("RESULTAT").Range("d65000").End(xlUp).Offset(1, 0) = .Range("A" & x - 2)
Next
End With

je vous tiens au courant
 

Pièces jointes

  • TESTE3.xlsm
    19.6 KB · Affichages: 38
  • TESTE3.xlsm
    19.6 KB · Affichages: 30

creolia

XLDnaute Impliqué
Re : Trier à partir une base de donnée complex

Bonjour à tous par apport à ma macro j'ai pas très avancer malheureusement

en fait je suis bloquer là ou je doit appliquer cette macro aux autres jour du mois m'evitant à faire un copier coler de la macro pour chaque jour soit 31 jour maxi

un petit coup de main svp merci
 

creolia

XLDnaute Impliqué
Re : Trier à partir une base de donnée complex

Bonjour gosse lien merci pour le TCD j'avais déja tenter mais sur une un grand nombre de sapeur c'est pas gérable sachant que ce que je souhaite c'est que ce soit les nom qui s'affiche dans les dates savoir qie le 01/01/2016 le matin j'ai de dispo toto1 toto2 toto3 en un seul coup d'oeil mais merci tous de même
 

creolia

XLDnaute Impliqué
Re : Trier à partir une base de donnée complex

Re bonsoir oui je comprend ce que tu veux me dire mais 100 sap sur 31 jour il est plus simple pour moi que chaque jour je vois uniquement les personne inscrit le matin après midi et nuit. de plus c'est vrais je suis plus à l'aise avec les macro que les formules ou TCD mais merci tout de même je continue mes recherches bonne soirée
 

Dranreb

XLDnaute Barbatruc
Re : Trier à partir une base de donnée complex

Bonsoir.
Un essai comme ça :
VB:
Sub Test2()
Dim TE(), LE&, CE&, TS(), LS&, CS&, TLC&()
TE = Feuil2.UsedRange.Value
ReDim TS(1 To UBound(TE, 1) \ 3 + 1, 1 To UBound(TE, 2) * 3 - 2)
ReDim TLC(1 To UBound(TS, 2))
For LE = 2 To UBound(TE, 1)
   For CE = 2 To UBound(TE, 2)
      Select Case TE(LE, CE)
         Case "M": CS = CE * 3 - 5
         Case "A": CS = CE * 3 - 4
         Case "N": CS = CE * 3 - 3
         Case Else: CS = 0: End Select
      If CS > 0 Then
         LS = TLC(CS) + 1: TLC(CS) = LS
         TS(LS, CS) = TE(LE - (LE - 2) Mod 3, 1)
         End If: Next CE, LE
Feuil1.[B3].Resize(UBound(TS, 1), UBound(TS, 2)).Value = TS
End Sub
 

creolia

XLDnaute Impliqué
Re : Trier à partir une base de donnée complex

Bonjour Dranreb Génial sa fonctionne parfaitement sur mon fichier exemple en revanche sur mon fichier réel rien ne se passe et je me suis rendu compte que dans mon fichier exemple j'avais décaler 1 ligne c'est à dire que la liste des nom ne commence pas à la ligne 2 mais 3 en fais le tableau est decaler une ligne j'ai donc tenter à chercher ou se trouvais les zone à modifier et la j'ai que des débogage peut tu me dire ou sont les valeur à modifier svp merci
 

Pièces jointes

  • TESTE3-4.xlsm
    56.4 KB · Affichages: 38

Dranreb

XLDnaute Barbatruc
Re : Trier à partir une base de donnée complex

Bonjour.
Il manque déja toutes les déclarations:
VB:
Dim TE(), LE&, CE&, TS(), LS&, CS&, TLC&()
ou si vous préférez :
VB:
Dim TE(), LE As Long, CE As Long, TS(), LS As Long, CS As Long, TLC() As Long
ensuite effectivement si les données changent de place et ne sont toujours pas mises en forme de tableau, ça complique :
VB:
TE = Intersect(Application.Range(Feuil2.Rows(2), Feuil2.Rows(Feuil2.Rows.Count)), Feuil2.UsedRange).Value
 

creolia

XLDnaute Impliqué
Re : Trier à partir une base de donnée complex

Re bonjour
sa fonctionne parfaitement merci juste une toute dernière question après je vous laisse tranquille

au lieu de Feuil1 ou Feuil2 qui sont il me semble des nom de feuille système comment puis je remplacer ce nom par le véritable nom exemple Janvier car mon but étant de choisir le mois via un menu déroulant et qu'il devienne la source

exemple: Sheets("Janvier") au lieu de Feuil2
es ce possible svp merci
 

Dranreb

XLDnaute Barbatruc
Re : Trier à partir une base de donnée complex

Vous pouvez changer les noms des objets Worksheet de la rubrique Microsoft Excel Objets.
Je les change toujours en faveur d'un nom plus mnémonique.
Dans les macros ce sont ces noms là que je considère comme leurs véritables noms !
Et pas le texte volatile que l'utilisateur choisit de mettre au gré de sa fantaisie aux onglets des feuilles Excel que ces objets représentent !
Cependant si dans certains cas c'est strictement impossible de cerner la feuille autrement qu'en allant la chercher dans la collection Sheets, déclarez une variable par exemple FSource As Worksheet et initialisez la par Set FSource = ThisWorkbook.Sheets("Janvier")
 
Dernière édition:

creolia

XLDnaute Impliqué
Re : Trier à partir une base de donnée complex

Un grand merci pour votre patience et votre aide voila je l'ai modifier ainsi et tous fonctionne parfaitement bonne journée
Code:
Sub Test2()
Dim TE(), LE As Long, CE As Long, TS(), LS As Long, CS As Long, TLC() As Long, FSource As Worksheet, FeuilTemp As String
 FeuilTemp = Sheets("GARDE").Range("D2")
Set FSource = ThisWorkbook.Sheets(FeuilTemp)

TE = Intersect(Application.Range(FSource.Rows(2), FSource.Rows(FSource.Rows.Count)), FSource.UsedRange).Value
ReDim TS(1 To UBound(TE, 1) \ 3 + 1, 1 To UBound(TE, 2) * 3 - 2)
ReDim TLC(1 To UBound(TS, 2))
For LE = 2 To UBound(TE, 1)
   For CE = 2 To UBound(TE, 2)
      Select Case TE(LE, CE)
         Case "M": CS = CE * 3 - 5
         Case "A": CS = CE * 3 - 4
         Case "N": CS = CE * 3 - 3
         Case Else: CS = 0: End Select
      If CS > 0 Then
         LS = TLC(CS) + 1: TLC(CS) = LS
         TS(LS, CS) = TE(LE - (LE - 2) Mod 3, 1)
         End If: Next CE, LE
Sheets("Dispo").[B3].Resize(UBound(TS, 1), UBound(TS, 2)).Value = TS

End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 294
Messages
2 086 891
Membres
103 404
dernier inscrit
sultan87