Programme en VBA pour récuperer des données et les filtrer

Bonjour,

Je suis nouveau sur ce forum. Je suis en stage pour valider mon DUT GEII dans une entreprise qui produit des sièges automobile

Débutant en VBA aussi je n'arrive pas a faire grand chose.

Mon travail a effectuer :

Il y a 4 lignes de production, Siege Avant Droit, Siege Avant Gauche, Siege Arriere T91 et Siege arriere T92.

Tous les jours les automates enregistre un fichier Excel sur lequel figure les défauts et le temps d'arrêts de la ligne.

Le fichier se presente comme cela :

DATE/TIME | DURATION | NUMBER | MESSAGE TEXT

Moi ce qu'il faudrait je fasse c'est un programme en VBA qui lui affiche 4 boutons différents.

A l'appui par exemple de SIEGE AVANT GAUCHE, le programme ouvre une petite fenêtre me demande de quelle date à quelle date je veux et de quelle heure à quelle heure et ensuite via le chemin du dossier il ouvre le bon fichier excel et affiche sous la forme quelconque les erreurs pour la date et l'heure choisis.

J'ai réussi a faire un raccourci ctrl+z pour qu'il récupere directement le fichier et le copie mais je n'arrive pas la suite...

Si quelqu'un pourrait m'aider .. SVP

Merci, désolé si j'ai fais des fautes..

Donne nous un exemple de fichier source

Je n'apprécie pas PSA, la 308, donc je ne sais pas si je répondrai

Bon maintenant, il y a des accros à cette marque.

P:\COMMUN\Automates\S1SAVD\WINCC_Alarms\140423_alarm.csv

Je suis novice donc je n'ai pas trouvé le moyen d'inserer un fichier exemple désolé


Date Time Duration Status Number Message text

23.04.2014 11:33:02 00:00:00 + 228 E178_CAV_fonction non achevée

23.04.2014 11:33:02 00:34:05 Quit-System 228 E178_CAV_fonction non achevée

23.04.2014 11:32:28 00:00:19 - 226 E130_DAV_fonction non achevée

23.04.2014 11:32:12 00:00:00 + 424 E420__Msg_H_Dépassement du temps d´émission

23.04.2014 11:32:12 00:00:00 + 425 E421__Msg_H_Dépassement du temps de réception

23.04.2014 11:32:12 00:00:10 Quit-System 425 E421__Msg_H_Dépassement du temps de réception

23.04.2014 11:32:12 00:00:10 Quit-System 424 E420__Msg_H_Dépassement du temps d´émission

23.04.2014 11:32:09 00:00:00 + 226 E130_DAV_fonction non achevée

23.04.2014 11:32:09 00:01:10 Quit-System 226 E130_DAV_fonction non achevée

23.04.2014 11:32:06 00:00:03 - 425 E421__Msg_H_Dépassement du temps de réception

23.04.2014 11:32:06 00:00:03 - 424 E420__Msg_H_Dépassement du temps d´émission

23.04.2014 11:32:02 00:00:00 + 424 E420__Msg_H_Dépassement du temps d´émission

23.04.2014 11:32:02 00:00:00 + 425 E421__Msg_H_Dépassement du temps de réception

23.04.2014 11:32:02 00:39:03 Quit-System 425 E421__Msg_H_Dépassement du temps de réception

23.04.2014 11:32:02 00:39:03 Quit-System 424 E420__Msg_H_Dépassement du temps d´émission

23.04.2014 11:31:55 00:38:56 - 425 E421__Msg_H_Dépassement du temps de réception

23.04.2014 11:31:55 00:38:56 - 424 E420__Msg_H_Dépassement du temps d´émission

23.04.2014 11:31:55 00:32:09 - 205 E108_CAV_SQ19.3 boite de Kitting non évacuée

23.04.2014 11:31:50 00:00:51 - 226 E130_DAV_fonction non achevée

23.04.2014 11:30:59 00:00:00 + 226 E130_DAV_fonction non achevée

23.04.2014 11:30:59 00:31:15 Quit-System 226 E130_DAV_fonction non achevée

23.04.2014 11:30:19 00:30:35 - 226 E130_DAV_fonction non achevée

23.04.2014 11:14:11 00:00:10 - 220 E123_CAV_palette bloquée sur BQ13.1

23.04.2014 11:14:03 00:00:05 - 209 E112_CAV_Palette bloquée sur YV11.4

23.04.2014 11:14:01 00:00:00 + 220 E123_CAV_palette bloquée sur BQ13.1

23.04.2014 11:14:01 04:27:08 Quit-System 220 E123_CAV_palette bloquée sur BQ13.1

Le fichier se présente sous cette forme ci, ce qui m'interesse c'est la durée des erreurs les linges avec le " - " . Comme expliqué avant il faut je filtre par rapport a une saisie de date et d'heure ses erreurs

Personne pour me répondre ?

Re-Salut

joindre un fichier

Cordialement.

Salut,

L'onglet ajouts des fichiers joints était caché.. C'est le PC de l'entreprise qui date..

Enfin voilà,

Le fichier joint c'est le fichier de base. Il est enregistré par l'automate tous les jours il y en a plusieurs dans plusieurs dossiers.

En feuil1, le bouton tri effectue un tri sur la valeur "-" de l'autre feuille.

Je te laisse adapter.

56fichier-source.xlsm (66.10 Ko)
zarik a écrit :

En feuil1, le bouton tri effectue un tri sur la valeur "-" de l'autre feuille.

Je te laisse adapter.

Merci de ta réponse, ce que tu as fais j'ai déà reussi a le faire. Mon plus gros problème est d'ouvrir le bon fichier en fonction de la date qu'on rentre sur l'userform.

Cordialement

Bonjour,

personne pour m'aider ?

Cordialement

Salut,

Tu nous fournis un fichier exemple, c’est une chose, mais comme tu le dis, encore faut-il ouvrir le bon fichier.

Donc, si je comprends bien, tu as plusieurs fichiers à disposition et tu voudrais depuis un fichier de base pouvoir aller chercher des informations dans d’autres fichiers.

Appelons donc le fichier dans lequel se trouverait la macro à créer ‘Fichier Cible’ et les fichiers dans lesquels se trouvent les informations ‘Fichiers Source’.

L’idéal serait que ton arborescence soit organisée de la manière suivante : Dans un dossier de base devraient se trouver ton ‘Fichier Cible’ et tous les fichiers source (éventuellement placés dans des sous-dossiers si nécessaire). Question 1) Est-ce qu’une telle arborescence est déjà en place ou envisageable ?

Question 2) Comment se nomment tes fichiers source ? Ont-ils une dénomination (une partie de leur nom) commune ?

Question 3) Une date apparaît-elle dans le nom des fichiers source ? (L’idéal serait de me fournir 2 ou 3 exemples de ces noms de fichiers).

Question 4) Dans un fichier source, peux-tu avoir des données concernant plusieurs jours ou un seul jour à chaque fois ?

A te relire.

Salut,

Déjà merci pour ta réponse.

Alors je m'explique, mes fichiers source (.csv) sont sur le chemin suivant "P:\COMMUN\Automates\S1SAVG\WINCC_Alarms".

Dans le dossier Automates il y a plusieurs sous dossier pour les sièges gauche, droit, arrières et arrière1. Dans chacun de ces sous dossiers ce trouve des fichiers .csv dans lesquels on retrouve les codes erreurs. Je joint quelques photos.

Le nom des fichiers source est AAMMJJ_alarm, donc il y a bien une partie commune c'est "_alarm". Chaque fichier est donc nommé par la date par exemple pour le Lundi 28 Avril le fichier est 140428_alarm.

Malheureusement, dans le fichier source d'une date on retrouve des dates antérieures. J'ai demandé à l'automatistien d'essayer de modifier cela mais pour l'instant il y a bien plusieurs date dans un fichier. Donc autrement dit dans le fichier 140428_alarm celui du 28 Avril 2014 on retrouve les codes erreurs du 25, 24, 23 Avril...

J'ai déjà reussi a réaliser un bouton qui me demande de rentrer la date et il ouvre le bon fichier csv en fonction de la date rentré.

Mais ensuite pour filtrer dans ce fichier et récuperer que la date réellement souhaité je n'arrive pas ni faire un graphique ou tableau...

Cordialement,

Almir Kadic

Merci beaucoup !

1 2

Re,

On avance gentiment.

Je vois que dans ton dossier de base ‘Automates’, tu as des sous-dossiers ‘S1SAVG’, etc., ainsi que des sous-sous-dossiers comme ‘WINCC_Alarms’.

Est-ce que tous les fichiers à visiter se trouvent systématiquement dans des sous-sous-dossiers ou en partie dans les sous-dossiers et en partie dans les sous-sous-dossiers ? S’ils se trouvent systématiquement dans des sous-sous-dossiers, est-ce que tous les fichiers à visiter se trouvent dans un seul et unique sous-sous-dossier ou est-ce qu’ils peuvent se trouver dans plusieurs sous-sous-dossiers ?

Est-ce que tous les sous-sous-dossiers placés dans les sous-dossiers ‘S1SAVG’, etc. portent les mêmes noms ou est-ce que tous les sous-dossiers ‘S1SAVG’, etc. comportent des sous-sous-dossiers avec des noms à chaque fois différents ?

Tu dis avoir déjà commencé à réaliser un bouton ; afin que je ne refasse pas le même travail que toi, se serait peut-être intéressant que tu me fournisses ce fichier, non ?

A te relire.

Salut,

Déjà merci de ta réponse.

Dans le dossier automate j’ai plusieurs sous dossiers, qui correspondent aux sièges avant gauche et droit.

Ensuite dans chaque sous dossier par exemple ‘S1SAVG’ j’ai un sous dossier WINCC_Alarms dans lequel j’ai mes fichier csv..

AUTOMATES ==> S1SAVD ==> WINCC_Alarms ==> ‘AAMMJJ_alarm.csv’

==> S1SAVG ==> WINCC_Alarms ==> ‘AAMMJJ_alarm.csv’

Donc dans chaque sous dossier S1SAVD il y a le meme sous sous dossier WINNC_Alarms mais le contenu est évidement différent.

20test1.zip (20.45 Ko)
5 6

Salut,

J’ai encore avancé avec ton fichier. Ce n’est pas encore ce que tu désires, mais il me semble que l’on va dans la bonne direction.

J’ai simulé chez moi une arborescence dans laquelle j’ai un dossier ‘Automates’ dans lequel se trouvent mon fichier ‘Base’ ci-joint ainsi que 4 sous-dossiers ‘S1SAVD’, ‘S1SAVG’, ‘XXX_D’ et ‘XXX_G’ (je n’ai effectivement pas très bien compris comment s’appellent tes deux dernières lignes).

J'ai modifié le code de manière à ce que le dossier 'Automates' puisse se trouver n'importe où dans ton arborescence (ou dans la mienne ) sans que ça crée de problème.

Dans chacun des sous-dossiers nommés ci-dessus, j’ai un sous-sous-dossier nommé à chaque fois ‘WINCC_Alarms’, sous-sous-dossiers dans lesquels se trouvent des fichiers nommés selon tes indications (donc des fichiers du genre AAMMJJ_alarm.cvs).

Si j’ouvre le fichier ‘Base’ et que je clique sur le bouton en place sur la feuille ‘Base’, je dois indiquer si je veux ouvrir un fichier se trouvant dans le sous-dossier ‘S1SAVD’, ou dans le sous-dossier ‘S1SAVG’, ou ‘XXX_D’ ou ‘XXX_G’ ainsi que la date du dossier désiré au format AAMMJJ.

Si le fichier indiqué n’existe pas, un message d’erreur l’indique.

Autrement le fichier désiré est ouvert d’une manière invisible, la feuille active lors de l’ouverture est copiée et collée dans le fichier ‘Base’ et renommée - selon le nom du sous-dossier et du nom du fichier visité - et le fichier source est à nouveau refermé.

A chaque nouveau clic sur le bouton ‘Report’, les anciennes feuilles sont effacées.

Merci de tester tout ça chez toi.

Si tout ceci fonctionne comme ça fonctionne chez moi, on pourra voir si d’autres données sur d’autres fichiers sont également nécessaires à exporter (tu m’avais dit que les données d’un jour quelconque pouvaient se trouver sur le fichier du jour précis ainsi que sur un ou deux fichiers des jours suivants) et de quelle manière on pourra exploiter toutes les données ainsi exportées.

Je trouve effectivement plus simple d’exporter au préalable d’une manière brute toutes les données nécessaires à réaliser tes souhaits, plutôt que de travailler sur les données des fichiers-source alors qu’ils sont provisoirement ouverts.

A te relire.

23base.zip (20.48 Ko)

Salut,

Déjà merci beaucoup pour ce que tu as fait. Désolé de répondre si tard j'ai eu un weekend chargé en problème..

J'ai récupéré ton fichier mais chez moi il ne fonctionne pas, il n'ouvre pas de fichier, lorsque je rentre la date AAMMJJ il me dis "Le dossier ou le fichier n'existe pas" ..

Je pense que c'est le chemin qui n'est pas bon pour moi, car tu me dis peut importe ou se trouve le dossier "Automates" sauf que moi il est sur un autre serveur et pas sur mon PC..

Le petit programme que j'avais fait il ouvrait le bon fichier avec le chemin que j'avais mis j'ai essayé de le mettre dans ton programme et je n'arrive pas a faire fonctionner.

page = InputBox("Entrer la date AALMMJJ: ", "Sélection par date")
Chemin = "P:\COMMUN\Automates\S1SAVG\WINCC_Alarms" & "\"

Part = page
Chem2 = Dir(Chemin & "\" & Part & "*.csv")

Workbooks.Open Filename:=Chemin & "\" & Dir(Chemin & "\" & Part & "*.csv")

Avec ce programme j'ai réussi l'ouverture.

Merci

Salut,

Mon code relève le chemin du fichier dans lequel se trouve la macro et le réutilise pour trouver les autres fichiers. Donc si tu as placé le fichier ‘Base’ que je t’ai fourni dans le dossier ‘Automates’ et les sous-dossiers 'S1SAVD', ‘S1SAVG’, ou ‘XXX_D’ ou ‘XXX_G’ dans le même dossier ‘Automates’, c’est impossible que ma macro ne fonctionne pas.

Dans l’image ci-dessous, tu vois que j’ai placé mon dossier ‘Automates’ à un endroit quelconque de mon arborescence ("C:\Users\lacy\Documents\"), avec tous les sous-dossiers et le fichier ‘Base’.

capture

Avec la variable ‘Chemin’, je reconstruis le chemin de chacun des fichiers à ouvrir en combinant le chemin de base trouvé ci-dessus par l’instruction ‘ThisWorkbook.Path’, puis j’y ajoute un signe \ , la variable ‘Référence_Ligne’ qui vient de l’UserForm dans lequel tu as dû choisir l’une des 4 lignes possibles, j’y ajoute un signe \ et le nom des sous-sous-dossiers toujours identique (‘WINCC_Alarms’) et un dernier signe \ qui fait encore la séparation avec le nom du fichier à ouvrir et dont la référence est construite dans la ligne suivante ‘Fichier_à_ouvrir = ……..’

capture 2

Si tu as placé tes sous-dossiers, tes sous-dossiers et tes fichiers à visiter dans le dossier ‘Automates’, si tu as placé mon fichier ‘Base’ dans le même dossier ‘Automates’, si tu as des noms de sous-dossiers qui correspondent bien aux noms visibles dans le UserForm qui te permets de choisir une des 4 lignes (ces dénominations sont reprises dans la macro, il faut donc éventuellement modifier le nom de tes sous-dossier – du moins pour faire les essais – selon mes dénominations), si tu as bien dans tes sous-sous-dossiers ‘WINCC_Alarms’ des fichiers dont le nom commence exactement par la date inscrite dans l’autre UserForm qui s’ouvre en cours de macro et que le nom de ces fichiers se termine bien par ‘_alarm.csv’, c’est impossible que ça ne fonctionne pas.

Mais attention, une seule inexactitude dans cette chaine et ça ne jouera pas.

almir25 a écrit :

Avec ce programme j'ai réussi l'ouverture.

Que veux-tu dire par là ? Qu’avec ce code, tu arrivais à ouvrir des fichiers sur ton ancien fichier ou tu as placé ce bout de code dans mon fichier ‘Base’ ? On pourrait croire en lisant cette phrase que tu m’indiques que tu as réussi à résoudre tes problèmes toi-même et que tu n’as plus besoin d’aide. Qu’en est-il exactement ?

A te relire.

Salut,

Non non je n'ai pas reussi a fair tous seul. Je me suis mal exprimé.

Enfaite je n'ai pas mis le fichier base dans le dossier automate c'est pour ça. Parcque je n'ai pas les droits.

Je te redis demain alors.

Merci beaucoup a toi

Salut,

J'ai reussi a mettre le programme dans le dossier Automate, et cela fonctionne mais juste un problème, cela m'ouvre bien le fichier etc mais il ne copit que la colonne A, pas le reste. Je regarde cherche pour copier les colonnes de A a E.

Ensuite, il faudrait que ça copit que pour la date entrer donc par exemple je rentre 140505 il ouvre bien le bon fichier mais dedans il y a plusieurs date.

Merci beaucoup

Re,

j'ai réussi a copier toutes les colonnes avec ce code :

Union(Columns(1), Columns(2), Columns(3), Columns(4), Columns(5)).Copy

Merci beaucoup.

Maintenant il me faudrait filtrer la feuille ouverte pour qu'il n'y ai que la date souhaité et que les " - " dans la colonne C et faire un tableau dynamique croisé ou autre..

Merci

Rechercher des sujets similaires à "programme vba recuperer donnees filtrer"