Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
Je souhaite faire un Excel qui regroupe les membres d'une équipe qui par la suite conseillera des formations/documents aux différents utilisateurs et leurs fonctions.
J'ai mis mon nez dans VBA les UserForms depuis peu mais me voilà bloqué.
Lorsque que j'ouvre mon document, j'ai deux choix :
- me connecter
- m'enregistrer
Or, lorsque je souhaite mémoriser les informations de l'utilisateur qui s'enregistre. Cela n'arrive pas à garder sur la feuille que j'ai créée en adéquation.
Savez-vous où est mon problème dans ma situation ?
PS : je vous mets en joint le commencement de ce que j'ai fait.
Voir en PJ une version commentée et qui évite tous les formulaire.hide ou .show et ainsi les basculement "intempestifs"..
voir les commentaires pour comprendre la logique
à partir de la feuille, tu as tes deux boutons
le bouton enregistrement permet de saisir un nouvel utilisateur. et c'est tout...==> Inscription et retour sur la feuille
le bouton Connexion:
1) saisie d'un matricule
==> s'il existe==> bouton Demarre dispo
==> s'il n'existe pas==> soit erreur de saisie==> utilisateur modifie sa saisie
==> soit c'est un nouveau matricule ===> le lien est actif pour pouvoir enregistrer
une fois l'enregistrement effectué, retour au formulaire de connexion sur lequel le bouton Demarrer est...
Bonjour Pauuul, et bienvenu sur XLD,
Il manque pas mal de chose et je n'ai pas tout compris. Mais au moins pour vous dépatouiller :
Validation inscription :
VB:
Private Sub Valider_Click()
With Sheets("EQUIPE")
If Application.CountIf(.[C:C], Identifiant) > 0 Then ' Cas identifiant existe
MsgBox "L'dentifiant existe" ' Mettre ici code quand l'identifiant est bon
Else
MsgBox "L'dentifiant est inconnu" ' Mettre ici code quand l'identifiant est incorrect
End If
Unload Connexion
End With
End Sub
Validation inscription :
Code:
Private Sub Valider_Click()
With Sheets("EQUIPE")
If Application.CountIf(.[A:A], Nom) > 0 Then ' Cas du "déjà inscrit"
MsgBox "Vous êtes déjà inscrit."
Exit Sub
End If
DL = 1 + Range("A65500").End(xlUp).Row ' Première ligne vide de la liste des noms.
.Cells(DL, "A") = Nom
.Cells(DL, "B") = Prenom
.Cells(DL, "C") = Matricule
Unload Inscription
End With
End Sub
C'est évidemment incomplet mais ne génère pas d'erreur et enregistre bien les nouveaux venus.
Bonjour Pauuul, et bienvenu sur XLD,
Il manque pas mal de chose et je n'ai pas tout compris. Mais au moins pour vous dépatouiller :
Validation inscription :
VB:
Private Sub Valider_Click()
With Sheets("EQUIPE")
If Application.CountIf(.[C:C], Identifiant) > 0 Then ' Cas identifiant existe
MsgBox "L'dentifiant existe" ' Mettre ici code quand l'identifiant est bon
Else
MsgBox "L'dentifiant est inconnu" ' Mettre ici code quand l'identifiant est incorrect
End If
Unload Connexion
End With
End Sub
Validation inscription :
Code:
Private Sub Valider_Click()
With Sheets("EQUIPE")
If Application.CountIf(.[A:A], Nom) > 0 Then ' Cas du "déjà inscrit"
MsgBox "Vous êtes déjà inscrit."
Exit Sub
End If
DL = 1 + Range("A65500").End(xlUp).Row ' Première ligne vide de la liste des noms.
.Cells(DL, "A") = Nom
.Cells(DL, "B") = Prenom
.Cells(DL, "C") = Matricule
Unload Inscription
End With
End Sub
C'est évidemment incomplet mais ne génère pas d'erreur et enregistre bien les nouveaux venus.
J'ai commencé a regardé c'est vraiment intéressant, est ce que avec ceci : si jamais la personne s'inscrivant se trompe (faute de frappe, erreur de matricule ou autre) lors de l'inscription ils pourront modifier, ou la ligne aura automatiquement enregistrer et aucuns retours possible ?
NB : Oops je pense que faut je prennes les bases du VBA parce que ça va pas du tout.
Re,
Dans l'état c'est écrit en "dur".
Pour modifier il faudrait un bouton "Mise à jour" ou "Modifier"
Ca touche à la structure que vous voulez adopter, ce n'est pas un problème de code mais de spécifications.
La méthode avec un tableau me semble plus intéressant de ce que j'avais a l'idée. Merci !
J'ai deux interrogations :
- J'ai regardé ton code, les profils peuvent s'enregistrer a l'infini sans que le code nous bride sur le fait d'être déjà présent dans les registres, comment faire dans le cas ou j'essaye de m'inscrire alors que je suis déjà inscrit ? Je crois que ce j'ai testé pour vérifier qu'un utilisateur est déjà inscrit, c'est dans une méthode que sans Tableau ...
- Est-ce que c'est possible, une fois inscrit et/ou identifier, de passer en stade de "compte" ? (Je m'explique, une fois enregistré j'aimerai par la suite être garder en mémoire en tant qu'utilisateur connecté et avoir l'accès a mon avancement personnel.) Je sais pas si j'ai été clair ...
Merci d'avance !
Je te mets l'avancement actuel en joint ou je suis rendu !
pour le control d'un matricule déjà existant, tu as bien récupéré la ligne de code de Sylvanu (que je salue au passage également)
je l'ai juste modifié pour faire référence au nom de la colonne "Matricule" plutot que C:C
l'avantage:
1) je trouve qu'on voit tout de suite sur quelle colonne on travaille
2) si tu déplace la colonne dans le tableau.. le code ne change pas. alors que C:C devrait etre adapté
VB:
Private Sub Valider_Click()
With Sheets("EQUIPE").ListObjects("Tab_Users")
If Application.CountIf(.ListColumns("Matricule").Range, Matricule) > 0 Then ' Cas du MATRICULE "déjà inscrit"
MsgBox "Vous êtes déjà inscrit."
Else
.ListRows.Add
LastLine = .ListRows.Count
.ListColumns("NOM").DataBodyRange(LastLine) = Me.Nom
.ListColumns("Prénom").DataBodyRange(LastLine) = Me.Prenom
.ListColumns("Matricule").DataBodyRange(LastLine) = Me.Matricule
End If
End With
End Sub
pour sauvegarder l'utilisateur actif, suffirait d'ajouter une variable globale "ActifUser"
mais. en fait, ca dépend de ce que tu veux faire ensuite
PS: j'ai vu que tu avais remis les "bascules" entre les deux formulaires
à mon avis il te manque une ou des conditions
ex: l'utilsateur veut faire une nouvelle inscription.. si il annule, il se retrouve automatiquemennt sur la connexion.., mais ca. c'est du "facing"
pour le control d'un matricule déjà existant, tu as bien récupéré la ligne de code de Sylvanu (que je salue au passage également)
je l'ai juste modifié pour faire référence au nom de la colonne "Matricule" plutot que C:C
l'avantage:
1) je trouve qu'on voit tout de suite sur quelle colonne on travaille
2) si tu déplace la colonne dans le tableau.. le code ne change pas. alors que C:C devrait etre adapté
VB:
Private Sub Valider_Click()
With Sheets("EQUIPE").ListObjects("Tab_Users")
If Application.CountIf(.ListColumns("Matricule").Range, Matricule) > 0 Then ' Cas du MATRICULE "déjà inscrit"
MsgBox "Vous êtes déjà inscrit."
Else
.ListRows.Add
LastLine = .ListRows.Count
.ListColumns("NOM").DataBodyRange(LastLine) = Me.Nom
.ListColumns("Prénom").DataBodyRange(LastLine) = Me.Prenom
.ListColumns("Matricule").DataBodyRange(LastLine) = Me.Matricule
End If
End With
End Sub
pour sauvegarder l'utilisateur actif, suffirait d'ajouter une variable globale "ActifUser"
mais. en fait, ca dépend de ce que tu veux faire ensuite
PS: j'ai vu que tu avais remis les "bascules" entre les deux formulaires
à mon avis il te manque une ou des conditions
ex: l'utilsateur veut faire une nouvelle inscription.. si il annule, il se retrouve automatiquemennt sur la connexion.., mais ca. c'est du "facing"
Oui, je m'inspire de vos conseils a tout les deux pour pouvoir atteindre mon objectif (merci a vous deux).
Je suis tout a fait d'accord la méthode rappelant la colonne matricule plutôt que C:C est plus intéressante. (j'ai apporté cette modification.)
J'ai préféré garder la bascule des deux UserForms, car si jamais l'utilisateur souhaite s'inscrire ou se connecter et se trompe de bouton, il peut directement accéder au bon UF avec les boutons "Pas encore inscrit?" et "Annuler".
Okay! Je vais tester cette après-midi l'histoire du "ActifUser". De plus j'ai essayé de voir en cas d'un profil déjà enregistré, de me connecter mais rien a faire il me considère tout le temps sur "l'identifiant est inconnu" (j'ai repris la méthode de vérification de l'UF "Inscription" pour constater s'il l'utilisateur est déjà inscrit) Sais tu ou est mon erreur ? Ou alors l'erreur vient d'ailleurs ?
VB:
Private Sub Valider_Click()
With Sheets("EQUIPE").ListObjects("Tab_Users")
If Application.CountIf(.ListColumns("Matricule").Range, Matricule) Then
MsgBox "L'identifiant existe" ' Mettre ici code quand l'identifiant est bon
Connexion.Hide
Inscription.Hide
Else
MsgBox "L'identifiant est inconnu" ' Mettre ici code quand l'identifiant est incorrect
Inscription.Show
Connexion.Hide
End If
Unload Connexion
Unload Inscription
End With
End Sub
Voir en PJ une version commentée et qui évite tous les formulaire.hide ou .show et ainsi les basculement "intempestifs"..
voir les commentaires pour comprendre la logique
à partir de la feuille, tu as tes deux boutons
le bouton enregistrement permet de saisir un nouvel utilisateur. et c'est tout...==> Inscription et retour sur la feuille
le bouton Connexion:
1) saisie d'un matricule
==> s'il existe==> bouton Demarre dispo
==> s'il n'existe pas==> soit erreur de saisie==> utilisateur modifie sa saisie
==> soit c'est un nouveau matricule ===> le lien est actif pour pouvoir enregistrer
une fois l'enregistrement effectué, retour au formulaire de connexion sur lequel le bouton Demarrer est maintenant dispo..
Voir en PJ une version commentée et qui évite tous les formulaire.hide ou .show et ainsi les basculement "intempestifs"..
voir les commentaires pour comprendre la logique
à partir de la feuille, tu as tes deux boutons
le bouton enregistrement permet de saisir un nouvel utilisateur. et c'est tout...==> Inscription et retour sur la feuille
le bouton Connexion:
1) saisie d'un matricule
==> s'il existe==> bouton Demarre dispo
==> s'il n'existe pas==> soit erreur de saisie==> utilisateur modifie sa saisie
==> soit c'est un nouveau matricule ===> le lien est actif pour pouvoir enregistrer
une fois l'enregistrement effectué, retour au formulaire de connexion sur lequel le bouton Demarrer est maintenant dispo..
Merci pour ces commentaires j'ai désormais compris ce que tu m'expliquais ! (Et merci du temps que tu m'accordes pour m'aider à m'améliorer dans le domaine !)
Concernant l'UserActif que tu as mis en place y'a t-il une solution visuelle qui permet de savoir : Qui est Actif en temps réel ? par exemple avec le prénom et le nom de l'utilisateur qu'on récupère dans nos registres enregistrés ?
Imaginons que la case est vide dans l'Excel : ...
... puis après connexion :
Merci encore ! J'ai apporté les modifications pour ne faire qu'apparaitre que le prénom et le nom de l'utilisateur actif.
Lors de l' "Inscription" cela marche comme je le souhaite. MAIS :
J'ai remarqué que durant l'exécution du programme de "Connexion", lors de la demande d'affichage d'un utilisateur il me renvoi automatiquement sur la feuille "Equipe". Comment je peux éviter se renvoi à la feuille "Equipe" tout en exécutant le programme ? (J'ai essayé avec la formule Application.ScreenUpdating = False/True pour notamment caché mais cela ne fonctionne pas)
PS : Je ne sais pas si ce que j'ai fait est extrêmement efficace, mais ca marche donc je suis content ! 🙂
PS 2 : Je te remercie encore pour l'aide que tu m'apportes
Prochaine mission : Grâce au bouton "Choisir son service et son poste" renvoyer des fenêtres de choix afin de catégoriser l'utilisateur dans un service et dans un métier spécifique, qui par la suite lui demandera de faire les formations/immersions/lecture de documents correspondant a sa fonction !! 😀
As/avez-tu/vous des conseils avant que je me lance la dedans ?
pour ne pas basculer sur la feuille Equipe;. il suffit de ne pas l'activer quand tu fais ta recherche de matricule pour récupérer nom et prénom
et autre, chose: pourquoi persistes tu à remettre systématiquement les formulaire.hide ??
cacher un formulaire qui n'a pas été affiché. c'est quoi l'intérêt?? à part s'exposer à un bug ?
pour le bouton de service: définis ton formulaire avec des combobox alimentés par des listes
et pour la suite... une fois que tu auras choisi le service et poste. tu feras autre chose??
pour ne pas basculer sur la feuille Equipe;. il suffit de ne pas l'activer quand tu fais ta recherche de matricule pour récupérer nom et prénom
et autre, chose: pourquoi persistes tu à remettre systématiquement les formulaire.hide ??
cacher un formulaire qui n'a pas été affiché. c'est quoi l'intérêt?? à part s'exposer à un bug ?
pour le bouton de service: définis ton formulaire avec des combobox alimentés par des listes
et pour la suite... une fois que tu auras choisi le service et poste. tu feras autre chose??
Concernant l'utilisation du .Hide, j'avais complétement oublié d'apporter les modifications que tu m'avais conseillé !
Je prends note du ComboBox ! Les listes je les fais en amont dans un Excel (avec des liens potentiels etc...) ?
Mon objectif serai une fois l'utilisateur lié a son service et son poste, d'avoir le cheminement de sa formation (qu'il pourra cocher, comme une sorte de "To Do List", au fur et a mesure) afin qu'il se soit apte, a la fin du processus, a faire correctement son travail. Ainsi a l'aide d'une barre de progression de sa formation il pourra voir facilement son avancement.
Chaque utilisateur aura sa propre progression différente.
Tu aurai des commentaires la dessus, tu trouves que c'est une bonne idée ?
avant de te lancer dans du codage vba, il faut que tu définisses correctement le projet
1) utiliser des tables structurées pour préparer les listes
2) créer une Base de données qui regroupe tous les utilisateurs avec toutes les formations possibles à réaliser
3) créer un "modèle" de présentation que chaque utilisateur pourra visualiser avec ses informations.
ensuite, le code ne sera la que pour saisir / extraire des informations
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD