Prog vba pour excel code pour plusieur pers

Résolu
jojo9999 Messages postés 28 Statut Membre -  
jojo9999 Messages postés 28 Statut Membre -
Bonjour,
je veut crée une useforme avec 6 optionbouton qui prepesente des personnes.
il y a aussi une textbox pour que l'ont tape un code qui ce trouve dans des cellules de la feuill1.
chaque personne a donc un code different donc 6 cellules dans la feuill1.
donc mon prog commence comme ca:
dim code as string
dim nomutilisateur as string
dim code1 as string
dim code2 as string
dim code3 as string
dim code4 as string
dim code5 as string
dim code6 as string
private sub initializeuseform1()
code = textbox1.value
code1 = sheets ("feuil1").range("b2").value
code2 = sheets ("feuil1").range("b3").value
code3 = sheets ("feuil1").range("b4").value
code4 = sheets ("feuil1").range("b5").value
code5 = sheets ("feuil1").range("b6").value
code6 = sheets ("feuil1").range("b7").value
if textbox1.value ="" then
msgbox ("Entrez votre code en minuscule s.v.p")
end if

if optionbotton1.value = true then
nomutilisateur = "personne1"
end if

if optionbotton2.value = true then
nomutilisateur = "personne2"
end if
etc......
j'ais mis une variable qui est nomutilisateur pour pouvoir utiliser la valeur de cette valiable dans dautre useforme.

voici ma question j'ais utiliser un prog du type if/then pour dire que si

if nomutilisateur = "personne1" then code<>code1 msgbox("Code invalide") cela ne fonctionne pas donc je me demande si je ne doit pas utiliser une prosedure du type select case?
si oui comment faire?

comment rendre la valeur de la variable nomutilisateur utilisable dans les autres useforme?
merci a tous...
Configuration: Windows XP
Internet Explorer 6.0

11 réponses

  1. algoplus
     
    Quand tu écris:
    if nomutilisateur = "personne1" then code<>code1 msgbox("Code invalide") cela ne fonctionne pas

    est ce que tu veux afficher le message "code Invalide" si le nomutilisateur = "personne1" ET si code<>code1.

    si c'est ça, alors

    if nomutilisateur = "personne1" and code<> code1 then msgbox("Code invalide")

    si non, j'ai rien compris
    0
  2. jojo9999 Messages postés 28 Statut Membre 4
     
    salut
    oui c'est çà, mais j'ais déja fais cette commande est rien ne ce passe.
    merci de ton aide...
    0
  3. algoplus
     
    Ben... en l'occurence rien ne se passera si code=code1 (sauf si tu as codé un else)

    as tu vérifié que tes variables contiennent quelque chose ?
    0
    1. jojo9999 Messages postés 28 Statut Membre 4
       
      salut
      merci de ton aide ,suite a ta question j'ai modifier mon prog pour qui affiche a chaque evenements les valeurs de mes variables.
      Et elle sont justes,donc j 'en deduit que le probléme vient de ma ligne de prog suivante:
      if nomutilisateur= "personne1" and code <> code1 then
      msgbox ("Code invalide")
      end if

      pour moi ces lignes de prog:
      cela dit si la variable (nomutilisateur)=personne1 et que la variable (code) et differente que le code1 alors affichez code invalide.
      est-ce que je me trompe?
      merci
      a+
      0
    2. jojo9999 Messages postés 28 Statut Membre 4
       
      salut
      jais oublie de te dire que j'ais refait mon prog de cette façon:

      Dim code As String
      Dim nomutilisateur As String
      Dim code1 As String
      Dim code2 As String
      Dim code3 As String
      Dim code4 As String
      Dim code5 As String
      Dim code6 As String
      --------------------------------------------------------------------
      Private Sub OptionButton1_Click()
      nomutilisateur = "personne1"
      TextBox1.Value = ""
      End Sub
      --------------------------------------------------------------------
      Private Sub OptionButton2_Click()
      nomutilisateur = "personne2"
      TextBox1.Value = ""
      End Sub
      --------------------------------------------------------------------
      Private Sub OptionButton3_Click()
      nomutilisateur = "personne3"
      TextBox1.Value = ""
      End Sub
      --------------------------------------------------------------------
      Private Sub OptionButton4_Click()
      nomutilisateur = "personne4"
      TextBox1.Value = ""
      End Sub
      --------------------------------------------------------------------
      Private Sub OptionButton5_Click()
      nomutilisateur = "personne5"
      TextBox1.Value = ""
      End Sub
      --------------------------------------------------------------------
      Private Sub OptionButton6_Click()
      nomutilisateur = "personne6"
      TextBox1.Value = ""
      End Sub
      --------------------------------------------------------------------
      Private Sub UserForm_Initialize()
      code = TextBox1.Value

      code1 = Sheets("code").Range("B2").Value
      code2 = Sheets("code").Range("B3").Value
      code3 = Sheets("code").Range("B4").Value
      code4 = Sheets("code").Range("B5").Value
      code5 = Sheets("code").Range("B6").Value
      code6 = Sheets("code").Range("B7").Value

      OptionButton1.Value = False
      OptionButton2.Value = False
      OptionButton3.Value = False
      OptionButton4.Value = False
      OptionButton5.Value = False
      OptionButton6.Value = False

      End Sub
      --------------------------------------------------------------------------------------------------------------------------------
      Private Sub CommandButton1_Click()

      MsgBox (nomutilisateur)

      If TextBox1.Value = "" Then
      MsgBox ("Entrez votre code en minuscule s.v.p")
      End If

      If nomutilisateur = "pesonne1" And code <> code1 Then
      MsgBox ("code invalide")
      End If

      If nomutilisateur = "personne2" And code <> code4 Then
      MsgBox ("code invalide")
      End If

      If nomutilisateur = "personne3" And code <> code6 Then
      MsgBox ("code invalide")
      End If

      If nomutilisateur = "personne4" And code <> code5 Then
      MsgBox ("code invalide")
      End If

      If nomutilisateur = "personne5" And code <> code3 Then
      MsgBox ("code invalide")
      End If

      If nomutilisateur = "personne6" And code <> code2 Then
      MsgBox ("code invalide")
      End If

      End Sub

      donc voila pourquoi quand je tape un code faux dans la textbox1 il ne se passe rien.
      Et si je tape le bon code rein non plus
      et mes variables prennent bien les valeurs qu il faut.

      merci de votre reponce
      a+
      0
      1. algoplus > jojo9999 Messages postés 28 Statut Membre
         
        J'ai trouvé le Pb: ta variable code était initialisée alors que rien n'avait encore été saisi dans textbox1 !!
        elle était donc toujours vide. (tu m'as dit que tu avais vérifié ??!!)

        j'ai modifié ta sub CommandButton1_Click():

        Private Sub CommandButton1_Click()

        code = TextBox1.Value '**** on aurait pu le faire dans la Sub TextBox1_Change()

        If nomutilisateur = "" Or code = "" Then
        MsgBox "selectionnez un utilisateur, ou saisissez votre code"
        Exit Sub '****on ne continue pas
        End If

        MsgBox nomutilisateur & " CODE1:" & code1 & " CODE:" & code


        If nomutilisateur = "personne1" And code = code1 Then
        MsgBox "Le code est bon"
        '****écrire les actions à exécuter ici
        Exit Sub
        Else
        MsgBox ("code invalide")
        Exit Sub
        End If

        '***************à adapter pour les autres noms utilisateurs**************

        End Sub

        Chez moi ça marche et j'espère que chez toi aussi, parce que demain c'est les vacances!!!!!!
        0
  4. algoplus
     
    pour moi ces lignes de prog:
    cela dit si la variable (nomutilisateur)=personne1 et que la variable (code) et differente que le code1 alors affichez code invalide.
    est-ce que je me trompe?

    non, c'est bien ça!

    donc voila pourquoi quand je tape un code faux dans la textbox1 il ne se passe rien.

    C'est ce que j'essaye de voir

    Et si je tape le bon code rein non plus

    alors la c'est normal, puisque rien ne dit ce qu'il faut faire quand le code est bon!

    Un pb dans ta Sub CommandButton1_Click() :
    si ta texbox est vide , tu continues quand même les tests .

    si tu pouvais mettre ton fichier sur https://www.cjoint.com/

    et renvoyer un post avec le lien de ce fichier ca faciliterai les choses
    0
    1. jojo9999 Messages postés 28 Statut Membre 4
       
      bonsoir et merci de ton aide

      je comprend les modif que tu a faite sauf cela:

      MsgBox nomutilisateur & " CODE1:" & code1 & " CODE:" & code

      peut tu me la traduire?

      merci....
      0
      1. algoplus > jojo9999 Messages postés 28 Statut Membre
         
        C'est juste pour faire afficher le contenu des variables :nomutilisateur, code1 et code,

        pour voir ce qu'elles contiennent !!!!

        Ce n'est bien sur pas utile au déroulement du programme, juste une aide !
        0
      2. algoplus > jojo9999 Messages postés 28 Statut Membre
         
        MsgBox nomutilisateur & " CODE1:" & code1 & " CODE:" & code

        le & permet de concatener
        " " permettent faire afficher littéralement ce que tu saisis entre

        MsgBox nomutilisateur & " CODE1:" & code1 & " CODE:" & code affichera:

        le contenu de la variable nomutilisateur,
        suivi de CODE1: ,
        suivi du contenu de la variable code1,
        suivi de CODE:,
        suivi du contenu de la variable code
        0
      3. jojo9999 Messages postés 28 Statut Membre 4 > algoplus
         
        ok....merci
        0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Bonjour,
    Pourquoi demander de valider le nom d'utilisateur ? puisque tu demande seulement de cliquer sur une option ? ça n'a aucun sens. En couplant le code et le nom d'utilisateur tu peu avoir les deux. ey si tu veux deux contrôle, comme par exemple quand tu t'inscrit sur CCM, alors c'est avec deux textbox que tu doit travailler.
    Un exemple ?
    https://www.cjoint.com/?ipammDfKgf
    A+
    0
    1. jojo9999 Messages postés 28 Statut Membre 4
       
      salut lermit...

      Pourquoi demander de valider le nom d'utilisateur ? puisque tu demande seulement de cliquer sur une option ?
      la raison pour laquelle jutilise une option c'est pour evite a l'utilisateur de tapez son nom.
      Ensuite je rentre le nom de l'utilisateur dans une variable pour pouvoir l'utiliser sa valeur dans une autre useforme est l'inscrire dans un tableaux excel, mais pour l'instant je n'en suis pas la.

      merci pour ton exemple je croix que j'ais du boulot devant moi pour le comprendre.

      encore merci.
      a+
      0
      1. lermite222 Messages postés 9042 Statut Contributeur 1 199 > jojo9999 Messages postés 28 Statut Membre
         
        Si c'est pour lui éviter de taper son nom, faut pas lui demander!!, tu peu l'avoir uniquement avec l'entrée du code.
        EDIT:
        Je crois que j'ai compris ton optique, tu veux quand même controller que le code corespond bien au nom. Serait plus facile d'employer une listbox.
        0
      2. jojo9999 Messages postés 28 Statut Membre 4 > lermite222 Messages postés 9042 Statut Contributeur
         
        oui..oui... tres tres logique et vrais

        Mais je fais cela, car grace a toi cela ma donner une idée de prog pour mon boulot et nous sommes une equipe de 6 personne mais elas dans le pas.
        il y a deux qui ne maitrise pas excel (donc perte de temps a la frappe) et une qui ne reteindras pas le code si je ne met pas un code simple du style ses initiales.

        donc je pense que tu vois ma demarche.
        0
  7. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    https://www.cjoint.com/?ipcEHCDNwu
    celui-ci correspondra un peu mieux à ce que tu veux.
    0
    1. jojo9999 Messages postés 28 Statut Membre 4
       
      salut
      Ne repond pas à mon méssage précèdent car, je croix avoir compris.

      je pense que cela doit être possible, mais pas trés intéressant.

      Car, il est stupide de réalisé un prog de cette façon. Il faudrait faire appelle à des modules pour chaque personnes.
      cela aurait pour consécance un prog volumineux et une modif du prog pour chaque nouvelles personnes qui doivent l'utuliser.

      dit-moi juste pour savoir, ai je raison ?
      Esque cela est possible? car ne sais pas utiliser les modules pour l'intant.
      0
      1. lermite222 Messages postés 9042 Statut Contributeur 1 199 > jojo9999 Messages postés 28 Statut Membre
         
        Difficile de te répondre, je ne connaîs pas la finalité de ton appli.
        0
  8. jojo9999 Messages postés 28 Statut Membre 4
     
    salut lermit

    hola.... super génial

    c'est exactement ce que je voulais merci...
    mais je vais te poser une question quand même sur le prog que j'ai fait.
    quand tu frappes le prog suivant:

    if nomutilisateur = "personne1" and code = code1 then
    msgbox("code valide")
    useforme1.hide
    useforme2.show
    else
    msgbox("code invalide")
    exit sub' ligne que je dois enlever pour que cela fonctionne
    end if

    if nomutilisateur = "personne2" and code = code2 then
    msgbox("code valide")
    useforme1.hide
    useforme2.show
    else
    msgbox("code invalide")
    exit sub ' ligne que je dois enlever pour que cela fonctionne
    end if

    Pourquoi le prog ne va pas directement sur la condition 2, si je selectionne la personne2. On dirait qu'il ne prend pas en compte la condition: if nomutilisateur = "personne2".

    Donc c'est pour cela que je dois enlever la ligne exit sub pour toute les personnes sauf pour la dernière car le prog m'exécute toute les lignes de commandes, resultat une msgbox affiche code invalide tant que les deux conditions ne sont pas remplies.

    je pense que cela peut fonctionner si je remplace ( if nomutilisateur = "personne2".) par (if optionboutton2 = true)
    je vais faire un essais, mais cela me parait pas logique,si cela fonctionne comme cela et pas de l'autre.

    dite moi pourquoi s.v.p
    merci
    0
  9. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    if nomutilisateur = "personne1" and code = code1 then ... Si c'est Personne2 qui est sélectionner arriverra jamais..
    Si tu enlève les Exit Sub, et que tu choisi Personne6, va dire 5 fois Code invalide..
    Il faut d'abord tester les Personnes...
        If nomutilisateur = "personne1" Then
        'Et içi, tester le code
            If code = code1 Then
                'le code est bon
            Else
                'le code est pas bon
            End If
        ElseIf nomutilisateur = "personne2" Then
        'Et içi, tester le code
            If code = code2 Then
                'le code est bon
            Else
                'le code est pas bon
            End If
        ElseIf nomutilisateur = "personne3" Then
        'Et içi, tester le code
            If code = code3 Then
                'le code est bon
            Else
                'le code est pas bon
            End If
        End If
        'etc.

    Mais ce n'est pas la bonne façon pour faire ça, inspire toi plutôt du code dans le classeur que je t'ai passé...
    0
    1. jojo9999 Messages postés 28 Statut Membre 4
       
      bonjour Lermite222


      Comme la dit je m'inspire de ton prog, mais je suis un peut perdu par certainne ligne de prog.

      Private Sub CommandButton2_Click()
      'Bouton annuler
      'enlever le Rem pour rendre opérationnel (je ne vois pas les rem devant les lignes de com, ou sont elles?)
      'ActiveWorkbook.Close
      'et enlever unload
      Unload Me (cela fait tout ce que tu me dit? "arrête de lire" cela vide aussi toute les variables?)
      End Sub

      Private Sub ListBox1_Click()
      'En déclarant NomUtilisateur dans un module, tu peu le 'voir' de
      'partout dans le classeur, aussi dans d'autre UF.
      NomUtilisateur = ListBox1.List(ListBox1.Listindex) (pourquoi pas" NomUtilisateur = ListBox1.Listindex" directement?)
      TextBox1.SetFocus ( quelle action cela fait?)
      End Sub

      Private Sub TextBox1_Change()
      Cmdvalider.Enabled = True
      End Sub

      Private Sub UserForm_Initialize()

      Dim hwnd As Long

      Dim i As Integer

      'Enlever la croix de l'userForme pour empêchè l'utilisateur d'annuler
      hwnd = FindWindowA("Thunder" & IIf(Application.Version Like "8*", "X", "D") & "Frame", Me.Caption)
      SetWindowLongA hwnd, -16, GetWindowLongA(hwnd, -16) And &HFFF7FFFF


      (tous ce qui est en gras je le comprend pas mes je le re-examinerais avec le bouquin.)
      i = 1

      With Sheets("Code")
      While .Cells(i, 1) <> ""
      ReDim Preserve Code(i) (ReDim Preserve="rem variable code(i) stocker?)
      ReDim Preserve NomUtil(i)
      Code(i) = .Cells(i, 1)
      NomUtil(i) = .Cells(i, 2)
      ListBox1.AddItem .Cells(i, 2)
      i = i + 1
      Wend
      End With
      End Sub

      Private Sub Cmdvalider_Click()
      Dim i As Integer
      'vérifier le nom
      For i = 1 To UBound(Code)
      'Ucase pour ne pas faire de diff entre maju et minuscule (cela ne fonctionne pas)
      If UCase(NomUtilisateur) = UCase(NomUtil(i)) Then
      If TextBox1.Text = Code(i) Then
      'ICI C'EST BON, faire la suite des opérations.
      Stop
      Else
      'Le code ne correspond pas
      MsgBox "Votre code est incorrect", _
      vbCritical, "Entrée Loging" (peut tu me la traduire je ne comprend pas)
      End If
      End If
      Next i
      TextBox1.Text = ""
      TextBox1.SetFocus
      End Sub

      dans le module

      Option Explicit

      'pour enlever la croix rouge de fermeture de l' UF
      Public Declare Function GetWindowLongA Lib "user32" _
      (ByVal hwnd As Long, ByVal nIndex As Long) As Long

      Public Declare Function SetWindowLongA Lib "user32" _
      (ByVal hwnd As Long, ByVal nIndex As Long, _
      ByVal dwNewLong As Long) As Long

      Public Declare Function FindWindowA Lib "user32" _
      (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

      ( tout cela pour juste pour enlever la croix rouge de fermeture de l' UF)

      Public Code() As String
      Public NomUtil() As String
      Public NomUtilisateur As String
      merci de me donner des reponces au parties soulignés s.v.p
      car je nage un peut!!!!!
      0
  10. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    1°) quand tu ne connais pas un mot de la syntaxe... tu double clic dessus (pour qu'il soit en surbrillance) et tu tape F1, en principe tu recoit l'aide et les explications sur ce mot.

    Private Sub CommandButton2_Click()
    'Bouton annuler
        'enlever le Rem pour rendre opérationnel (je ne vois pas les rem devant les lignes de com, ou sont elles?)
        'ActiveWorkbook.Close ' Rem ou l'apostrohe c'est la même chose,
        'donc tu enlève l'apostrohe de cette ligne
        
        'et enlever unload
        Unload Me 'et içi, mettre l'apostrohe devant mais à ne faire que
        'quand tu a terminé totalement ton appli, sinon le classeur
        'va chaque fois se fermer si ont appuye sur le Bt Annuler,
        'ce qui, en principe doit arriver dans l'emploi normal.
    End Sub


    NomUtilisateur = ListBox1.List(ListBox1.Listindex) (pourquoi pas" NomUtilisateur = ListBox1.Listindex" directement?)
    Parce que listindex renvoi le N° de la ligne sélectionné (à partir de 0) et List renvoi le contenu de la ligne. (F1 oublie pas)

    ReDim Preserve Code(i) (ReDim Preserve="rem variable code(i) stocker?) mettre ReDim en surbrillance et F1

    TextBox1.SetFocus ( quelle action cela fait?) mettre SetFocus en surbrillance et F1

    'Ucase pour ne pas faire de diff entre maju et minuscule (cela ne fonctionne pas)
    If UCase(NomUtilisateur) = UCase(NomUtil(i)) Then '
    Cela fonctionne mais juste dans le test d'égalité, ne change rien aux variables
    Ex: NomUtilisateur = "PIERRE" et NomUtil(i) = "Pierre" les test serrait faux mais avec UCASE ça fait
    Ucase(NomUtilisateur) = "PIERRE" et Ucase(NomUtil(i)) = "PIERRE" alors le test est OK

    MsgBox "Votre code est incorrect", _
    vbCritical=Icône rouge+Croix, "Le Titre de la fenêtre message tu met ce que tu veux" (peut tu me la traduire je ne comprend pas)

    Tout ce qui est en gras, faut pas étudier faut juste savoir que ça existe, ce sont des API de Windows.
    Et oui, tout ça pour JUSTE enlever la croix, mais ça oblige l'utilisateur à entrer le code ou de cliquer sur le bouton annuler.
    0
    1. jojo9999 Messages postés 28 Statut Membre 4
       
      salut lermite222

      j'ai apppris que quand tu ne connais pas un mot de la syntaxe... tu double clic dessus (pour qu'il soit en surbrillance) et tu tape F1, en principe tu recoit l'aide et les explications sur ce mot.

      merci pour le partage de ton savoir sur vba,j'espere pouvoir faire de même un jours.
      a+
      0
    2. jojo9999 Messages postés 28 Statut Membre 4
       
      salut lermite..

      'Ucase pour ne pas faire de diff entre maju et minuscule (cela ne fonctionne pas)
      If UCase(NomUtilisateur) = UCase(NomUtil(i)) Then '
      Cela fonctionne mais juste dans le test d'égalité, ne change rien aux variables ( ok mais )
      Ex: NomUtilisateur = "PIERRE" et NomUtil(i) = "Pierre"
      Ucase(NomUtilisateur) = "PIERRE" et Ucase(NomUtil(i)) = "PIERRE" alors le test est faux quand même.

      ou est l'erreur?

      merci
      a+
      0
  11. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Si le test est faut c'est que tu a un espace qui traine quelque part...
    remplace la ligne par

    If UCase(Trim(NomUtilisateur)) = UCase(Trim(NomUtil(i))) Then

    Et si c'est toujours faux, voir ce qu'il y a dans les variables..
    Ou tu a peut-être changer des lignes de code. J'ai controllé sur le classeur et ça fonctionne comme je dit.

    EDIT:Si tu modifie du code (même une seule lettre) toutes les variables sont réinitialisée à... null
    Faut donc recommencer la saisie.
    Pour éviter de fermer et réouvrir, tu ouvre la fenêtre ThysWorkbook et tu fais F5 dans la macro,
    0
    1. jojo9999 Messages postés 28 Statut Membre 4
       
      merci

      dit moi ! sais tu comment decompiler un fichier *.exe pour pouvoir lire sont ses ligne de prog.

      si ou avec quel logiciel ?

      j'ai entendu parler qu 'il faudrait un editeur exadecimal pour le faire, il doit y avoir mieux, et quelle connaissance doit tu avoir(quel language?)

      merci
      a+
      0
  12. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    La réponse est simple, pas moyen de décompilé un EXE.
    Possibilité de voir le code avec un éditeur C, mais de là à le modifier !! ou encore en assembleur mais idem.
    0
    1. jojo9999 Messages postés 28 Statut Membre 4
       
      coucou
      quand tu dit un editeur c tu veut dire un editeur c++ ou un edit exadecimal ?
      meme question quand tu dit assembleur leque?
      donne moi des nom s.v.p pour exemple.
      merci.
      a +
      0