IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Incrémentation d'une référence en fonction de l'utilisateur dans un userform [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 6
    Par défaut Incrémentation d'une référence en fonction de l'utilisateur dans un userform
    Bonjour,

    Je suis en train de réaliser un userform qui me servira à remplir un petit tableau de suivi une fois validé par l'utilisateur, mais je bloque sur l'un de mes champs, je me tourne donc vers vous pour obtenir de l'aide ou des pistes de réflexion.


    Objectif de l'userform: Sélectionner des champs afin de standardiser une mise en forme: date, statuts, références.... puis une fois le tout complété, intégration dans un fichier de suivi.

    Mon blocage:
    Je souhaite que l'userform indique à l'utilisateur la référence de sa nouvelle demande. Là où je coince, c'est que cette référence n'est pas seulement celle de la dernière ligne en y ajoutant 1, mais elle dépend de l'utilisateur.
    De manière concrète, cela donne:

    En colonne P d'une feuille Suivi, j'ai des références de type initiales avec le numéro de la référence. par exemple, cela donne MAR001, MAR002,NIC001,..., NIC098, bref, chaque utilisateur à sa suite de références.

    Par défaut, l'userform considère que c'est l'utilisateur qui saisit sa requête, j'ai donc commencé par déterminer les initiales
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    With Sheets("Liste base")
            Initiales = Application.VLookup(Environ("UserName"), Range("User"), 3, False)
     
       End With
    *Liste Base est ma feuille regroupant les différents menus déroulants et tables de correspondance.
    **User est une plage nommée de 3 colonnes permettant de faire coller les initiales avec les références de la machine.

    Par contre, je ne vois pas trop comment chercher la dernière référence de l'utilisateur, je ne voulais pas prendre la dernière en en bas de la colonne qui commence par les initiales si jamais pour x ou y raison elles ne sont pas dans l'ordre dans le fichier de suivi.
    Donc, à cause des initiales, je ne vois pas comment trouver la dernière référence d'un utilisateur dans la colonne P. J'étais parti sur des droite machin truc, mais ça devient usine à gaz.
    Bref, si c'est l'utilisateur NIC qui ajoute une référence, j'aimerai juste que l'userform me propose NIC099 ou MAR003 pour MAR.

    Merci par avance pour vos aides et n'hésitez pas si vous avez besoin de précisions.


    (Je suis parti sur des références à 3 chiffres, mais ça pourrait potentiellement aller à 4 chiffres un jour, par contre les initiales sont toujours de 3 lettres).

  2. #2
    Membre Expert
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juillet 2004
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 725
    Par défaut
    Bonjour à toi,

    Je te propose ceci, étant donnée que tu viens insérer tes données les une à la suite des autres au fur et à mesure.
    On est d'accord que la dernière valeur de l'utilisateur X sera la première trouvé en partant de la fin

    Du coup, tu fait un Find en partant tout en bas avec searchdirection:=xlPrevious
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A:A").Find("Nico", Cells(25, 1), xlValues, SearchDirection:=xlPrevious)
    Petit exemple, sur la colonne A je cherche Nico* à partir de la dernière cellule (ici mise manuellement ligne 25).

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 6
    Par défaut
    Hello,

    En fait, je voulais une solution qui me trouve la valeur maximale dans le tableau si jamais un petit malin s'est amusé à intervertir les références dans les lignes.
    Mais comme on est sensé ajouter la ligne en bas, je suis resté sur la méthode la plus simple! Et ça ira bien ^^

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        Set Derref = Sheets("suivi").Range("P:P").Find(Initiales, Cells(DerLigne + 1, 16), searchdirection:=xlPrevious)
            If Derref Is Nothing Then
                    TextBox8 = Initiales & "001"
            Else:
            nr = Len(Derref) - 3
            TextBox8 = Initiales & Right(Derref, nr) + 1
    Merci!

  4. #4
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,


    je me permet deux remarques :

    1) si tu restes sur cette méthode, fiabilise en prévoyant un tri sur ce champs, tu retrouveras quoi qu'il arrive chaque "dernier enregistrement" en dernière position du groupe

    2) j'espère que tu ne dépasseras pas les 999, sinon il va falloir prévoir le coup pour le "nr"


    du coup, une proposition :

    pourquoi ne pas éclater la référence en deux colonnes.
    La première reçoit le matricule de l'agent
    La seconde reçoit le numéro

    Incrémenter devient très simple avec une fonction SOUS.TOTAL(Argument MAX) sur le champs "Matricule" filtré avec le matricule de l'agent

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. montrer ou cacher une liste en fonction de l'utilisateur
    Par leon1983 dans le forum SharePoint
    Réponses: 3
    Dernier message: 21/07/2008, 22h26
  2. Réponses: 3
    Dernier message: 22/03/2008, 11h48
  3. Réponses: 5
    Dernier message: 20/06/2007, 15h21
  4. Incrémenter automatiquement une référence
    Par gbrion dans le forum WinDev
    Réponses: 19
    Dernier message: 04/06/2007, 18h30
  5. Réponses: 3
    Dernier message: 18/01/2007, 18h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo