Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Vba

Marion59

XLDnaute Nouveau
Bonjour

Je suis débutante sur VBA et je suis face à un problème.

En fait je voudrai récupérer des valeurs dans une feuille et à partir d'une inputbox pouvoir cliquer sur la ligne qui m’intéresse et y rajouter une valeur.


J'ai réussi à faire un code mais le soucis c'est que quand je clique sur OK ou annuler ça ne marche pas...

Pourriez vous m'aider?

Merci beaucoup.

Marion



Private Sub lb_Click()
ms = InputBox("Enregistrement " & lb.List(, 0) _
& vbLf & " " & lb.List(, 1), "result1")
Range("K" & lb.ListIndex + 2) = ms

End Sub


Sub UserForm_Initialize()
lb.RowSource = _
Range("a2").Address & ":" & _
Worksheets("feuil1").Range("k" & Range("a2").End(xlDown).Row).Address

End Sub
 

Pièces jointes

  • Classeur1.xlsm
    16.9 KB · Affichages: 68
  • Classeur1.xlsm
    16.9 KB · Affichages: 74
  • Classeur1.xlsm
    16.9 KB · Affichages: 76

Papou-net

XLDnaute Barbatruc
Re : Vba

Bonsoir Marion59, et bienvenue à toi,

Sans pouvoir l'expliquer clairement, le problème vient de la procédure d'initialisation de ta ListBox.

Si tu enlèves la colonne K, ça fonctionne sans problème :

Code:
Sub UserForm_Initialize()
lb.RowSource = _
Range("a2").Address & ":" & _
Worksheets("feuil1").Range("j" & Range("a2").End(xlDown).Row).Address

End Sub
Espérant avoir résolu.

Cordialement.
 

dra72

XLDnaute Occasionnel
Re : Vba

Bonsoir (ou plutôt bonjour) à vous,

Ton code boucle sur lui-même.

Pour contourner le problème je te propose le code suivant:
Code:
Dim Flag As Integer
Private Sub lb_Click()

If Flag > 0 Then
  Flag = Flag + 1
  If Flag = 3 Then Flag = 0
  Exit Sub
End If
ms = InputBox("Enregistrement " & lb.List(, 0) _
& vbLf & "  " & lb.List(, 1), "result1")
Flag = 1
Range("K" & lb.ListIndex + 2) = ms

End Sub

Sub UserForm_Initialize()

lb.RowSource = _
Range("a2").Address & ":" & _
Worksheets("feuil1").Range("k" & Range("a2").End(xlDown).Row).Address

End Sub

Cordialement
 

Marion59

XLDnaute Nouveau
Re : Vba

Merci à vous pour vos réponses, vos deux solutions fonctionnent, par contre je souhaiterai savoir comment je dois faire pour que l'inputbox n'accepte que des chiffres compris entre 0 et 20 000, et que si la personne entre un chiffre non compris entre cet intervalle, la personne à un messagebox "veuillez entrer un chiffre entre 0 et 20 000" ou que si la personne rentre un nombre décimal, la personne reçoit le msgbox "Les nombres décimaux ne sont pas acceptés, veuillez entrer un nombre entier".


D'avance merci pour votre aide, je suis débutante.

Bonnes fêtes de fin d'année

Marion
 

dra72

XLDnaute Occasionnel
Re : Vba

Bonjour,

A y regarder de plus près, je pense que la meilleure solution pour toi est celle de Papou-net puisque la colonne K n'est pas listée dans ta ListBox.

Pour ce qui est de ton nouveau problème, je te propose ceci en y incluant la gestion du bouton Annuler.


Code:
Private Sub lb_Click()

ms = InputBox("Enregistrement " & lb.List(, 0) _
& vbLf & "  " & lb.List(, 1), "result1")
If ms = "" Then Exit Sub
If Not IsNumeric(ms) Or Val(ms) < 0 Or Val(ms) > 20000 Then
  MsgBox "veuillez entrer un chiffre entre 0 et 20 000"
  Exit Sub
End If
If InStr(ms, ".") + InStr(ms, ",") > 0 Then
  MsgBox "Les nombres décimaux ne sont pas acceptés, veuillez entrer un nombre entier"
  Exit Sub
End If
Range("K" & lb.ListIndex + 2) = ms

End Sub

Sub UserForm_Initialize()
lb.RowSource = _
Range("a2").Address & ":" & _
Worksheets("feuil1").Range("j" & Range("a2").End(xlDown).Row).Address

End Sub

Par contre, je pense que l'évenement double-click serait plus approprié que click.
Essaie de rentrer une valeur non autorisée et tu devrais comprendre pourquoi.

Bonne journée et joyeux noël à tous.
 

Marion59

XLDnaute Nouveau
Re : Vba

Bonsoir,

Merci c'est super ça marche et j'ai mis un double click.

Par contre je souhaite mettre en place une userform avec une combobox et une zone de texte permettant de rentrer le mot de passe.

J'ai essayé quelque chose mais cela ne fonctionne pas...

Je souhaiterai que l'utilisateur rentre son mot de passe, si le mot de passe est correct une autre userform apparaît et si le mot de passe est incorrect le message suivant apparaît "mot de passe incorrect, il vous reste un essai" avec une nouvelle chance de rentrer le mot de passe, si le mot de passe est correct la userform se lance sinon le message suivant apparaît "mot de passe incorrect, fermeture du fichier ..."

J'ai fais ce code mais cela ne fonctionne pas correctement, le premier essai marche mais si l'utilisateur se trompe, il n'a pas de deuxième chance et le fichier se ferme directement

Private Sub CommandButton1_Click()
If ComboBox1 = "ope1" & TextBox1 = "mdp1" Then
UserForm2.Show
Else
MsgBox ("mot de passe incorrect, il vous reste un essai")
End If
If ComboBox1 = "ope1" & TextBox1 = "mdp1" Then
UserForm2.Show
Else
MsgBox ("mot de passe incorrect, fermeture du fichier ...")
ActiveWorkbook.Close
End If
End Sub


Private Sub UserForm_Initialize()
ComboBox1.RowSource = "données!A2:A10" 'récupération des données
End Sub


Pourriez vous m'aider ?

Merci beaucoup

Marion
 
Dernière édition:

Papou-net

XLDnaute Barbatruc
Re : Vba

Bonsoir Marion59,

Ci-joint un exemple de fichier répondant à ta demande.

En te souhaitant un joyeux Noël.

Cordialement.
 

Pièces jointes

  • Marion59.xlsm
    20 KB · Affichages: 67
  • Marion59.xlsm
    20 KB · Affichages: 70
  • Marion59.xlsm
    20 KB · Affichages: 61

Marion59

XLDnaute Nouveau
Re : Vba

Merci Papou-net,

Par contre je rencontre un petit problème, j'ai essayé d'intégrer d'autres utilisateur et mot de passe mais ça ne fonctionne pas.
Je souhaiterai mettre
If ComboBox1.Value = "ope1" And TextBox1.Value = "mdp1" OU If ComboBox1.Value = "ope2" And TextBox1.Value = "mdp2" OU if ...

Then
Me.Hide
UserForm3.Show
Exit Sub
Else
Select Case Essai
Case 0
MsgBox ("mot de passe incorrect, il vous reste un essai")
Essai = Essai + 1
TextBox1 = ""
TextBox1.SetFocus
Exit Sub
Case 1
MsgBox ("mot de passe incorrect, fermeture du fichier")
ThisWorkbook.Close
End Select
End If
End sub


Est ce possible ?
Encore merci pour ton aide.

Joyeux Noël à toi
Marion
 

Papou-net

XLDnaute Barbatruc
Re : Vba

Est ce possible ?

Bonjour Marion59,

Oui bien sûr, c'est possible, mais il faudrait savoir comment sont définis les mots de passe : par les utilisateurs eux-mêmes ou par l'administrateur ?
Dans le premier cas, il faut créer un module de gestion spécifique, dans le second, il faudrait les inclure dans la feuille "données", à côté des noms d'utilisateurs par exemple.
Dans l'attente de ta réponse.
Joyeux Noël à toi également.

Cordialement.
 

Marion59

XLDnaute Nouveau
Re : Vba

En fait je souhaiterai que les noms d'utilisateur aillent de ope1 à ope10 et les mots de passe seront mdp1 pour ope1, mdp2 pour ope2,...

J'ai essayer d'utiliser la fonction elself que j'ai trouvé sur internet mais ça ne marche pas.

En fait je voudrai juste mettre plusieurs conditions mais je ne sais pas comment faire pour dire si ... OU ... OU ...
If ComboBox1.Value = "ope1" And TextBox1.Value = "mdp1" OU If ComboBox1.Value = "ope2" And TextBox1.Value = "mdp2" OU if ...

Je ne sais pas si je suis très claire ?
 

Dull

XLDnaute Barbatruc
Re : Vba

Salut Marion59, Papou, dra72, le Forum

Sur le Fichier de Papou un essai avec quelques Petits trucs supplémentaires
1/ Feuille Cachée où il y a a les Logins & MdP
2/ ajout d'un essai supplémentaire 3 au lieu de 2
3/ Impossibilité de fermer l'UserForm
4/ Si Login = ope1 alors déblocage de le feuille données (Administrateur)

Login: ope1: Mot de Passe: MdP1
Login: ope2: Mot de Passe: MdP2
etc

ATTENTION: pour les mots de Passe "MdP1" est différent de "mdp1" faire très attention à la casse
Bonne Journée et Joyeuses Fêtes
 

Pièces jointes

  • Marion59.xlsm
    22.7 KB · Affichages: 44
  • Marion59.xlsm
    22.7 KB · Affichages: 55
  • Marion59.xlsm
    22.7 KB · Affichages: 57

Papou-net

XLDnaute Barbatruc
Re : Vba

Bonjour Dull, dra 72, le Forum,
Re Marion,

Ci-joint un exemple avec gestion des mots de passe.
Rien ne t'empêche d'entrer manuellement les mots de passe dans la feuille "données", comme l'a fait Dull.

Espérant avoir répondu.

Bonnes fêtes à tous.
 

Pièces jointes

  • Marion59-1.xlsm
    24.1 KB · Affichages: 51

Marion59

XLDnaute Nouveau
Re : Vba

Merci à vous,

Par contre comment faire pour masquer une feuille ? Je suis allée dans les propriétés de la feuille concernée et dans visible j'ai coché 0-xlSheetHidden.

Seulement lorsque l'on est sur le fichier Excel en cliquant sur afficher la feuille réapparaît ...
Comment faire pour masquer totalement la feuille ? et comment faire pour que si on veut l'afficher un mot de passe soit demandé ?

Merci beaucoup pour votre aide
 

Dull

XLDnaute Barbatruc
Re : Vba

Re Marion, le fil

As tu vu mon 1/ ?
Regarder dans le module ThisWorkbook (Alt + F11)

Private Sub Workbook_Open()
Feuil1.Visible = xlSheetHidden
UserForm1.Show
End Sub
A l'ouverture de ton Fichier la Feuil1 (CodeName) ou Sheets("données") sera masquée

Feuil1.Visible = xlSheetHidden peut être afficher via Feuille/ afficher (Excel 2003)
Accueil/Format/Masquer&Afficher/Afficher le Feuille (Excel 2007 et +)

Feuil1.Visible = xlSheetVeryHidden ne peut être affiché que par le VBA

Fait une recherche sur xlSheetVeryHidden tu verra plein d'exemples qui en parles ou mieux surligne xlSheetVeryHidden et appuie sur la touche F1

Si tu as des soucis, revient sur ce fil, Papou , moi ou un autre Membre se fera un plaisir de t'aiguiller.

Bonne journée
 

Marion59

XLDnaute Nouveau
Re : Vba

En fait c'était resté en xlsheethidden ...

Maintenant ça fonctionne à merveille ! Merci !

Par contre est ce que tu sais d'où vient ce message d'erreur " Mémoire insuffisante pour afficher en entier"

Bonne journée à toi aussi
 

Discussions similaires

Réponses
4
Affichages
401
Réponses
7
Affichages
486
Réponses
6
Affichages
435
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…