cs_tanguy
Messages postés29Date d'inscriptionjeudi 7 mars 2002StatutMembreDernière intervention27 novembre 2008
-
26 sept. 2007 à 09:16
JM247L
Messages postés443Date d'inscriptionmardi 27 mars 2007StatutMembreDernière intervention 1 mars 2011
-
1 oct. 2007 à 11:25
Bonjour à tous.
Voici mon problème :
J'ai un fichier Excel, avec des logs de connexion d'utilisateur.
J'au dans ce log, le matricule, le nom prénom, la date de dernière connexion à une appli et le profil sécurité de la personne.
J'ai besoin de savoir combien de gens (avec un même profil) se sont connecter dans la semaine.
Alors pour la semaine, j'ai trouvé, maintenant pour determiner les profils, je ne vois pas d'autres solution que de faire des 'case'.
Mon soucis, c'est que j'ai une vingtaine de profils différents.
Je voudrais en fait, incrémenter des compteurs (un par profil) qui m'indiquent pour la semaine en cours combien j'ai eu de connection par profil.
Comme les noms des profils peuvent évoluer et qu'il y en a beaucoup, je voudrais automatiser la séléction des noms de profils.
En gros, mon prog lit le fichier, trouve les noms des profils, et génére le 'case' ou autre chose.
Je suis ouvert à toutes propositions (même changer de direction dans mon dev).
JM247L
Messages postés443Date d'inscriptionmardi 27 mars 2007StatutMembreDernière intervention 1 mars 20112 26 sept. 2007 à 15:57
Après un Copier/Coller du code ci-dessous, ce devrait être a dream
En tous cas pour moi ça répond a ce que j'ai compris de ta demande
Option Explicit ' Oblige la déclaration des variables
Sub trouveCell()
Dim JourJ As Date, JourC As Variant, FinDeSemaine As Date, JourActuel As Byte, TamponDate As Byte
Dim Diff, C As Range, Profil_List() As Variant, Profil_Compteur() As Variant, I As Integer, J As Integer
Dim Profil_Exists As Boolean, Ligne_Ecrire, Colonne_Profil, Colonne_Compteur
Dim CompteurPasConnection As Integer, CompteurConnection As Integer
' Vérifie si la date de dernière connexion est compris dans la semaine en cours _
Si oui, increment d'un compteur _
Si non, on passe
' Connaître la date du vendredi de la semaine en cours pour comparaison
JourJ = Format(Date)
JourActuel = Weekday(Now, vbMonday)
TamponDate = 5 - JourActuel
FinDeSemaine = DateAdd("d", TamponDate, JourJ)
Worksheets("Feuil1").Activate
I = 0
For Each JourC In Range("C1", Range("C1").End(xlDown)) 'Pour chaque date dans la colonne
Profil_Exists = False
Diff = DateDiff("d", JourC, FinDeSemaine) ' Différence entre date du vendredi et la date trouvée
If Diff > 0 And Diff <= 7 Then
' Check Si Profil déja existant dans ProfilList(I)
For J = 1 To I
If Profil_List(J) = Cells(JourC.Row, 4) Then 'And I > 1 Then
Profil_Exists = True
Exit For
End If
Next J
If Profil_Exists = True Then
Profil_Compteur(J) = Profil_Compteur(J) + 1
Else
I = I + 1
ReDim Preserve Profil_List(I)
Profil_List(I) = Cells(JourC.Row, 4)
ReDim Preserve Profil_Compteur(I)
Profil_Compteur(I) = 1
End If
Else
Cells(JourC.Row, 4) = "Pas de connexion cette semaine"
CompteurPasConnection = CompteurPasConnection + 1
End If
Next
' Affichage des compteurs dans une autre feuille
Worksheets("Resultats").Activate
Colonne_Profil = 1
Colonne_Compteur = 3
Ligne_Ecrire = 1
For J = 1 To I
Cells(Ligne_Ecrire, Colonne_Profil) = Profil_List(J)
Cells(Ligne_Ecrire, Colonne_Compteur) = Profil_Compteur(J)
CompteurConnection = CompteurConnection + Profil_Compteur(J)
Ligne_Ecrire = Ligne_Ecrire + 1
Next J
' Ca c'est parce que je me suis dit que tu en aurais besoin
Cells(Ligne_Ecrire + 1, Colonne_Profil) = "Nombre De Connections"
Cells(Ligne_Ecrire + 1, Colonne_Compteur) = CompteurConnection
Cells(Ligne_Ecrire + 2, Colonne_Profil) = "Utilisateurs Non Connectés"
Cells(Ligne_Ecrire + 2, Colonne_Compteur) = CompteurPasConnection
End Sub
JM247L
Messages postés443Date d'inscriptionmardi 27 mars 2007StatutMembreDernière intervention 1 mars 20112 26 sept. 2007 à 09:22
Bonjour à toi,
Pas clair mais on va essayer
Tu as une liste de profils et une liste d'utilisateur ayant chacun un profil
A chaque fois qu'un utilisateur se connecte, tu veux incrémenter le compteur du profil associé à l'utilisateur
cs_tanguy
Messages postés29Date d'inscriptionjeudi 7 mars 2002StatutMembreDernière intervention27 novembre 2008 26 sept. 2007 à 09:59
Bonjour et merci de t'interresser à mon problème.
Je dois faire des indicateurs, pour montrer combien d'utilisateur de tel ou tel profil se sont connectés dans la semaine.
<col style=\"width: 60pt;\" width=\"80\" /><col style=\"width: 160pt;\" width=\"213\" /><col style=\"width: 99pt;\" width=\"132\" /><col style=\"width: 106pt;\" width=\"141\" />----
Matricule, Nom Prénom, Date dern Connx, Profil, ----
A0122, User1, 24/09/2007, BE, ----
B456, User2, 24/09/2007, BE, ----
B454445, User3, 30/10/2006, GP, ----
C45656, User4, 25/10/2006, BE, ----
B5456, User5, 18/09/2007, SEC
Voilà en gros le problème
Combien de Profil BE se sont connectés
Alors avec l'exemple ça parait pas compliqué sauf que j'ai 600 utilisateurs et 24 profils !
Alors à moins de faire un
JM247L
Messages postés443Date d'inscriptionmardi 27 mars 2007StatutMembreDernière intervention 1 mars 20112 26 sept. 2007 à 10:56
D'autant plus que le nombre de profils peut évoluer ... Quid du Case "Profil"
Je te suggère plutôt de faire une recherche du profil dans la liste des profils et d'incrémenter le compteur quand trouver
' A la connection d l'utilisateur, récupérer son profil dans une variable
Profil=UserProfil
Profil_Trouve = False
Do While ProfilList <> ""
If Cells(Ligne, Colonne) = Profil then
Compteur_Profil = Compteur_Profil + 1
Profil_Trouve = True
Exit Do
End If
Loop
' Traité le cas ou : Profil_Trouve = False
cs_tanguy
Messages postés29Date d'inscriptionjeudi 7 mars 2002StatutMembreDernière intervention27 novembre 2008 26 sept. 2007 à 11:39
Excuse moi, mais j'ai du mal à saisir.
Qu'est ce que le profillist ? Faut il que je créé quelque part une liste de mes profils ?
Si c'est ça et que je comprends ce que tu m'écris, je cherche ensuite dans ma colonne, les éléments semblables aux éléments de ma liste puis j'incrémente un compteur relatif au nom du profil ?
Je vois pas là, désolé, c'est peut être super évident ce que tu me dis, mais j'ai passé tellement de temps sur ce petit bout de code que je suis pas sûr d'être encore up aujourd'hui !!!
cs_tanguy
Messages postés29Date d'inscriptionjeudi 7 mars 2002StatutMembreDernière intervention27 novembre 2008 26 sept. 2007 à 11:48
Juste une petite modif :
Il ne s'agit pas d'une appli Excel qui modifie un fichier
J'ai une appli Oracle avec laquelle je génére un fichier TXT que j'importe dans Excel
Donc en fait, côté Excel, c'est statique, je ne peux pas récupérer le profil à la connection de l'utilisateur.
Il me faut rechercher dans le fichier, quel profil à l'utilisateur.
JM247L
Messages postés443Date d'inscriptionmardi 27 mars 2007StatutMembreDernière intervention 1 mars 20112 26 sept. 2007 à 11:58
Tu as posté dans "Visual Basic 6 / Langages dérivés / VBA /"
Si c'est oracle qui gère, tui n'a pas posté au bon endroit sinon si c'est excel qui gère on doit y arriver
A l'ouverture du fichier excel que doit il se passer ?
Le tableau et le code que tu indiques plus haut se trouve OU ?
Le nom de l'utilisateur tu le récupères dans le fichier TXT ?
cs_tanguy
Messages postés29Date d'inscriptionjeudi 7 mars 2002StatutMembreDernière intervention27 novembre 2008 26 sept. 2007 à 12:09
Ok, je vais essayé d'être plus clair.
Je suis en général assez diffus !!!
En effet, c'est Excel qui va gérer ce que je fais des données.
A l'ouverture du fichier Excel, mon prog importe les données d'un fichier TXT qui contient les infos données plus haut c.à.d.
Matricule / Nom Prénom / DateDernconnx / Profil
Le code est dans le fichier Excel que j'ouvre.
Un utilisateur de ma base de données Oracle, à un matricule et un profil unique.
Je veux pouvoir dire que la semaine dernière, j'ai 450 utilisateurs qui se sont connectés et que dans ces 450, 100 avaient un profil BE, 50 un profil ETUDE, 200 un profil GP et encore 100 un profil ACHAT.
Mon idée de départ était du genre.
Dans la feuille, dans la colonne "Profil", regarde le nom du profil et incrément le compteur Profil
Compteur_Profil = Compteur_Profil + 1
Sauf que je voudrais que le nom du compteur soit dynamique de manière à ne pas avoir à gérer autant de variable et de condition que j'ai de profils différents
JM247L
Messages postés443Date d'inscriptionmardi 27 mars 2007StatutMembreDernière intervention 1 mars 20112 26 sept. 2007 à 12:16
Je reste persuadé que ma proposition est la réponse mais que l'on ne se comprends pas
Envoie moi une copie de ton fichier Excel avec éventuellement une copie du fichier TXT à cette adresse [mailto:jml_exchange@yahoo.fr jml_exchange@yahoo.fr]
cs_tanguy
Messages postés29Date d'inscriptionjeudi 7 mars 2002StatutMembreDernière intervention27 novembre 2008 26 sept. 2007 à 14:19
Bonjour
Merci pour l'idée.
J'ai juste peur d'une chose, si demain j'ai 30 utilisateurs de plus, il me faut reprendre mon tableau pour étendre la zone de sélection des données.
Je veux vraiment automatiser au max car au final c'est pour donner à une tierce personne qui ne doit que relever les résultats. Il ne doit même pas avoir à cliquer sur un bouton.
En plus, il faut que mon prog tourne de façon automatisé la nuit ou le week end !
Au final, le top, serait que je produise des graphs sur une page html ou un pdf déstiné à être diffusé.
Il faut que ce soit automatisé parce que je ne peux pas faire ça de façon manuelle !
Est tu capable de m'aider sur un tableau dynamique sui prendrait tout les résultats d'une feuille sans plages fixes ?
cs_tanguy
Messages postés29Date d'inscriptionjeudi 7 mars 2002StatutMembreDernière intervention27 novembre 2008 27 sept. 2007 à 08:10
Pffffffffffffffffffffffffffff ! Alors là !
Soufflé !
D'abord, Bonjour à tous et merci pour votre aide.
J'ai testé le coup du tableau dynamique et ça marche assez bien, c'est vrai mais ...
Comme l'idée de départ c'était d'en apprendre encore et toujours et de faire de la bidouille, je dois remettre la médaille à JML.
Donc, bravo JML, pfff ton code marche du tonnerre. Je vais maintenant passer du temps à essayer de l'eplucher pour comprendre ce qu'il fait exactement parce ce que je le re-dis, mais l'idée de départ c'était de progresser.
Bon, là j'ai eu un sacré coup de pouce. Ca fait exactement ce que je voulais.
Il faut que je comprenne comment ça fonctionne pour pouvoir l'adapter à d'autres résultats sur le même fichier.
En tout cas, c'est trop bon. En plus, j'ai l'impression qu'il y a une optimisation du traitement par rapport aux premiers résultats que j'avais (même s'ils n'étaient pas correct), J'ai l'impression que ça va très vite.
Est ce lié au fait que tu créé une liste des profil ?
Est ce lié à l'ordre des actions ?
JM247L
Messages postés443Date d'inscriptionmardi 27 mars 2007StatutMembreDernière intervention 1 mars 20112 27 sept. 2007 à 09:55
Salut,
Content que cela réponde
Aujourd'hui je n'ai pas trop de temps ... Une démo à faire sur ce qui devrait remplacer SAP cette année
Je reviens vers toi pour argumenter le code ci-dessus