Macro d'automatisation d'ouverture, d'enregis

Résolu/Fermé
Dim83 - 20 mai 2011 à 19:25
Dim83 Messages postés 18 Date d'inscription samedi 21 mai 2011 Statut Membre Dernière intervention 28 mai 2011 - 24 mai 2011 à 00:01
Bonjour,
je dois faire du traitement de données d'expérience sous excel 2010et j'aimerais automatiser la manip.

ma macro doit ouvrir un premier fichier A.DAT en m'ouvrant la fenêtre de dialogue "Ouvrir"
y récupérer le contenu de quelques cellules et les recopier dans la feuille qui sert de modèle pour traiter les données,
refermer le fichier A.DAT,
puis ouvrir un deuxième fichier BA1.DAT (qui se trouve dans un autre répertoire :"dossier de données" ) pour y récupérer des données à copier dans le modèle
puis fermer le fichier BA1,
ouvrir un fichier "modèle résultats" ( que je dois avoir ouvert au préalable j'imagine) pour y coller un récapitulatif des résultats
enregistrer ceux-ci sous le nom du fichier "B" "résultats" avec l'extension XLS cette fois-ci (expl: B_résultats.xls),
refermer et recommencer l'opération avec le fichier BA"et un chiffre entre 1 et 27".DAT suivant dans le répertoire (expl: BA3.DAT ; BA21.DAT ; BA12.DAT) et ainsi de suite tant qu'il y a des fichiers BA"et un chiffre entre 1 et 27".DAT dans le répertoire , sinon revenir au début de la macro jusqu'à ce que tous les fichiers .DAT du répertoire :"dossier de données"soit traités.

Suis-je claire ? Pouvez-vous m'y aider ?
Je précise que je n'y connais rien en programmation que ce soit VBA ou n'importe quel autre langage.

Je vous donne ce que j'ai réussi à faire grâce à l'enregistreur de macro et quelques modifs avec ce que j'ai trouvé sur le net :

Sub recup_val()
'
' recup_val Macro
'
' Touche de raccourci du clavier: Ctrl+Shift+C
Application.ScreenUpdating = False

ChDir ("D:\Mes documents\Cours master 1\mémoire2\dossier de traitement des données brutes\fichiers de données brutes")

Application.Dialogs(xlDialogOpen).Show



Range("AB1:AE2").Select
Selection.Copy
Windows("modèle condition 2 données brut.xlsm").Activate
Range("A1").Select
ActiveSheet.Paste
Windows("modèle condition 2 données brut.xlsm").Activate

ChDir ("D:\Mes documents\Cours master 1\mémoire2\dossier de traitement des données brutes\condition 2")

Application.Dialogs(xlDialogOpen).Show

Range("A2:C7").Select
Range(Selection, Selection.End(xlDown)).Select
Application.CutCopyMode = False
Selection.Copy
Windows("modèle condition 2 données brut.xlsm").Activate
Range("A8").Select
ActiveSheet.Paste
Range("A7:A8").Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlMedium
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlMedium
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlMedium
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlMedium
End With
Selection.Borders(xlInsideVertical).LineStyle = xlNone
Range("B7:B8").Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlMedium
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlMedium
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlMedium
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlMedium
End With
Selection.Borders(xlInsideVertical).LineStyle = xlNone
Range("C7:C8").Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlMedium
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlMedium
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlMedium
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlMedium
End With
Selection.Borders(xlInsideVertical).LineStyle = xlNone
Range("B9").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlMedium
End With
Selection.Borders(xlEdgeBottom).LineStyle = xlNone
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
Selection.Borders(xlInsideVertical).LineStyle = xlNone
Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlMedium
End With
Selection.Borders(xlEdgeBottom).LineStyle = xlNone
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
Selection.Borders(xlInsideVertical).LineStyle = xlNone
Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
Range("C9").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlMedium
End With
Selection.Borders(xlEdgeBottom).LineStyle = xlNone
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
Selection.Borders(xlInsideVertical).LineStyle = xlNone
Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
Range("A9").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlMedium
End With
Selection.Borders(xlEdgeBottom).LineStyle = xlNone
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
Selection.Borders(xlInsideVertical).LineStyle = xlNone
Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
Range("V7").Select
End Sub


Sub sauv_traitement()
'
' sauv_traitement Macro
'
' Touche de raccourci du clavier: Ctrl+Shift+S
'
Range("A9:C9").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Workbooks.Open Filename:= _
"D:\Mes documents\Cours master 1\mémoire2\modèles\modèle feuille de résultats condition 2.xlsx"
Range("B9").Select
ActiveSheet.Paste
Windows("modèle condition 2 données brut.xlsm").Activate
Range("R11:W11").Select
Range(Selection, Selection.End(xlDown)).Select
Application.CutCopyMode = False
Selection.Copy
Windows("modèle feuille de résultats condition 2.xlsx").Activate
Range("F11").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows("modèle condition 2 données brut.xlsm").Activate
Range("R7:U7").Select
Application.CutCopyMode = False
Selection.Copy
Windows("modèle feuille de résultats condition 2.xlsx").Activate
Range("E6").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows("modèle condition 2 données brut.xlsm").Activate
Range("Y6:Y8").Select
Application.CutCopyMode = False
Selection.Copy
Windows("modèle feuille de résultats condition 2.xlsx").Activate
Range("K4").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows("modèle condition 2 données brut.xlsm").Activate
Range("V9").Select
Application.CutCopyMode = False
Selection.Copy
Windows("modèle feuille de résultats condition 2.xlsx").Activate
Range("K7").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False


CommandBars.FindControl(ID:=748).Execute


End Sub

Sub macro_Condition_2()
Application.ScreenUpdating = False
Application.Run "recup_val_croix"
Application.Run "sauv_traitement"

End Sub


Merci ...
A voir également:

18 réponses

Syzygy Messages postés 378 Date d'inscription vendredi 29 avril 2011 Statut Membre Dernière intervention 31 décembre 2011 142
21 mai 2011 à 00:20
Bonjour,

J'ai lu votre post mais je souhaiterait avoir quelques compléments d'information :
- Pourquoi vos fichiers sont au format ".dat". S'agit-il de fichier Excel dont l'extension a été tronquée?

- Les fichiers auxquels vous accédez sont-ils tous structurés de la même manière?(par ex : les données contenues en A1 dans le fichier BA1.dat se trouvent en A1 dans le fichier BA2.dat etc...)?

- Vos fichiers seront-ils systématiquement situé dans le même répertoire ou est-il possible que vous les déplaciez par la suite ?

De plus, si vous pouviez mettre des exemples de vos fichiers sur http://www.cijoint.fr/ nous pourrions vous aider plus efficacement.

Bonne soirée.
0
Bonjour,
tout d'abord, merci de bien vouloir m'aider.
- Mes fichiers sont au format DAT car le logiciel qui récupère ces données des capteurs les enregistre dans ce format.
- Les fichiers sont tous structurés de la même manière effectivement.
- J'ai organisé mes fichiers par type de traitement et par sujet, car il s'agit de données d'expériences avec 10 sujets dans 4 conditions différentes (mais je ne traite que 3 de ces conditions). J'aimerais que les résultats soient enregistrés dans un dossier résultat.
Je vais essayer de joindre une capture de mon arborescence.
j'utilise une feuille excel comme modèle pour traiter les données recueilli et une autre pour y coller les résultats dont j'ai besoin pour une future analyse.
- les 1ères données je les récupères dans un des fichiers sujet situé dans : "fichiers de données brutes"
- les autres données dont j'ai besoin sont dans les fichiers d'essais sujets organisé par conditions et par sujet (entre 2 et 4 essais par condition par sujet), les 1ères données recueilli dans le fichier de données brute changeant pour chaque sujet mais sont les mêmes pour chaque essais d'un même sujet.
J'espère être claire.
Je vais essayer de mettre un fichier de chaque en ligne.
désolé mais je n'arrive pas à m'inscrire sur le site http://www.cijoint.fr/
0
Syzygy Messages postés 378 Date d'inscription vendredi 29 avril 2011 Statut Membre Dernière intervention 31 décembre 2011 142
21 mai 2011 à 09:53
Bonjour,

Il ne vous est pas nécessaire de vous inscrire sur http://www.cijoint.fr/ pour déposer vos fichiers. Toutefois le format .dat n'étant pas accepté, veillez à placer ces fichiers dans une archive .zip (au cas où vous ne sauriez pas le faire : Clic-droit sur le fichier, envoyer vers, dossier compréssé).

Pouvez-vous également m'indiquer le chemin d'accès complet de vos fichiers ? (C:\...\monfichier.dat). La macro devant acceder à plusieurs répertoires, il serait également pratique d'avoir une vision d'ensemble de votre arborescence.

Je vous avoue que j'ai un peu de mal à visualiser la chose mais avec vos fichiers cela devrait éclairer ma lanterne.

Bonne journée
0
Dim83 Messages postés 18 Date d'inscription samedi 21 mai 2011 Statut Membre Dernière intervention 28 mai 2011
21 mai 2011 à 10:45
je réédite mon message car je ne le vois pas s'afficher.
j'ai réussi à faire un fichier zip et le déposer su cijoint.fr :

http://www.cijoint.fr/cjlink.php?file=cj201105/cijQUlZYaG.zip

D:\Mes documents\Cours master 1\mémoire2\dossier de traitement des données

brutes\fichiers de données brutes
(sachant que là il faut qu'une fenêtre s'ouvre pour me demander de choisir

dans le dossier "fichiers de données brutes" le fichier à ouvrir)

D:\Mes documents\Cours master 1\mémoire2\dossier de traitement des données

brutes\condition 2\ 2cl
(sachant que là il faut qu'une fenêtre s'ouvre pour me demander de choisir

dans le dossier "condition 2" le sous dossier et le fichier à ouvrir)

D:\Mes documents\Cours master 1\mémoire2\résultats\condition 2
(dossier où enregistrer les résultats de traitement des essais en

condition 2)

j'espère avoir été claire....

Merci encore pour votre aide
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Syzygy Messages postés 378 Date d'inscription vendredi 29 avril 2011 Statut Membre Dernière intervention 31 décembre 2011 142
21 mai 2011 à 11:41
Ok je vois un peu mieux la chose. Juste pour avoir une confirmation :

- Vous travaillez sur un Excel français ou anglo-saxon? (Dans le premier cas, il faudra ajouter une étape supplémentaire pour convertir les données brut en nombre qui sont au format texte)

- Vous ne voulez récupérer que le contenu des 3 premières colonnes du fichier de données brutes (en.dat) ?

- Le nombre de point sera toujours de 1500 ou pourra-t-il varier ?

- Il serait plus pratique d'avoir un seul est unique fichier pour le traitement des données brutes (dans la mesure où tous les fichiers .dat sont structurellement identiques). Si les différents critères pouvez être stocké dans une base de données Excel, vous pourriez sélectionner le critère que vous souhaitez appliquer, traiter les données en conséquences et afficher les résultats avec un unique fichier.
Dans ce cas de figure la programmation serait énormément simplifiée, il ne devrait même plus avoir besoin de recourir au VBA pour réaliser ce que vous souhaitez et si des modifications sont à apporter un jour, vous n'aurez besoin de modifier qu'un seul fichier.

Si le dernier point ne vous semble pas très clair (ce que je comprendrai parfaitement), fournissez-moi la référence des zones de critères dans votre fichier "modèle condition 2 données brut" (je dirais qu'il s'agit des sélections "A1:D2" "F4:M6", "R7" et "T7"). Je vous présenterai une première solution.

Bien à vous
0
Dim83 Messages postés 18 Date d'inscription samedi 21 mai 2011 Statut Membre Dernière intervention 28 mai 2011
Modifié par Dim83 le 21/05/2011 à 16:55
Merci beaucoup de vous intéresser à mon cas.

je vais essayer de répondre correctement à chaque questions dans l'ordre.

je travaille sur Excel 2010 pack étudiant en français
effectivement quand je lance la macro tel-quel, l'assistant d'importation de texte s'ouvre; sinon tout marche à peu près mais ce n'est pas optimisé. pour l'enregistrement du fichier résultats c'est pas automatique du tout.

je vais essayer de vous expliquer ce qu'on fait des ces différents fichiers DAT et d'où ils viennent peut-être que ce sera plus claire.

dans le fichier de données brutes se trouve l'ensemble des essais d'un même sujet mais il manque les données d'étalonnage des capteurs et la taille du sujet, c'est pourquoi je fais un premier traitement de ce fichier pour filtrer et déterminer les données de mesures que je garde et les sauvegarde dans des fichiers DAT, un pour chaque essai. pour ça, je me sers d'un programme en Delphi fourni par le fabricant de la carte d'acquisition.
c'est pourquoi j'ai besoin d'organiser les fichiers pour la suite des traitements qui dépendent des conditions expérimentales de chaque essai.

dans le fichier de données brut, je récupère ce qui est invariant pour chaque essai par sujet à savoir ce qui se trouve en AB1:AE2

je travaille uniquement sur 1500 valeurs qui correspondent à 30 secondes d'un essai (50 hertz) ce qui donne 1500 point.

pour la dernière question, je ne comprends pas ce que vous entendez par zones de critères, mais "F4:M6" servent uniquement à calculer la position d'un point dans un repère par rapport à un autre repère, çà change en fonction des conditions mais je les entre manuellement une fois pour toute dans la feuille modèle.

voilà j'espère que ça vous a aidé.
encore merci pour votre aide
0
Syzygy Messages postés 378 Date d'inscription vendredi 29 avril 2011 Statut Membre Dernière intervention 31 décembre 2011 142
21 mai 2011 à 17:06
Ok merci pour ces précisions. Je cerne mieux votre besoin et après avoir repris tout vos postes, il va effectivement falloir recourir a un peu de programmation pour faire tout cela.

Je résume l'algorithme, pour être sur de bien comprendre :

1) Récupérer le contenu "AB1:AE2" d'un premier fichier .dat sélectionné dans le répertoire "fichiers de données brutes" et le placer en "A1:D2" dans un fichier Excel "modele condition donnees brut.xlsm"

2) Récupérer le contenu "A2:C1503" d'un premier fichier .dat (dont le modèle correspont à celui que vous m'avez envoyé ce matin) dans le répertoire "Condition 2\2cl", le placer en "A9:C1510"

3) Appliquer des formules à ces données et présenter les résultats selon le modèle du fichier "Modele feuille de resultats condition 2.xlsx"

4) Enregistrer la feuille de résultat dans un nouveau fichier situé dans le répertoire
"Résultats\Condition 2\2cl" sous le nom de "Resultat_NomdufichierDAT.xls"

5) Répeter l'opération pour tous les fichiers .dat contenu dans le répertoire "Condition 2\2cl". Lorsque tous les fichiers de ce répertoire sont traités, passer au suivant "Condition 2\2cs" et répeter l'opération à partir du point 1)

6) Une fois le répertoire condition 2 traité, revenir au point 1 et répeter l'opération avec le répertoire "Condition 3" puis le répertoire "Condition 4"

J'espère avoir bien compris votre besoin, je me lance et vous envoie un premier fichier.
0
Dim83 Messages postés 18 Date d'inscription samedi 21 mai 2011 Statut Membre Dernière intervention 28 mai 2011
Modifié par Dim83 le 21/05/2011 à 17:41
c'est exactement ça merci.
sachant que les modèles condition 3 et 4 données brut sont très semblable (seul quelques variables changent) mais ne font pas le même traitement que condition 2 et la feuille de résultats condition 3 et 4 est donc un peu différente mais je pense pouvoir adapter la macro (seul les copier-coller changent pour la feuille de résultat).
0
Syzygy Messages postés 378 Date d'inscription vendredi 29 avril 2011 Statut Membre Dernière intervention 31 décembre 2011 142
Modifié par Syzygy le 21/05/2011 à 22:48
Bonsoir,

En prenant en considération votre dernier envoi, je vous ai préparé un fichier qui devrait pouvoir traiter les résultats de toutes vos expériences dans les conditions 2.

Vous trouverez le fichier ici : http://www.cijoint.fr/cjlink.php?file=cj201105/cijuBioEuK.xlsm

J'ai commenté les procédures afin que vous compreniez mieux le code utilisé.
J'espère que le résultat conviendra.

Je vous laisse le soin de l'optimiser et de l'adapter pour traiter les autres conditions.

Bonne soirée,
0
Dim83 Messages postés 18 Date d'inscription samedi 21 mai 2011 Statut Membre Dernière intervention 28 mai 2011
21 mai 2011 à 23:12
merci beaucoup je vais tester ça tout de suite.

Bonne soirée à vous aussi
0
Dim83 Messages postés 18 Date d'inscription samedi 21 mai 2011 Statut Membre Dernière intervention 28 mai 2011
Modifié par Dim83 le 22/05/2011 à 01:25
le résultat est impeccable merci beaucoup. par contre je n'ai pas très bien compris le code, ni pourquoi l'assistant d'importation s'ouvre pour ouvrir le fichier DAT de données brut et pas pour les fichier DAT de traitement de données brut. je n'ai pas compris où dans le code ce fait cette ouverture de fichier DAT de traitement de données brut. Pour l'adapter au traitement de données des essais en condition 3 et 4 il faut qu'il y ai une pose avec une fenêtre qui me demande les valeurs de la taille du point qui diffère pour chaque sujet mais reste constant pour chaque essai d'une même condition.
J'espère être claire.
En tout cas merci beaucoup pour ce magnifique travail, j'espère bien être capable de le faire tout seul car j'ai d'autres traitement à faire en perspective sur ces fichiers résultats (analyses statistiques pour valider ou invalider mes hypothèses de départ)
0
Syzygy Messages postés 378 Date d'inscription vendredi 29 avril 2011 Statut Membre Dernière intervention 31 décembre 2011 142
22 mai 2011 à 12:37
Bonjour,

Je vais tenter d'expliquer d'avantage les macros utilisées (n'hésitez pas à avoir le code sous les yeux cela sera plus parlant) :

Dans un premier temps, les selules macro utilisées sont celle stockée dans le module "ListeDossiersCondition2". (J'ai laissé votre autre macro, ne sachant pas si vous en aurez encore besoin).

Ensuite, le schéma de fonctionnement de la macro-commandes est basé sur la récursivité (elle balaye différent fichiers contenu dans différents répertoires). Dans les faits, le schéma de fonctionnement est le suivant :

1) Lorsque vous cliquez sur le bouton "Lancer le traitement des résultats", la macro "ListeDossiersCondition2" est activée. Excel va commencé à balayer le répertoire stocké dans la variable "NomRep" (à savoir le répertoire Condition 2 dans notre cas) pour "récupérer" la liste des sous-dossiers contenus à l'intérieur (2cl, 2cs, 2ft...).

2) La macro se rendra par la suite dans chacun de ces dossiers un par un (la commande contenue dans l'instruction For Each SubFolder / Next SubFolder se charge de cette partie. Pour chacun des sous répertoires (et par extension sujet) elles effectuera les opérations suivantes :

3) Récupération du nom complet du répertoire (D:\...\2cl) par exemple

4) Appel de la procédure récupérant les données contenues dans le fichier de données brut (qui diffère selon les sujets mais pas les expériences, la procédure est donc à rappeler à chaque changement de sujet).
La procédure s'occupant de cela est la procédure SelectionDonneesBrutes. Elle correspont à la macro que vous aviez enregistrer :

A) Elle stocke le "nom" du classeur inide la feuille qui traite les données dans une variable pour pouvoir y accéder sans encombre dans la suite de la procédure (c'est le role de l'instruction Set FeuilleDestination = ThisWorkbook.Sheets("Traitement"))

B) Elle ouvre une boite de dialogue permettant l'ouverture d'un fichier, copie les données et les colle dans la feuille "Traitement" du classeur modele condition 2 (FeuilleDestination).

C) Elle ferme le fichier des données brutes (qui n'est plus utile donc autant le fermer avec l'instruction ActiveWindow.Close) et se repositionne sur le classeur "modele condtion 2 donnes brut".

Pour information, la macro SelectionDonnesBrutes est terminée, Excel passe à l'instruction suivante contenue dans la macro "ListeDossiersCondition2".

5) Excel appelle de la procédure permettant de balayer les fichiers de traitement des données brutes contenu dans le sous-répertoire en lui passant le nom du sous répertoire concerné (c'est le rôle de l'instruction SelectionDonneesVariables (NomSousRepComplet)). Le nom de la procédure est "SelectionDonneesVariables"

A) La macro fonctionne sur le même principe de balayage que la macro "ListeCondition2". Elle parcours l'ensemble des fichiers contenus dans le sous-répertoire et applique une action uniquement au fichier au format ".dat"
Ceci se fait à l'aide des instructions suivantes :
For Each f1 In sf 'Pour chacun des fichiers
If LCase(Right(f1.Name, 3)) = "dat" Then 'Test si le format du fichier est en ".dat"
[...]
End If
Next 'Passe au fichier suivant
L'avantage de cette méthode et bien entendu que vous n'aurez pas à sélectionner manuellement chacun des fichiers, Excel le faisant pour vous (votre souris vous dira merci pour celà ;-))

B) Pour chacun des fichiers au format ".dat" la macro récupère le nom complet du fichier (D:\...\Nomdufichier.dat).

C) La macro ouvre ensuite le fichier, et copie des données de ce fichier vers la feuille "Traitement" du classeur "modele condition 2 donnees brut" (avec l'aide de Feuille Destination comme vu plus tôt...) puis ferme le fichier ".dat"

D) La macro appel ensuite une procédure d'enregistrement en lui passant le nom complet du fichier ".dat". C'est le rôle de l'instruction "EnregistreResultat (Fichier)"
La procédure "EnregistreResultat" effectue les opérations suivantes :

a) Elle "casse" le nom complet du fichier (à l'aide de la procédure Split(Fichier, "\") et stocke les différentes chaines de caractères séparées par le symbole "\" dans un "tableau" (nommé ExtractionChaine), une chaine par cellule du "Tableau"
- Ceci permet d'extraire le nom du fichier réduit à l'aide de l'instruction "NomFichierResultat = Left(ExtractionChaine(7), InStr(ExtractionChaine(7), ".") - 1)". (ExtractionChaine(7) reprend le contenu de la 7ème "cellule" du tableau)
- Ceci permet également de déterminer le répertoire d'enregistrement. C'est le rôle de l'instruction "NomRepertoire = "D:\Mes documents\Cours master 1\mémoire2\résultats\" & ExtractionChaine(5) & "\" & ExtractionChaine(6)"

b) Excel teste ensuite si le répertoire d'enregistrement (stocké dans la variable "NomRepertoire" extiste. S'il n'existe pas, Excel le créé à l'aide de la procédure "MkDir (NomRepertoire)"

c) Excel crée ensuite le nom complet du fichier de destination avec une simple concaténation (c'est le rôle de l'instruction "NomFichierResultatComplet = NomRepertoire & "\" & NomFichierResultat")

d) Excel crée ensuite le fichier de résultat en question (qui n'existait pas jusqu'à présent).
- Il se place sur le classeur "modele condition 2 donnees brut" et stocke son nnom dans la variable FichierSource.
- Il créée un nouveau classeur et stock son nom dans la variable "FichierFinal"

e) Excel se repositionne sur le fichier "modele condition 2 données brut" et copie l'onglet résultat vers le nouveau fichier récemment créé (FichierFinal)

f) Excel effectue un copie-collage spécial du contenu de la feuille de résultat du nouveau fichier afin de rompre les liaisons avec le classeur "modele condition 2 donnees brut".

g) Excel sauvegarde enfin le nouveau fichier sous le nom stocké dans la variable "NomFichierResultatComplet", ferme le-dit fichier et retourne sur le classeur "modele condtion 2 donnes brut".

La macro d'enregistrement étant terminé, Excel reprend la macro au point 5)C) et traite les autres fichiers du répertoire selon la même méthode.

Une fois le dernier fichier du sous-répertoire traiter, la macro reprend à partir du point 2) et répétera les même opérations avec le sujet suivant... Ainsi de suite pour traiter tous les sujets pour la condition 2.

Si vous voulez traiter les autres conditions, il faudrait rajouter un degré supplémentaire de récursivité. Basez-vous sur la procédure "ListeCondition2" et adaptez là pour parcourir les répertoires "condition" et effectuer les opérations nécessaires (notamment le changement de vos paramètres, s'ils sont toujours variables (les conditions 2 varient en fonction des expériences et ne sont pas constants), utilisez des InputBox. S'il ne varie qu'en fonction des conditions (quelque soit votre expérience la condition 2 reste la condition 2), stockez les valeurs dans le code ou dans une mini-base de données sous Excel)


J'esprèe avoir été complet et que cette lecture n'a pas été trop indigeste...

Bonne journée
0
Dim83 Messages postés 18 Date d'inscription samedi 21 mai 2011 Statut Membre Dernière intervention 28 mai 2011
Modifié par Dim83 le 22/05/2011 à 18:23
vous informations m'ont bien servis néanmoins, je ne comprends pas pourquoi à chaque fois qu'il ouvre un fichier de données brutes, j'ai systématiquement l'assistant d'importation de fichier texte qui s'ouvre pour me demander un certain nombre de chose, soit 3 fenêtres. Sauriez-vous comment faire pour que la macro indique à excel comment il doit importer le fichier tout seul ?
Et je n'ai pas compris comment faire le bouton "lancer le traitement des résultats" sur la feuille "traitement". Sinon j'ai fait au plus simple pour les autres conditions, j'ai recréé un classeur par condition et modifier les macro en conséquence et ça marche impeccablement.
Encore merci beaucoup, ça faisait une bonne semaine que je butais la dessus, vous m'avez enlevé une bonne épine du pied.
0
Syzygy Messages postés 378 Date d'inscription vendredi 29 avril 2011 Statut Membre Dernière intervention 31 décembre 2011 142
22 mai 2011 à 18:34
Cela n'est pas du à la macro, mais au fait que le programme configurer par défaut pour ouvrir ces fichiers n'est pas Excel mais un autre programme (par ex : Bloc note, WordPad...)

Pour éviter celà, le meilleur moyen serait de définir Excel comme programme par défaut pour ouvrir les fichiers .dat (çà éviterai de rajouter du code pour cela). Est-ce possible dans votre configuration ou non?
0
Dim83 Messages postés 18 Date d'inscription samedi 21 mai 2011 Statut Membre Dernière intervention 28 mai 2011
22 mai 2011 à 18:46
Je pense qu'il n'y a aucun problème, c'est bien dans "options des dossiers" et "types de fichiers" ?
Pour le bouton j'ai trouvé. Il ne me reste plus qu'a tout tester.
0
Syzygy Messages postés 378 Date d'inscription vendredi 29 avril 2011 Statut Membre Dernière intervention 31 décembre 2011 142
22 mai 2011 à 18:53
C'est bien à cet endroit sous XP. Sinon clic-droit sur le fichier -> Ouvri Avec -> Sélectionnez le programme par défaut donne le même résultat.

Bon test
0
Dim83 Messages postés 18 Date d'inscription samedi 21 mai 2011 Statut Membre Dernière intervention 28 mai 2011
22 mai 2011 à 19:25
l'extension DAT n'existant pas j'ai tenté de la crée mais il ne la garde pas en mémoire. Voyez-vous une autre possibilité ?
0
Syzygy Messages postés 378 Date d'inscription vendredi 29 avril 2011 Statut Membre Dernière intervention 31 décembre 2011 142
22 mai 2011 à 19:29
Qu'entendez-vous par l'extension DAT n'extistant pas ?

En essayant de faire un clic-droit sur un de vos fichiers et en suivant la procédure indiquée dans mon commentaire précédent cela fonctionne. N'oubliez pas de cocher l'option "Toujours utiliser ce programme pour ouvrir ce type de fichier". Avez-vous testé cette option?
0
Dim83 Messages postés 18 Date d'inscription samedi 21 mai 2011 Statut Membre Dernière intervention 28 mai 2011
Modifié par Dim83 le 22/05/2011 à 19:52
c'est ce que j'ai fait, mais quand je fait "ouvrir avec" : Excel, il l'ouvre sans passer par l'assistant .
Pourquoi l'assistant ne s'ouvre pas pour les fichiers des différents essais des sujet ? ils sont pourtant au format DAT eux aussi . Mystère ...Mystère...
0
Syzygy Messages postés 378 Date d'inscription vendredi 29 avril 2011 Statut Membre Dernière intervention 31 décembre 2011 142
22 mai 2011 à 19:51
C'est étrange en effet. Je ne vois pas de raison évidente. Pouvez-vous me transmettre un de ces fichiers pour que je puisse faire un test? (si besoin je rajouterai une instruction complémentaire à la macro.
0
Syzygy Messages postés 378 Date d'inscription vendredi 29 avril 2011 Statut Membre Dernière intervention 31 décembre 2011 142
Modifié par Syzygy le 22/05/2011 à 20:43
Après quelques tests j'ai modifié la procédure "SelectionDonneesBrutes" (je suis effectivement passé par un GetOpenFilename.)

Normalement elle devrait fonctionner, et la fenêtre d'importation devrait disparaitre.

Voici le nouveau code :

'Ouvre une fenêtre de dialogue pour la sélection des données brutes invariables pour chacune des expériences par sujet.
Sub SelectionDonneesBrutes()
Application.ScreenUpdating = False
Dim Fichier As String
Set FeuilleDestination = ThisWorkbook.Sheets("Traitement")
ChDir "D:\Mes documents\Cours master 1\mémoire2\dossier de traitement des données brutes\fichiers de données brutes"
Fichier = Application.GetOpenFilename("Text Files (*.dat), *.dat")
Workbooks.OpenText Filename:=Fichier, Origin:=932, StartRow:=1, _
DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter _
:=False, Tab:=True, Semicolon:=False, Comma:=False, Space:=False, _
Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), _
Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1), Array(11, 1), _
Array(12, 1), Array(13, 1), Array(14, 1), Array(15, 1)), DecimalSeparator:=".", _
TrailingMinusNumbers:=False
Range("AB1:AE2").Select
Selection.Copy Destination:=FeuilleDestination.Range("A1:D2")
ActiveWindow.Close
FeuilleDestination.Activate

End Sub
0
Dim83 Messages postés 18 Date d'inscription samedi 21 mai 2011 Statut Membre Dernière intervention 28 mai 2011
23 mai 2011 à 00:58
Tout marche nickel ! Merci beaucoup. j'espère pouvoir me resservir de ces codes pour la suite.
Pour ce sujet là c'est clos.

Merci Syzygy pour tout le tps passé sur ces lignes de code.
0
Syzygy Messages postés 378 Date d'inscription vendredi 29 avril 2011 Statut Membre Dernière intervention 31 décembre 2011 142
Modifié par Syzygy le 23/05/2011 à 23:25
Bonsoir,

Ravi que cela toune. Pour a part çà m'a permis de revoir quelques fonctions en VBA assez sympathiques.

Bonne chance pour la suite.
0
Dim83 Messages postés 18 Date d'inscription samedi 21 mai 2011 Statut Membre Dernière intervention 28 mai 2011
24 mai 2011 à 00:01
bonjour,
cette macro tourne très bien mais je n'ai pas réussi à en comprendre toute les subtilités car j'ai essayer d'en refaire une autre à partir de celle là mais elle ne tourne pas j'ai mis un post là : https://forums.commentcamarche.net/forum/affich-22175855-macro-copie-de-donnees-de-differents-dossiers#p22175855
0