Test login et traitement
#1
Débutant XLPages

Inscription: 14/01/2010

Messages: 10

Système d'exploitation:
PC
Version Excel utilisée:
2003,2007
Posté le : 18-01-2010 09h12
Bonjour,
J'ai mis en place dans mon classeur le module suivant qui récupère le login du PC
Function login() As String
login = Application.UserName
End Function

je voudrais définir en fonction de ce login 4 cas en fonction de 4 utilisateurs une série de 6 données fixes afin de les afficher sur l'onglet du classeur automatiquement voici les données (4 possibilités pour chaque)
Prénom
NOM
Téléphone
Fax
Mail
Initiales

J'ai essayé d'utiliser la méthode case au lieu de else if mais je n'y arrive pas merci de votre aide

Gilles
Hors Ligne
Rapport   Haut 

Re: Test login et traitement
#2
Webmestre

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1539

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 18-01-2010 17h30
Bonjour vg00, le Forum,

Compte tenu de l'explication fournie, pour faire simple et pour 4 cas seulement :

DANS UN MODULE DE CODE STANDARD (exemple : Module1)
Option Explicit

Function login() As String
    login = Application.UserName
End Function

Sub RecupUser()
Dim Prenom As String, Nom As String, Tel As String, Fax As String, Mail As String, Initiales As String
    Select Case login
    Case "Jean.Dupont"
        Prenom = "Jean"
        Nom = "Dupont"
        Tel = "0000000001"
        Fax = "0000000002"
        Mail = "jean.dupont@exemple.com"
        Initiales = "JD"
    Case "Guy.Martin"
        Prenom = "Guy"
        Nom = "Martin"
        Tel = "1111111111"
        Fax = "1111111112"
        Mail = "guy.martin@exemple.com"
        Initiales = "GM"
    Case "Corinne.Jules"
        Prenom = "Corinne"
        Nom = "Jules"
        Tel = "2222222221"
        Fax = "2222222222"
        Mail = "corinne.jules@exemple.com"
        Initiales = "CJ"
    Case "Claire.Chazal"
        Prenom = "Claire"
        Nom = "Chazal"
        Tel = "3333333331"
        Fax = "3333333332"
        Mail = "claire.chazal@exemple.com"
        Initiales = "CC"
    Case Else
        MsgBox "Login non répertorié"
    End Select

    If Prenom <> "" Then
        With Sheets(1)
            .Cells(1, 1).Value = Prenom
            .Cells(1, 2).Value = Nom
            .Cells(1, 3).Value = Tel
            .Cells(1, 4).Value = Fax
            .Cells(1, 5).Value = Mail
            .Cells(1, 6).Value = Initiales
        End With
    End If
End Sub
Au lancement de la procédure "RecupUser()", les éléments correspondant au user (s'il est reconnu) sont reportés sur la ligne 1 de la première feuille du classeur.

Cordialement,

Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 

Re: Test login et traitement
#3
Débutant XLPages

Inscription: 14/01/2010

Messages: 10

Système d'exploitation:
PC
Version Excel utilisée:
2003,2007
Posté le : 18-01-2010 18h07
C'est une très bonne réponse mais je n'en doutais pas vu le contenu du forum

j'ai donc adapté à mon besoin ce qui au final donne ceci sur l'écriture dans le xls
If Prenom <> "" Then
        With Sheets(1)
            .Cells(11, 2).Value = Prenom & " " & Nom
            .Cells(12, 2).Value = "Tél : " & Tel
            .Cells(13, 2).Value = "Fax : " & Fax
            .Cells(8, 9).Value = Initiales

mais sur cette dernière ligne (soit en I8) mon besoin est plus compliqué et l'on retrouve en partie le post
http://www.mdf-xlpages.com/modules/ne ... c_id=502&post_id=3108
dans lequel je décrivais le souhait d'aller inscrire à cet emplacement un numéro trouvé dans le fichier
 V:\COTATIONS\COTATIONS 2010.xls
au format AAAA-NNNN ou AAAA est en général l'année en cours et AAAA un numéro incrémentiel de 1 en 1

exemple partons d'un fichier vide
je voudrais en cliquant sur le xlt que mon fichier inscrive dans le fichier cotation ces informations ( | représentant un changement de colonne)
2010-0001 | valeur de A8 de l'onglet Offre | Valeur de L16 | Valeur de K11 | Initiales

et enregistre mon fichier ainsi 2010-0001C si l'on continue l'exemple

j'espère ne pas trop demandé et être à peu près clair

Gilles
Hors Ligne
Rapport   Haut 

Re: Test login et traitement
#4
Webmestre

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1539

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 18-01-2010 22h34
Re,

Si j'ai bien compris la demande, tu peux remplacer le module de code par celui-ci :
Option Explicit

Private Function login() As String
    login = Application.UserName
End Function

Sub InitOffre()
'myDearFriend! - www.mdf-xlpages.com
Dim Chemin As Variant
Dim Prenom As String, Nom As String, Tel As String, Fax As String
Dim Mail As String, Initiales As String, Ref As String
Dim N As Integer
   
    Select Case login
    Case "Jean.Dupont"
        Prenom = "Jean"
        Nom = "Dupont"
        Tel = "0000000001"
        Fax = "0000000002"
        Mail = "jean.dupont@exemple.com"
        Initiales = "JD"
    Case "Guy.Martin"
        Prenom = "Guy"
        Nom = "Martin"
        Tel = "1111111111"
        Fax = "1111111112"
        Mail = "guy.martin@exemple.com"
        Initiales = "GM"
    Case "Corinne.Jules"
        Prenom = "Corinne"
        Nom = "Jules"
        Tel = "2222222221"
        Fax = "2222222222"
        Mail = "corinne.jules@exemple.com"
        Initiales = "CJ"
    Case "Claire.Chazal"
        Prenom = "Claire"
        Nom = "Chazal"
        Tel = "3333333331"
        Fax = "3333333332"
        Mail = "claire.chazal@exemple.com"
        Initiales = "CC"
    Case Else
        MsgBox "Login non répertorié"
    End Select

    If Prenom <> "" Then
        With Sheets(1)
            .Cells(11, 2).Value = Prenom & " " & Nom
            .Cells(12, 2).Value = "Tél : " & Tel
            .Cells(13, 2).Value = "Fax : " & Fax
            'Détermine la réf de l'offre et met à jour les Cotations
            Ref = Cotations(.Cells(8, 1).Value, .Cells(16, 12).Value, _
                            .Cells(11, 11).Value, Initiales) & "C"
            .Cells(8, 9).Value = Ref & "/" & Initiales
        End With
        'Sauvegarde l'offre
        Chemin = Application.GetSaveAsFilename(Ref, "Offres (*.xls), *.xls", _
                                                , "Sauvegarde de l'offre...")
        If Chemin <> False Then
            ThisWorkbook.SaveAs Chemin
        End If
    End If
End Sub

Private Function Cotations(D As Date, Ste As String, Dest As String, _
                            Init As String) As String
'myDearFriend! - www.mdf-xlpages.com
Dim Ref As String
Dim L As Long
Dim N As Integer
Const Chemin As String = "V:\COTATIONS\COTATIONS 2010.xls"

    Application.ScreenUpdating = False
    With Workbooks.Open(Chemin)
        With .Sheets(1)
            'Num dernière ligne utilisée
            L = .Cells(.Rows.Count, 1).End(xlUp).Row
            'Détermine nouvelle référence cotation
            N = Val(Replace(.Cells(L, 1).Value, "2010-", "")) + 1
            Ref = "2010-" & Format(N, "0000")
            'Ajoute nouvelle ligne dans Cotations
            .Cells(L + 1, 1).Value = Ref
            .Cells(L + 1, 2).Value = D
            .Cells(L + 1, 3).Value = Ste
            .Cells(L + 1, 4).Value = Dest
            .Cells(L + 1, 5).Value = Init
        End With
        'Sauve et ferme le fichier Cotations
        .Close True
    End With
    Cotations = Ref
    Application.ScreenUpdating = True
End Function
... je suis parti de l'hypothèse où les enregistrements dans COTATIONS 2010.xls se font dans le premier onglet de ce classeur.

Attention, je n'ai mis aucun contrôle d'erreur dans ce code (cellules vides, Date en A8 mal saisie, etc....). A toi de gérer ces erreurs ou omissions éventuelles de l'utilisateur.

Cordialement,

Nb: merci d'utiliser la balise de Code pour insérer du Code VBA (ou même une formule) dans tes posts du forum.
Pour rappel :


Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 

Re: Test login et traitement
#5
Débutant XLPages

Inscription: 14/01/2010

Messages: 10

Système d'exploitation:
PC
Version Excel utilisée:
2003,2007
Posté le : 19-01-2010 11h27
Bonjour,
C'est super bien rédigé
ça m'avance franchement
par contre il faudrait juste que l'enregistrement du fichier soit effectuer de manière automatique dans le répertoire V:\COTATIONS\ plutôt que d'être obligé de lancer la macro INITOffre
et ne donne pas la main à l'utilisateur au niveau de l'enregistrement sauf si le répertoire réseau n'est pas accessible

Par rapport au besoin global une fois ceci réglé un grand pas sera déja franchi

du coup j'aborderai la suite du besoin à savoir :
intégrer avant enregistrement de l'offre le choix du client

j'entends par choix la mise en place initial d'un fichier CLIENT.XLS à mon avis toujours dans le répertoire V:\COTATIONS
avec consultation sans ouverture du fichier pour choix parmi liste existante possibilité de modifier ou d'ajout un client avec ces informations
choix : vide / M. / Mme / Mlle par coche
NOM (obligatoire)
PRENOM (facultatif)
Téléphone fixe
Téléphone portable
(au moins un téléphone parmi les deux)
Fax (facultatif)
SOCIETE


puis importation des données dans l'offre et à ce moment écriture dans COTATIONS 2010.XLS d
N° offre (2010-0104 par exemple) | Date récupérée dans cellule A8 détaillé plus bas | SOCIETE | valeur de choix (vide / M / MMe / Mlle) | rien | Initiales (provenant du VBA case ...) |

enregistrement de l'offre seulement à ce moment la pus reprise de la main pour ajouter des lignes dans l'offre

j'aimerais dans COTATIONS 2010.XLS soit ajouter une colonne soit faire en sorte qu'en cliquant sur la première cellule de chaque ligne ouvrir le fichier correspondant en donnant le choix d'ouvrir le fichier 2010-0104C.XLS ou 2010-0104C.PDF merci de me dire si c'est possible

Merci de votre aide précieuse et très constructive.

PS : code pour obtention de la date que j'ai mis dans thisworkbook mais ça peut certainement être amélioré
Private Sub Workbook_Open()
' DateduJour Macro '
Sheets("Offre").Select
Range("A8").Select
ActiveCell.FormulaR1C1 = "=today()"
Range("A8").Value = Range("A8").Value
End Sub

Gilles
Hors Ligne
Rapport   Haut 

Re: Test login et traitement
#6
Webmestre

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1539

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 21-01-2010 00h52
Bonsoir vg00,

Citation :
vg00 a écrit :
par contre il faudrait juste que l'enregistrement du fichier soit effectuer de manière automatique dans le répertoire V:\COTATIONS\ plutôt que d'être obligé de lancer la macro INITOffre
et ne donne pas la main à l'utilisateur au niveau de l'enregistrement sauf si le répertoire réseau n'est pas accessible

Par rapport au besoin global une fois ceci réglé un grand pas sera déja franchi

Désolé vg00, mais ça ne veut rien dire. Un enregistrement automatique, oui, mais quand ? Sur quel évènement ? Sur quelle action utilisateur ?
Par ailleurs, je te rappelle que c'est la procédure InitOffre() qui détermine la nouvelle référence d'offre, donc la sauvegarde ne peut se faire qu'à postériori...

A toutes fins utiles, tu déclencheras la sauvegarde du document par :
ThisWorkbook.SaveAs "V:\COTATIONS" & LeNomDuFichier
et la partie à supprimer de InitOffre() est donc :
       'Sauvegarde l'offre
        Chemin = Application.GetSaveAsFilename(Ref, "Offres (*.xls), *.xls", _
                                                , "Sauvegarde de l'offre...")
        If Chemin <> False Then
            ThisWorkbook.SaveAs Chemin
        End If

Citation :
vg00 a écrit :
du coup j'aborderai la suite du besoin à savoir :
intégrer avant enregistrement de l'offre le choix du client

j'entends par choix la mise en place initial d'un fichier CLIENT.XLS à mon avis toujours dans le répertoire V:\COTATIONS
avec consultation sans ouverture du fichier pour choix parmi liste existante possibilité de modifier ou d'ajout un client avec ces informations
choix : vide / M. / Mme / Mlle par coche
NOM (obligatoire)
PRENOM (facultatif)
Téléphone fixe
Téléphone portable
(au moins un téléphone parmi les deux)
Fax (facultatif)
SOCIETE


puis importation des données dans l'offre et à ce moment écriture dans COTATIONS 2010.XLS d
N° offre (2010-0104 par exemple) | Date récupérée dans cellule A8 détaillé plus bas | SOCIETE | valeur de choix (vide / M / MMe / Mlle) | rien | Initiales (provenant du VBA case ...) |

enregistrement de l'offre seulement à ce moment la pus reprise de la main pour ajouter des lignes dans l'offre

j'aimerais dans COTATIONS 2010.XLS soit ajouter une colonne soit faire en sorte qu'en cliquant sur la première cellule de chaque ligne ouvrir le fichier correspondant en donnant le choix d'ouvrir le fichier 2010-0104C.XLS ou 2010-0104C.PDF merci de me dire si c'est possible

Merci de votre aide précieuse et très constructive.

Mise à part le fait que je n'ai pas tout compris dans tes explications, je me dois déjà de t'avertir vg00 :

1) Pour rappel, Excel est avant tout un tableur et j'ai dans l'idée que ta perception de ce projet va un peu au-delà du raisonnable en terme d'automatisme et d'interaction entre fichiers divers... la multiplication des fichiers multiplie d'autant les difficultés de développement. Et pour peu que tu veuilles partager ce(s) document(s) sur réseau, je pense que tu cours à l'échec au final, c'est presque garanti.

2) Pour rappel encore, les Forums de discussions du présent site n'ont pas pour objet de réaliser et rendre des commandes d'application "clé en main". Tu trouveras sur le net d'autres forums Excel dans lesquels ces demandes sont visiblement acceptées et sans doute bien réalisées. Mais ce n'est pas l'objectif sur le site XLpages.com qui ne s'intéresse qu'aux échanges à valeur pédagogique.

Citation :
vg00 a écrit :
PS : code pour obtention de la date que j'ai mis dans thisworkbook mais ça peut certainement être amélioré
Private Sub Workbook_Open()
' DateduJour Macro '
Sheets("Offre").Select
Range("A8").Select
ActiveCell.FormulaR1C1 = "=today()"
Range("A8").Value = Range("A8").Value
End Sub

Tu peux échanger ton code par celui-ci :
Private Sub Workbook_Open()
' DateduJour Macro '
Sheets("Offre").Range("A8").Value = Date
End Sub
La fonction Date en VBA renvoie la date du jour.

... cela dit, je ne vois pas l'intérêt de ce code VBA à vrai dire. Autant mettre directement la formule suivante dans la cellule A8 :
=AUJOURDHUI()

Cordialement,


Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 

Re: Test login et traitement
#7
Débutant XLPages

Inscription: 14/01/2010

Messages: 10

Système d'exploitation:
PC
Version Excel utilisée:
2003,2007
Posté le : 04-01-2012 14h51
Bonjour, je cherche toujours à optimiser ce code contenu dans cotation.xlt
1) l'adresse mail est toujours identique suivant les 4 cas de log
2) la récupération du log machine n'est pas terribles j'ai du aller modifier l'utilisateur déclaré d'excel 2007 d'un collègue
3) l'effacement total des macros n'est pas pleeinement efficace il reste du code et à l'ouverture du fichier sauvegardé j'ai quand même la question voulez vous activer les macros alors que voudrais que le fichier n'en comporte plus !
4) à l'ouverture je souhaiterais utiliser un mini formulaire demandant la saisie
Société :
Contact :
Téléphone :
Portable :
Fax :
Mail :
5) compléter les 2 onglets offre et offre PV voir un suivant Offre AC qui viendra
à la manière la macro ci dessous mais je n'ai pas réussi à bien modifier
If Nom <> "" Then
        With Sheets(1)
            .Cells(10, 3).Value = Nom
            .Cells(11, 3).Value = Tel
            .Cells(12, 3).Value = Fax
            .Cells(13, 3).Value = Mail
            .Cells(7, 10).Value = Initiales
6) après sauvegarde et juste avant fermeture fichier ou impression
Remplissage de 2 onglets (structure identique de l'entête)pour l'instant d'autres éventuels à venir
1er onglet : Offre
2ème onglet : Offre PV

Société en M15
Contact en K10
L11 = concaténer(téléphone / portable)
Fax : L12
Mail : K13

7) et cerise sur le gâteau serait d'aller compléter le fichier cotation2012.xls
comme suit définition de la ligne à remplir
2012-0001 doit écrire en ligne x donc x=0001+1 et ainsi de suite
-en Dx venir mettre la date de création du fichier qui doit être figer par la macro afin que lorsque l'on ouvre après sauvegarde la date ne change plus
- en Fx : Société
- en Gx : Contact
- en Ix : les deux dernières lettre de la variable initiales

si le fichier cotation2012.xls est ouvert renvoyer un message voyez avec (utilisateur du fichier) pour qu'il vous laisse l'accès et réessayer
si la ligne ou l'on souhaite écrire n'est pas vide ? je ne sais pas il vaut mieux passer une ligne mais ???

8) on peut aussi définir le lieux de sauvegarde du fichier qui est le répertoire réseau d'ouverture du xlt

9) la sauvegarde pourrait elle aussi être inteligente obligatoire en xls pas de xlsx...
et le 2012-000x fixé par test de présence de fichier dans répertoire et test de dernier remplissage dans le fichier cotation2012...

10) remplacer le 2011 de la macro par une variable de l'année en cours


Si quelqu'un est interessé on pourras essayer de scinder les différents axes pour faire évoluer cela

----


Option Explicit
Function login() As String
    login = Application.UserName
End Function

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim StartLine As Long, LineCount As Long

'Tu insères ton code ici que tu veux exécuter à l'ouverture

'd'un nouveau classeur basé sur le modèle.

 

'Ce qui suit efface toute la procédure événementielle "Workbook_Open"
On Error Resume Next
If ThisWorkbook.Path = "" Then
    If ThisWorkbook.VBProject.Protection Then Exit Sub
    With ThisWorkbook.VBProject.VBComponents("ThisWorkbook").CodeModule
        StartLine = .ProcStartLine("Workbook_Open", 0)
        If StartLine Then
            LineCount = .ProcCountLines("Workbook_Open", 0)
            .DeleteLines StartLine, LineCount
        End If
    End With
End If
End Sub


Private Sub Workbook_Open()
' DateduJour Macro '
Sheets("Offre").Range("B7").Value = Date
Dim Nom As String, Tel As String, Fax As String, Mail As String, Initiales As String
    Select Case login
    Case "xxxxxxxx"
        Nom = "xxxxxxxx"
        Tel = "Tél : xxxxxxxx"
        Fax = "Fax : xxxxxxxx"
        Mail = "a.a@a.a"
        Initiales = "2011-0000C/xx"
    Case "yyyyyyyy"
        Nom = "yyyyyyyy"
        Tel = "Tél : yyyyyyyy"
        Fax = "Fax : yyyyyyyy"
        Mail = "a.a@a.a"
        Initiales = "2011-0000C/yy"
    Case "zzzzzzz"
        Nom = "zzzzzzz"
        Tel = "Tél : zzzzzzz"
        Fax = "Fax :zzzzzzz"
        Mail = "a.a@a.a"
        Initiales = "2011-0000C/zz"
    Case "wwwwwww"
        Nom = "wwwwwww"
        Tel = "Tél : wwwwwww"
        Fax = "Fax : wwwwwww"
        Mail = "a.a@a.a"
        Initiales = "2011-0000C/ww"
    Case Else
        MsgBox "Login non répertorié"
    End Select

    If Nom <> "" Then
        With Sheets(1)
            .Cells(10, 3).Value = Nom
            .Cells(11, 3).Value = Tel
            .Cells(12, 3).Value = Fax
            .Cells(13, 3).Value = Mail
            .Cells(7, 10).Value = Initiales
        End With
    End If
End Sub



Edité par vg00 le 04/01/2012 15:22:20
Hors Ligne
Rapport   Haut 


Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

[Recherche avancée]


Qui consulte actuellement ce sujet ?   1 Utilisateur(s) anonymes