Execution en fonction d'une cellule [Résolu]

Signaler
Messages postés
29
Date d'inscription
jeudi 7 mars 2002
Statut
Membre
Dernière intervention
27 novembre 2008
-
Messages postés
443
Date d'inscription
mardi 27 mars 2007
Statut
Membre
Dernière intervention
1 mars 2011
-
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).

Bye et merci.

22 réponses

Messages postés
443
Date d'inscription
mardi 27 mars 2007
Statut
Membre
Dernière intervention
1 mars 2011
2
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













 Cliquer "Réponse Acceptée"
JML - Partageons Notre Savoir & Nos Acquis
Messages postés
443
Date d'inscription
mardi 27 mars 2007
Statut
Membre
Dernière intervention
1 mars 2011
2
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

Confirme moi si j'ai bien tout compris

 Cliquer "Réponse Acceptée"
JML - Partageons Notre Savoir & Nos Acquis
Messages postés
29
Date d'inscription
jeudi 7 mars 2002
Statut
Membre
Dernière intervention
27 novembre 2008

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

/CODE

             Select Case ActiveCell
    
                Case "BE"
                BE_compteur = BE_compteur + 1
               
                Case "GP"
                GP_compteur = GP_compteur + 1
               
                Case "ACHAT"
                ACHAT_compteur = ACHAT_compteur + 1
           
    
[CODE]

Sauf que 24 'CASE' ça fait beaucoup.

Merci
Messages postés
443
Date d'inscription
mardi 27 mars 2007
Statut
Membre
Dernière intervention
1 mars 2011
2
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

Evidemment c'est une ébauche

 Cliquer "Réponse Acceptée"
JML - Partageons Notre Savoir & Nos Acquis
Messages postés
443
Date d'inscription
mardi 27 mars 2007
Statut
Membre
Dernière intervention
1 mars 2011
2
Cette solution permettra une liste de profils évolutive

 Cliquer "Réponse Acceptée"
JML - Partageons Notre Savoir & Nos Acquis
Messages postés
29
Date d'inscription
jeudi 7 mars 2002
Statut
Membre
Dernière intervention
27 novembre 2008

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 !!!
Messages postés
29
Date d'inscription
jeudi 7 mars 2002
Statut
Membre
Dernière intervention
27 novembre 2008

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.
Messages postés
443
Date d'inscription
mardi 27 mars 2007
Statut
Membre
Dernière intervention
1 mars 2011
2
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 ?

 Cliquer "Réponse Acceptée"
JML - Partageons Notre Savoir & Nos Acqui
Messages postés
29
Date d'inscription
jeudi 7 mars 2002
Statut
Membre
Dernière intervention
27 novembre 2008

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
Messages postés
443
Date d'inscription
mardi 27 mars 2007
Statut
Membre
Dernière intervention
1 mars 2011
2
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]

 Cliquer "Réponse Acceptée"
JML - Partageons Notre Savoir & Nos Acquis
Messages postés
29
Date d'inscription
jeudi 7 mars 2002
Statut
Membre
Dernière intervention
27 novembre 2008

C'est parti
Messages postés
206
Date d'inscription
lundi 22 novembre 1999
Statut
Membre
Dernière intervention
3 juillet 2008

Hello,

Tu te fais un tableau croisé dynamique tout simplement :)
Ca te donne un truc de ce style apres :

<col style=\"width: 76pt;\" width=\"101\" /><col style=\"width: 57pt;\" width=\"76\" /><col style=\"width: 26pt;\" width=\"35\" />----
, , , ----
Nombre de Date_dern_Connx,  ,  , ----
Profil, Matricule, Total, ----
BE, A0122, 1, ----
 , B456, 1, ----
 , C45656, 1, ----
Total BE,  , 3, ----
GP, B454445, 1, ----
Total GP,  , 1, ----
SEC, B5456, 1, ----
Total SEC,  , 1, ----
Total,  , 5

--=:: Gérôme GUILLEMIN <
Messages postés
29
Date d'inscription
jeudi 7 mars 2002
Statut
Membre
Dernière intervention
27 novembre 2008

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 ?
Messages postés
443
Date d'inscription
mardi 27 mars 2007
Statut
Membre
Dernière intervention
1 mars 2011
2
J'ai bien reçu le fichier ... je travaille dessus et reviens vers toi


JML
Messages postés
29
Date d'inscription
jeudi 7 mars 2002
Statut
Membre
Dernière intervention
27 novembre 2008

Ok Merci

Super boulot.

Il faut que je me sauve là, donc je test ça demain matin.
Merci beaucoup pour le temp passé.
A demain
Messages postés
29
Date d'inscription
jeudi 7 mars 2002
Statut
Membre
Dernière intervention
27 novembre 2008

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 ?

A très bientôt. Merci encore.
Messages postés
443
Date d'inscription
mardi 27 mars 2007
Statut
Membre
Dernière intervention
1 mars 2011
2
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

 Cliquer "Réponse Acceptée"
JML - Partageons Notre Savoir & Nos Acquis
Messages postés
29
Date d'inscription
jeudi 7 mars 2002
Statut
Membre
Dernière intervention
27 novembre 2008

Si tu es d'accord, je vais essayer d'argumenter de moi-même et tu me dis si j'ai bien saisie. Ok ?
Messages postés
443
Date d'inscription
mardi 27 mars 2007
Statut
Membre
Dernière intervention
1 mars 2011
2
C'est une meilleure option
 Cliquer "Réponse Acceptée"
JML - Partageons Notre Savoir & Nos Acquis
Messages postés
29
Date d'inscription
jeudi 7 mars 2002
Statut
Membre
Dernière intervention
27 novembre 2008