Macro pour classement chronologique dans base de données

stoz

XLDnaute Junior
Bonjour à tous,
Je sollicite votre aide ce jour pour écrire une macro.

L'idée étant d'alimenter à partir d'un fichier source externe (placée dans un chemin spécifique, exemple : C/2011/Suivi... « Date ») une base de données jour par jour et de façon cumulative sans écraser les informations des jours précédents sur un autre fichier de centralisation.

J'aurais aimé trouver la macro qui me donnerait la possibilité :
- d'abord de classer sur la 3eme ligne (de l’exemple ci-joint) le premier jour extrait et d'y insérer la date en colonne "J" .
- Puis via la macro de venir y insérer sous la dernière journée J, les informations issue des extractions J+1 (avec inscription de cette nouvelle date en colonne "J") etc. etc... –
- Enfin idem Pour J+2 J+3 J+4...

Enfin l’idée étant de construire une base journalière sans en écraser les informations de la veille

Merci pour votre aide et retour à ce sujet.

PS : Je suis débutant à peine avec le langage VB.
 

Pièces jointes

  • Macro.xls
    14 KB · Affichages: 131
  • Macro.xls
    14 KB · Affichages: 139
  • Macro.xls
    14 KB · Affichages: 135

job75

XLDnaute Barbatruc
Re : Macro pour classement chronologique dans base de données

Bonjour stoz,

L'idée étant d'alimenter à partir d'un fichier source externe (placée dans un chemin spécifique, exemple : C/2011/Suivi... « Date ») une base de données jour par jour (...)

Ca c'est une bonne idée.

Et il est où ce fichier source ? On ne va quand même pas l'inventer :mad:

A+
 

stoz

XLDnaute Junior
Re : Macro pour classement chronologique dans base de données

Bonjour stoz,


Ca c'est une bonne idée.

Et il est où ce fichier source ? On ne va quand même pas l'inventer :mad:

A+

Ci joint le fichier source. Le chemin sur mon ordi sera le suivant C:\Prouctivity Follow up 2001\autres\Fichier source.xls

Merci pour votre aide
 

Pièces jointes

  • Fichier Source.xls
    15.5 KB · Affichages: 125
  • Fichier Source.xls
    15.5 KB · Affichages: 117
  • Fichier Source.xls
    15.5 KB · Affichages: 123

job75

XLDnaute Barbatruc
Re : Macro pour classement chronologique dans base de données

Re,

Merci pour le fichier source, il faut maintenant répondre à ces questions :

1) Qu'est-ce qui détermine qu'il faut copier le fichier source ?

a) Le pif de l'utilisateur ? Si oui, comment ne pas "oublier" de copier une date ?

b) Ou une macro évènementielle dans le fichier source (plus logique) ?

2) Pour une même date, les données du fichier source peuvent-elles être modifiées ?

Si oui, que faut-il faire sur le fichier de destination ? Supprimer les données précédentes ? Ne rien copier ?

A+
 

stoz

XLDnaute Junior
Re : Macro pour classement chronologique dans base de données

Re,

Merci pour le fichier source, il faut maintenant répondre à ces questions :

1) Qu'est-ce qui détermine qu'il faut copier le fichier source ?

a) Le pif de l'utilisateur ? Si oui, comment ne pas "oublier" de copier une date ?

b) Ou une macro évènementielle dans le fichier source (plus logique) ?

2) Pour une même date, les données du fichier source peuvent-elles être modifiées ?

Si oui, que faut-il faire sur le fichier de destination ? Supprimer les données précédentes ? Ne rien copier ?

A+


Bonsoir, pour répondre précisément aux interrogations :

1) Qu'est-ce qui détermine qu'il faut copier le fichier source ?

a) Le lancement par l'utilisateur (à sa demande) détermine la copie du fichier source un message d'alerte à l'ouverture du fichier centralisation pourrais être une alternative pour demander à l'utilisateur s'il faut activer la macro ou pas et donc copier le fichier source ou pas (message : "Souhaitez vous mettre à jour le document". Si ce dernier clic OUI alors éxecution de la macro si NON le message disparaît et la macro n'est donc pas activée).

La raison pour laquelle je ne souhaites pas passer en mode évennementiel réside sur le fait qu'une journée devra être reporter sans la macro. Le suivi mis en place devra être reporter chaque jour, et donc la journée du samedi (vu que nous ne travaillons pas le dimanche) devra à mon sens être recopier manuellement. J'espère avoir été clair sur l'explication

2) Pour une même date, les données du fichier source peuvent-elles être modifiées ?

Normalement il ne devrait y avoir qu'une seule extraction pour une même date. Mais afin de sécuriser cette éventuelle risque il faudrait Supprimer les données précédentes si le cas se présentait.

Petite précision sur la retranscription des dates devant apparaître dans le fichier de destination. En faite il s'agit de l'extraction de la journée J-1 et non J comme indiquée dans mon post (désolé)

Voilà en espérant avoir tant bien que mal avoir été plus explicite. Mon niveau actuel sur VB ne me permet en aucun cas d'imaginer pouvoir seul trouver la solution.
De nouveau merci pour votre aide
 

stoz

XLDnaute Junior
Re : Macro pour classement chronologique dans base de données

Re,

Merci, vous n'avez pas répondu à :



Mais tant pis, inch'Allah.

Je vous ferai la macro demain, ce n'est pas très compliqué :)

A+

Merci pour votre retour
Pour la question Comment ne pas oublier de copier une date, il faudrait peut être mettre une condition qui vérifie si la dernière date de la base de données copiée dans le fichier source n'est pas < à -2 de la date d'aujourd'hui.


PS : le nuit portant conseil je viens de penser à un détail très important.
Sachant que j'extrais et copie toujours le fichier source à la date J-1 (par exemple j'extrait le vendredi, je copie le fichier source de jeudi), sachant par ailleurs que je ne travail pas le samedi et dimanche (et par conséquent la journée du vendredi, samedi, dimanche ne seront que traité le lundi) est il envisageable de mettre une condition supplémentaire dans cette macro en lui spécifiant par exemple si dernière date copiée dans fichier source est un jeudi, alors et dans l'ordre et après avoir créé même chemin + 3 autres fichiers sources supplémentaires avec nom de fichier :
"source vendredi.xls", "source samedi xls","source dimache" de :
- copier d'abord le fichier "source vendredi.xls" avec date de recopie dans fichier de destination en J-3
- copier ensuite le fichier "source samedi.xls" avec date de recopie dans fichier de destination en J-2
- copier ensuite le fichier "source dimanche.xls" avec date de recopie dans fichier de destination en J-1

pour le reste des journées la recopie ne se fera qu'à partir du fichier source classique


Merci pour votre retour et aide fortement apprécié.
 

job75

XLDnaute Barbatruc
Re : Macro pour classement chronologique dans base de données

Bonjour stoz,

Cette histoire de vendredi, samedi, dimanche me paraît abracadabrante :rolleyes:

Du coup plus envie de me lancer là-dedans.

Revenez quand vous aurez une solution acceptable.

A+
 

job75

XLDnaute Barbatruc
Re : Macro pour classement chronologique dans base de données

Re,

Je vous fournis quand même une solution, mais je ne suis pas sûr qu'elle vous convienne.

Il y a 7 fichiers sources, un pour chaque jour de la semaine.

La macro est dans le Module1 (Alt+F11) du fichier Macro.xls.

Pour la tester facilement, enregistrez tous les fichiers dans le même répertoire (le bureau).

Par la suite vous mettrez dans la macro le chemin d'accès désiré.

Chaque fois que la macro est exécutée, tous les fichiers sources sont copiés :

Code:
Sub MAJ()
If MsgBox("Mettre à jour les données ?", 4) = 7 Then Exit Sub
Dim F As Worksheet, jour, chemin$, i As Byte, fichier$, dat As Date, tablo, plage As Range
Set F = ActiveSheet 'Sheets("Base de Données cumulative")
jour = Array("Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi", "Dimanche")
chemin = ThisWorkbook.Path & "\" 'C:\Productivity Follow up 2001\autres\ 'à adapter
Application.ScreenUpdating = False
Application.DisplayAlerts = False 'si un fichier est déjà ouvert
F.AutoFilterMode = False
On Error Resume Next
For i = 0 To UBound(jour)
  '---Ouverture de chaque fichier---
  fichier = jour(i) & ".xls" 'extension à adapter pour Excel 2007/2010
  Workbooks.Open chemin & fichier
  If Err Then MsgBox "Fichier " & fichier & " introuvable...": GoTo 2
  With Workbooks(fichier).Sheets(1)
    '---Etude du fichier---
    .AutoFilterMode = False
    dat = CDate(Trim(Replace(Replace(.[J1], "Date", ""), ":", "")))
    If Err Or Format(dat, "dddd") <> LCase(jour(i)) Then _
      MsgBox "Fichier " & fichier & " : date erronée...": GoTo 1
    tablo = .Range("A5:I" & .[A5].End(xlDown).Row)
    '---Suppression de la date et restitution sur F
    F.[J:J].Replace dat, "z"
    F.[J3:J65536].SpecialCells(xlCellTypeConstants, 2).EntireRow.Delete
    Err = 0
    Set plage = F.[A65536].End(xlUp)(2).Resize(UBound(tablo))
    If Err Then MsgBox "Fichier " & fichier & " : plage trop grande...": GoTo 1
    plage.Resize(, 9) = tablo
    plage.Offset(, 9) = dat
    '---Fermeture du fichier---
1   .Parent.Close False
  End With
2 Err = 0
Next
'---Tri sur les dates---
F.[A3:J65536].Sort Key1:=F.[J3], Order1:=xlAscending, Header:=xlNo
End Sub
A+
 

Pièces jointes

  • Macro(1).zip
    33.8 KB · Affichages: 89

stoz

XLDnaute Junior
Re : Macro pour classement chronologique dans base de données

Merci pour votre réponse et solution + TRES bon boulot.

En effet, après avoir testé la macro j'en arrive à une première remarque :

* La macro telle qu'elle est bâtie dans votre proposition considère qu'UN SEUL lancement devra se faire pour tous les jours de la semaine (puisque celle ci recopie toutes les journées)...en gros en une seule fois à la volée.
Dans mon cas précis c'est différent je vais devoir d'abord l'executer TOUS les jours. Exemple le mercredi je ne chercherais qu'à recopier que les informations du fichier source extrait pour la journée du mardi.
A l'exeption de la journée du vendredi, samedi et dimanche qui doivent être lancer (en même temps, un peu comme dans votre macro) si et seulement si la dernière journée copier dans mon fichier de destination est un jeudi.
Raison pour laquelle j'avais opté de créer un fichier source classic, + trois autres fichiers que serait vendredi, samedi et dimanche.
Ainsi le lundi dès retour au bureau la macro executera uniquement les trois fichiers sources (vendredi / samedi / dimanche).
Les autres jours de la semaine le seul fichier source classic (hors vendredi, samedi, dimanche) serait le pivot.

Si vous avez la solution cela m'arrangerait plus que fortement. Merci pour votre aide encore une fois fortement apprécié
 

job75

XLDnaute Barbatruc
Re : Macro pour classement chronologique dans base de données

Re,

Je vois que vous n'avez pas du tout compris :

La macro telle qu'elle est bâtie dans votre proposition considère qu'UN SEUL lancement devra se faire pour tous les jours de la semaine (puisque celle ci recopie toutes les journées)...en gros en une seule fois à la volée.

Vous pouvez lancer la macro n'importe quand.

Le fichier Macro.xls sera toujours mis à jour avec les dernières données des fichiers sources.

Et vous revenez à votre histoire de vendredi samedi dimanche...

A+
 

stoz

XLDnaute Junior
Re : Macro pour classement chronologique dans base de données

OK effectivement je n'ai peut être pas tout saisie.
Je vais tester cela lundi, pour extractions des journées du vendredi / samedi / dimanche.
Je vous tiendrais au courant
Remerciements pour votre aide précieuse, good job!!!
 

job75

XLDnaute Barbatruc
Re : Macro pour classement chronologique dans base de données

Re,

Je vais tester cela lundi, pour extractions des journées du vendredi / samedi / dimanche.

OK, bon courage, et j'espère que vous avez compris que si vos fichiers ne s'appelaient pas :

Lundi.xls, Mardi.xls...

mais par exemple :

Source lundi.xls, Source mardi.xls...

il faudrait écrire dans la macro :

fichier = "Source " & jour(i) & ".xls"

A+
 

stoz

XLDnaute Junior
Re : Macro pour classement chronologique dans base de données

Re,



OK, bon courage, et j'espère que vous avez compris que si vos fichiers ne s'appelaient pas :

Lundi.xls, Mardi.xls...

mais par exemple :

Source lundi.xls, Source mardi.xls...

il faudrait écrire dans la macro :

fichier = "Source " & jour(i) & ".xls"

A+

Merci effectivement la remarque est pertinente, j'y ferais attention dès lundi.

J'ai néanmoins une question. Quel est l'esprit du message qui apparaît "Fichier : Date erronnée.." svp?

pour être honnête avec vous j'ai lancer la macro pour les journées logiquement jusqu'au 10/03/2011.
J'ai voulu généré un nouveau fichier "bidon" avec des valeurs différentes la journée du jeudi...histoire de voir s'il allait remplacer les chiffres du jeudi que j'avais modifié.
En lançant la macro j'ai un message d'erreur "Fichier : Date éronnée..."

Merci pour cette précision.
 

job75

XLDnaute Barbatruc
Re : Macro pour classement chronologique dans base de données

Quel est l'esprit du message qui apparaît "Fichier : Date erronnée.." svp?

L'instruction :

dat = CDate(Trim(Replace(Replace(.[J1], "Date", ""), ":", "")))

étudie la cellule J1 du fichier source, supprime "Date" , ":" et les espaces.

Puis convertit le résultat en date.

Le test :

If Err Or Format(dat, "dddd") <> LCase(jour(i)) Then

entraine le message qui suit si la conversion en date a échoué, ou si la date obtenue ne correspond pas au jour de la semaine étudié.

C'est juste un contrôle de sécurité, au cas où le fichier source serait géré par un rigolo :)

A+
 

Discussions similaires

Statistiques des forums

Discussions
312 489
Messages
2 088 857
Membres
103 979
dernier inscrit
bderradji