Feuille importée d'un logiciel à modifier...

  • Initiateur de la discussion RoadRunner
  • Date de début
R

RoadRunner

Guest
Bonjour,

J'au une feuille de calcul importée d'un logiciel.
On y trouve des données dans une colonne de B4 à B88 et dans une autre colonne de C4 à C88.
Ces données sont sous un format texte du genre '00mn15s' qui exprime un temps 0 minutes et 15 secondes.

Problème :

Je voudrai (si c'est possible avec une macro à lancer à l'ouverture ou autre) que toutes les cellules de B4 à C88 soient modifiées en format 'heure' comme ceci : 00:00:15
il arrive que le format texte soit '01mn25' il faudrait alors que la cellule soit '00:01:25' (les minutes sont en général soit 00 soit 01 soit 02 ou 03 et très rarement plus)

puis que les cellules B100 et C100 calculent la moyenne des plages au dessus (B4 à B88 et C4 à C88) exprimées également au format heure 00:00:00

ça me semble irréalisable mais j'ai vu ici des gens faire des miracles !
Cà m'éviterait d'avoir à faire cette manip sur environ 240 fichiers !

je vous remercie de votre aide par avance !

à bientot
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bojour Sylvie, RoadRunner, le Forum


Bip Bip....


Option Explicit

Sub Transformation_HHMMSS()
Dim Cell As Range
Dim TmpMM As String
Dim TmpSS As String
Dim Container As Variant

   
For Each Cell In Union(Range('B4:B88'), Range('C4:C88'))
       
If InStr(1, Cell, 'mn', 1) <> 0 Then
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
On Error Resume Next
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Container = Split(Cell, 'mn')
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; TmpMM = Val(Container(0))
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; TmpSS = Val(Container(1))
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Cell = '00:' & Format(TmpMM, '00') & ':' & Format(TmpSS, '00')
&nbsp; &nbsp; &nbsp; &nbsp;
End If
&nbsp; &nbsp;
Next

End Sub


LOL tu n'es pas C@Thy au moins ?

Bon Dimanche
@+Thierry
 

Sylvie

XLDnaute Accro
Re bonjour Road Runner, Hello Thierry,

Thierry, n'ais- je pas lu dans un autre fil que tu t'etais promis de ne plus faire de code aujourd'hui ? :angry:
( Il faut te reposer et te ménager, j'y tiens !!! )
Bon allez je retourne sur la formule de RoadRunner mais je sens que je vais être à la bourre et que RoadRunner t'aura déjà sauté au cou.

Bonne fin d'après midi
 
R

RoadRunner

Guest
Re

C'est bien ton 'code' mais qu'est ce que j'en fait ?

il faut que j'enregistre ça quelque part je suppose...

une derniere chose à ajouter à ce qui précède, si je peux abuser de vos connaissances !?

les moyennes en B100 et C100 doivent s'enregister dans un autre classeur appeler 'Recapitulatif.xls'.
Cela doit se faire comme ceci :

en 'feuille1' cellules B1 et C1 seront les moyennes B100 et C100
du fichier que s'appele '1.xls'

en 'feuille2' cellules B1 et C1 seront les moyennes B100 et C100
du fichier que s'appele '2.xls'

en 'feuille3' cellules B1 et C1 seront les moyennes B100 et C100
du fichier que s'appele '3.xls'

ceci jusqu'au fichier '20.xls'

par contre expliquez-moi comment faire avec le 'code' car je ne connais pas meme si j'essaye...

précision je voudrai que tout ça se fasse plus ou moins automatiquement si possible mais meme en manuel ce sera toujours ça de gagné pour moi

si tout fonctionne je me propose de vous offrir un verre pour votre aide si généreuse !

à bientot!
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Coucou Sylvie,

Nan nan c'était Vendredi soir que j'ai dit ça pour Lien supprimé mais pas aujourd'hui...

Bon courage avec les formules, mais vu que RoadRunner doit traiter 240 fichiers il me semble qu'il favorisera un code VBA...

Par contre pour la partie 'puis que les cellules B100 et C100 calculent la moyenne des plages au dessus (B4 à B88 et C4 à C88) exprimées également au format heure 00:00:00' si tu as la formule, je tenterai de l'intégrer par VBA dans la foulée.

Et si les 240 fichiers sont à traiter à la chaine par macro, on peut le faire aussi, comme ça RoadRunner aura plus de temps pour l'apéro ;)

Bon Dimanche
[ol]@+Thierry[/ol]
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Re RoadRunner, Sylvie


Pour l'instant regarde ceci...

Tu verras où est le code...

Tiens nous au courant si c'est déjà ce que tu souhaites et si celà correspond bien à tous tes formats d'imports possibles...

[ol]@+Thierry[/ol] [file name=VBA_Transform_HHMMSS.zip size=8703]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/VBA_Transform_HHMMSS.zip[/file]
 

Pièces jointes

  • VBA_Transform_HHMMSS.zip
    8.5 KB · Affichages: 15

Sylvie

XLDnaute Accro
Re bonjour,

tu as encore une fois parfaitement raison Thierry et sur 240 fichiers seul ton code interesse RoadRunner.
Quant à la formule une simple Moyenne doit suffire.

RoadRunner voilà le code écrit par Thierry qui te permet la transformation automatique de tes colonnes B et C.

Est ce que c'est bien cela que tu veux ? [file name=RoadRunner_20050814181943.zip size=9354]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/RoadRunner_20050814181943.zip[/file]

EDITION
Tu es vraiment Bip, Bip .... le coyotte Thierry ! ;)

Message édité par: Sylvie, à: 14/08/2005 18:21
 

Pièces jointes

  • RoadRunner_20050814181943.zip
    9.1 KB · Affichages: 14
R

RoadRunner

Guest
Sylvie, Thierry,

j'ai pris le fichier de Thierry

Super mega excellent !

par contre dans 'see the code' j'ai erreur...1004

acces par programme par visuel basic n'est pas fiable ?
ou methode VBE de l'objet 'application' a échoué

à toi...de voir
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Re Bonjour RoadRunner et Sylvie

ah oui c'est dû à Office XP et ses nouvelle sécurités ...

Le code que j'utuilise pour te montrer le code fait accès au Visual Basic Project c'est considéré comme dangeureux...

Voilà les paramètres que tu dois appliquer :

1)


2)


3)


C'est l'étape 3 qui n'est pas remplie pour ton message...

Sinon voici le code finalisé avec les Moyennes en B100 et C100 :

Option Explicit

Sub Transformation_HHMMSS()
Dim Cell As Range
Dim TmpMM As String
Dim TmpSS As String
Dim Container As Variant

&nbsp; &nbsp;
For Each Cell In Union(Range('B4:B88'), Range('C4:C88'))
&nbsp; &nbsp; &nbsp; &nbsp;
If InStr(1, Cell, 'mn', 1) <> 0 Then
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
On Error Resume Next
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Container = Split(Cell, 'mn')
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; TmpMM = Val(Container(0))
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; TmpSS = Val(Container(1))
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Cell = '00:' & Format(TmpMM, '00') & ':' & Format(TmpSS, '00')
&nbsp; &nbsp; &nbsp; &nbsp;
End If
&nbsp; &nbsp;
Next

Range('B100') = Application.WorksheetFunction.Average(Range('B4:B88'))
Range('C100') = Application.WorksheetFunction.Average(Range('C4:C88'))

End Sub


Bon Courage et Welcome in VBA's World !!!

[ol]@+Thierry[/ol] the Bip Bip ;) @Sylvie
 
R

RoadRunner

Guest
Re à tous les deux...

le fichier de Sylvie fonctionne bien également avec les moyennes, c'est très bien !!!!

en fait je vais vous expliquer un peu plus ce que je dois faire de tous ces chiffres...

un logiciel me sort 20 fichiers par jours de travail
Ces fichiers sont nommés 1.xls à 20.xls
(j'ai actuellement 240 jours à faire)
donc les fichiers 1 à 20.xls dans un dossier nommé 'jour1A'
puis 20 autres dans un dossier 'jour1B'
puis 20 autres dans un dossier 'jour2A'
puis 20 autres dans un dossier 'jour2B'
puis 20 autres dans un dossier 'jour3A'
puis 20 autres dans un dossier 'jour3B' etc...

ces fichiers doivent avoir les 2 plages, que je vous ai cité, transformées en hh:mm:ss (par contre si le temps est 00mn00s il faut que la cellule soit vide pour que la moyenne n'en tienne pas compte)

puis en dessous les cellules B100 et C100 qui font le moyenne de cette plage

du coup, tous les fichiers 1 à 20.xls ont des moyennes
Je voudrais que ces moyennes soit enregistrées dans un fichier 'jour1A.xls' pour le dossier 'jour1A'
'jour1B.xls' pour le dossier 'jour1B'
'jour2A.xls' pour le dossier 'jour2A' ect...
qui auraient une forme de ce genre :

en A1 : le chiffre du nom du fichier (ex : 1 pour 1.xls)
en A2 : une copie du résultat de la cellule B100 dans le meme format hh:mm:ss
en A3 : une copie du résultat de la cellule C100 dans le meme format hh:mm:ss

puis

en B1 : le chiffre du nom du fixhier (ex : 2 pour 2.xls)
en B2 : une copie du résultat de la cellule B100 dans le meme format hh:mm:ss
en B3 : une copie du résultat de la cellule C100 dans le meme format hh:mm:ss

puis

en C1 : le chiffre du nom du fixhier (ex : 3 pour 3.xls)
en C2 : une copie du résultat de la cellule B100 dans le meme format hh:mm:ss
en C3 : une copie du résultat de la cellule C100 dans le meme format hh:mm:ss

ainsi de suite...

et pour terminer j'aurai donc des fichiers 'joursXA.xls' et 'jourXB.xls'

VOILA !

j'espere que vous avez bien compris ce que je voudrai sachant que la transformation demandée plus haut n'est qu'une partie du travail que je vous ai décrit plus haut...

encore une fois merci pour votre aide et sachez que je suis reconnaissant ;-)
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Re RoadiesRunner, Sylvie

Oui je me doutais bien encore d'une usine à gaz quand j'ai cliqué sur la première fois sur ce fil...

Ce qui m'inquiète avant d'aller plus en avant, c'est ta réponse du post 14/08/2005 18:02 où tu me dis 'C'est bien ton 'code' mais qu'est ce que j'en fait ? '

Avant d'aller plus loin je voudrais voir si tu as déjà assimilé mes conseil et si tu as su faire l'intégration de la version VBA finalisée avec les Fonction Average en B100/C100 ?

Ensuite créer 1 fichier XLS par journée reprenant le résultat des 20 fichiers n'est pas impossible à faire, mais c'est tordu de chez tordu... Surtout en Colonne plutôt qu'en linéaire...

Excel contient 65536 Lignes par Feuille et bien souvent c'est par méconnaissance de la programmation que l'on part dans le sens des Colonnes qui ne peuvent être qu'au nombre de 256...

En fait c'est plus une question de Fond et de Conception que je te pose maintenant...

As tu vraiment besoin d'un fichier XLS par répertoire de journée contenant sur 20 colonnes des données récupérées sur 20 classeurs ?

Si tu avais un classeur GLOBAL de toutes les information, avec à chaque ligne :

Colonne A
Nom Repértoire

Colonne B
Nom Du Fichier XLS

Colonne C
Moyenne Colonne 'B' du Fichier en ligne

Colonne D
Moyenne Colonne 'C' du Fichier en ligne

Et ceci ligne à ligne pour TOUS les classeurs depuis un répertoire racine...

Evidemment c'est de la programmation un peu plus poussée (je vois même de l'ADO se pointer) Sylvie en connait quelque chose !!!

Mais ensuite quelle aisance pour tes statistics, tu auras tout en une seule base de données (UserForms etc etc)


Enfin déjà réfléchit avant d'aller plus loin...

bonne soirée
[ol]@+Thierry[/ol]
 

Sylvie

XLDnaute Accro
Re bonjour,

Roadrunner en lisant la description de ton problème actuel et voyant que tu cherches à récupérer des plages identiques se trouvant dans des classeurs fermés, je pense que ce fil Lien supprimé et notamment le fichier concocté par notre cher Thierry devrait t'interesser.
Notamment peut être sur la fin lorsque les colonnes auront été converties et qu'il suffira de récupérer les moyennes.
Le fichier s'appelle USF_ADO_Calculs_Collector_V01_03.zip.

Dans l'attente de tes nouvelles,
je continue de cogiter sur ta problématique d'ensemble.
 

Statistiques des forums

Discussions
312 361
Messages
2 087 626
Membres
103 609
dernier inscrit
AmineAB33