OVH Cloud OVH Cloud

productivité

7 réponses
Avatar
Patrick Bastard
Bonjour à toutes et à tous.

Je cherche à établir un graphique de productivité : Axe vertical : nombre
d'actions par minute sur une plage de durée (axe horizontal).

Mes données d'entrée, récupérées sur une feuille Excel (requête d'une appli
interne (non Excel) enregistrée sous le format nom.XLS) se présentent sur 2
colonnes :
Heure (format 1 pour 00:01, 59 pour 00:59, 100 pour 01:00)
Nombre d'actions.

Il n'y a pas forcément d'action chaque minute, et je souhaite visualiser sur
un graphe les actions sur une plage donnée (exemple de 02:00 à 06:00).

La solution que j'avais adoptée (Excel4) était de recopier en colonne D par
macro les valeurs 200 à259, 300 à 359, 400 à 459, 500 à 559 et 600 à 659
(plage que j'avais nommée sur la feuille.XLM) à coté de mon extraction, de
faire un recherche verticale sur mes 2 premières colonnes pour que les
actions, si elles existent, se situent en face des heures colonne E, et pour
pouvoir faire un graphe tout simple.

Je souhaite réécrire ce bout de code en VBA, et c'est la raison pour
laquelle je fais appel à vos lumières.

Pouvez-vous m'aider à générer cette colonne D. Le must serait bien entendu
une boite de dialogue permettant d'entrer sous format 02:00 le début et la
fin de la plage à créer.

Merci par avance de vos pistes,

Bien cordialement,

Patrick

7 réponses

Avatar
Patrick Bastard
Merci à ceux et celles qui veulent bien m'aider de me dire si ma demande
nécessite des éclaircissements.
;-)

Bonjour à toutes et à tous.

Je cherche à établir un graphique de productivité : Axe vertical :
nombre d'actions par minute sur une plage de durée (axe horizontal).

Mes données d'entrée, récupérées sur une feuille Excel (requête d'une
appli interne (non Excel) enregistrée sous le format nom.XLS) se
présentent sur 2 colonnes :
Heure (format 1 pour 00:01, 59 pour 00:59, 100 pour 01:00)
Nombre d'actions.

Il n'y a pas forcément d'action chaque minute, et je souhaite
visualiser sur un graphe les actions sur une plage donnée (exemple de
02:00 à 06:00).

La solution que j'avais adoptée (Excel4) était de recopier en colonne
D par macro les valeurs 200 à259, 300 à 359, 400 à 459, 500 à 559 et
600 à 659 (plage que j'avais nommée sur la feuille.XLM) à coté de mon
extraction, de faire un recherche verticale sur mes 2 premières
colonnes pour que les actions, si elles existent, se situent en face
des heures colonne E, et pour pouvoir faire un graphe tout simple.

Je souhaite réécrire ce bout de code en VBA, et c'est la raison pour
laquelle je fais appel à vos lumières.

Pouvez-vous m'aider à générer cette colonne D. Le must serait bien
entendu une boite de dialogue permettant d'entrer sous format 02:00
le début et la fin de la plage à créer.

Merci par avance de vos pistes,

Bien cordialement,

Patrick


Avatar
JpPradier
Bonjour Patrick

Peut-etre devrais-tu donner ta macro Excel4 pour eclairer ta demande.

j-p
Avatar
Patrick Bastard
Bonjour, Jean Pascal, et merci.
*Pour reprendre les termes de ton intervention* -voir en fin de message :


Voici ci-dessous le texte de la macro Excel 4 :

ECRAN(FAUX)
=OUVRIR(LIRE.DOCUMENT(2)&"/"&"TG1.XLS")

¬TIVER("graphTG1.XLM")
=SELECTION.ATTEINDRE("table")
=COPIER()
¬TIVER("TG1.XLS")
=SELECTIONNER("L2C4")
=COLLER()

=SELECTIONNER("L2C5")
=FORMULE("=SI(NON(ESTNA(EQUIV(LC(-1);L2C(-4):L418C(-4);0)));RECHERCHEV(LC(-1
);L2C(-4):L418C(-3);2);0)")
=RECOPIE.INCREMENT("LC:L(256)C";FAUX)
=SELECTIONNER("L2C4:L257C5")

=COPIER()
=CREER.OBJET(5;"L4C10";;;"L6C11";5.25;0;1;VRAI)
=ASSISTANT.GRAPHIQUE(VRAI;"TG1.XLS!L2C4:L301C5";3;1;2;1;2;2)
¯FICHER("TG1.XLS Graphique 1")

=SELECTIONNER("Axe 1")
=MOTIFS(1;1;1;1;4;1;4)
ìHELLE(0;40;5;1;0;FAUX;FAUX;FAUX)
=FORMAT.POLICE(0;1;FAUX;"Arial";6;FAUX;FAUX;FAUX;FAUX)

=SELECTIONNER("Axe 2")
=MOTIFS(1;1;1;1;4;2;4)
ìHELLE(1;1;15;FAUX;FAUX;FAUX)
=FORMAT.POLICE(0;1;FAUX;"Arial";6;FAUX;FAUX;FAUX;FAUX)

=QUADRILLAGE(VRAI;FAUX;VRAI;FAUX)
=AJOUTER.TEXTE(1)
=FORMAT.POLICE(0;1;FAUX;"MS Sans Serif";12;VRAI;FAUX;FAUX;FAUX)
=FORMULE("=""TG1 du ........................................""")

IMPRIMER(1;;;1;FAUX;FAUX;1;;;0)
ìRAN(VRAI)
APERCU.IMPRESSION()
FICHIER.FERMER(FAUX)
FICHIER.FERMER(FAUX)
FICHIER.FERMER(FAUX)
=RETOUR()

Table (de 01:58 à 02:05)

158
159
200
201
202
203
204
205

Bonjour Patrick

Peut-etre devrais-tu donner ta macro Excel4 pour eclairer ta demande.

j-p


Avatar
JpPradier
Voilà une traduction incomplete de ta macro. Je n'ai pas reproduit la mise en forme de la serie de
points.

j-p

Sub Productivité()
Dim table(500)

Application.ScreenUpdating = False
Workbooks.Open (ActiveWorkbook.Path & "/TG1.xls")
cpt = 0
For j = 0 To 6
For i = 0 To 59
Range("d2").Offset(cpt).Value = j * 100 + i
cpt = cpt + 1
Next
Next

Range("E2").FormulaLocal "=SI(NON(ESTNA(EQUIV(LC(-1);L2C(-4):L418C(-4);0)));RECHERCHEV(LC(-1);L2C(-4):L418C(-3);2);0)"
Range("E2").AutoFill Destination:=Range("E2:E257"), Type:=xlFillDefault

Charts.Add
ActiveChart.ChartType = xlXYScatterSmoothNoMarkers
ActiveChart.SetSourceData Source:=Sheets("Feuil1").Range("D2:E257"), PlotBy:=xlColumns
ActiveChart.Location Where:=xlLocationAsObject, Name:="Feuil1"
ActiveChart.SeriesCollection(1).Name = "=""TG1 du ..."""
ActiveSheet.PrintPreview
ActiveWorkbook.Close False

End Sub
Avatar
Patrick Bastard
Bonsoir, *Jean-Pascal*.


C'est très exactement ce que je cherchais :
:-)

cpt = 0
For j = 0 To 6
For i = 0 To 59
Range("d2").Offset(cpt).Value = j * 100 + i
cpt = cpt + 1
Next
Next


Si j'ai bien compris, il ne me reste plus qu'à remplacer les valeurs de J
par des noms, et je pourrai paramétrer à l'aide d'une boite de dialogue.
Pour la mise en forme du graphique, pas de problème : je vais faire chauffer
l'enregistreur de macro.

Un grand merci,

Bien cordialement,

Patrick.

Avatar
JpPradier
Bonjour Patrick

Voici une méthode un peu plus simple pour integrer les variables de debut et fin :

HeureDeb = "02:10"
HeureFin = "04:44"

cpt = 0
Deb = CInt(Left(HeureDeb, InStr(HeureDeb, ":") - 1)) * 60 + CInt(Right(HeureDeb, 2))
Fin = CInt(Left(HeureFin, InStr(HeureFin, ":") - 1)) * 60 + CInt(Right(HeureFin, 2))
For i = Deb To Fin
Range("d2").Offset(cpt).Value = Int(i / 60) & ":" & (i Mod 60)
cpt = cpt + 1
Next

j-p
Avatar
Patrick Bastard
*Pour reprendre les termes de ton intervention* -voir en fin de message :

Encore merci, Jean Pascal

Celui-là, je me le mets de côté, car j'aime bien comprendre ce que
j'utilise, et là; il me faudra un peu ;-) de temps pour décortiquer.


Bien cordialement,

Patrick.

Bonjour Patrick

Voici une méthode un peu plus simple pour integrer les variables de
debut et fin :

HeureDeb = "02:10"
HeureFin = "04:44"

cpt = 0
Deb = CInt(Left(HeureDeb, InStr(HeureDeb, ":") - 1)) * 60 +
CInt(Right(HeureDeb, 2)) Fin = CInt(Left(HeureFin, InStr(HeureFin,
":") - 1)) * 60 + CInt(Right(HeureFin, 2)) For i = Deb To Fin
Range("d2").Offset(cpt).Value = Int(i / 60) & ":" & (i Mod 60)
cpt = cpt + 1
Next

j-p