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 :

[VBA-E] executer code d'un userform depuis un autre


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 164
    Points : 43
    Points
    43
    Par défaut [VBA-E] executer code d'un userform depuis un autre
    salut a vous
    voila , j'ai dans mon userform1 ,un CommandButton qui m'ouvre un userform_mdp me demandant un MDP pour confirmer mon choix.

    j'aimerais que si le mdp est correct continué l'action ans le userfome1 mais ca marche pas : coment faire ?

    j'ai essayer ca :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Private Sub CommandButton1_Click()
    If TextBox1 = "ok" Then
    'confirm.UserForm1 pour lancer l'action confirm du userform1
    mdp.Hide
    Else
    MsgBox "Mot de passe faux"
    TextBox1 = ""
    End If
    End Sub
    voila sinon comment avoir automatiquement le curseur dans le textbox1 pour ecrire un nouveau mdp si erreur , car ca efface bien le mdp faux mais n'active pas le listbox ,

    merci a tous

  2. #2
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    pas trés clair sur tes intentions...

    de quel listbox parle tu ...?

    pour rendre le focus à un text box tu as :


    sinon depuis ta fenêtre mot de passe tu peu activer des contrôle de ta premiére fenêtre...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub CommandButton1_Click()
     If TextBox1 = "MonMotDepase" Then
        UserForm1.TextBox2.Enabled = True
      Else
     MsgBox "Mot de passe inccorect.."
      End If
    End Sub
    bon c'est un peu rudimentaire ... mais ... cela dépend de la sécurité .. désiré pour ton mot depasse..

  3. #3
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 164
    Points : 43
    Points
    43
    Par défaut
    salut
    merci a toi, pour setfocus , c'est ok par contre pour le reste je m'explique:

    j'ai un userform "travaux" dans lequel j'effectue des modifications qui sont valider par un bouton "valid" : cette action se fait en 2 parties du moment ou je clique sur ce bouton :

    1- ouverture d un userform "mdp"pour demande de mot de passe.
    2- si mot de passe ok : fermeture de ce userform "mdp" et execution de la commande "modif" du userform "travaux"

    le probleme est dans la 2eme partie , quand le mdp est bon , je n'arrive pas a faire executer la commande : "Private Sub confirm()" du userform "travaux " qui elle effectue les modif demandé

    merci a toi

  4. #4
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    si tu ve pouvoir appeller la procédure Confirm ... d'un autre UserForm... enléve le Private..

  5. #5
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 164
    Points : 43
    Points
    43
    Par défaut
    Citation Envoyé par bbil
    si tu ve pouvoir appeller la procédure Confirm ... d'un autre UserForm... enléve le Private..
    ok mais il y a qqchose qui plante , donc voici le code du userform MDP
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub CommandButton1_Click()
    If TextBox1 = "ok" Then
    UserForm1.confirm.Enabled = True
    mdp.Hide
    Else
    MsgBox "Mot de passe faux"
    TextBox1 = ""
    TextBox1.SetFocus
    End If
    End Sub
    et celui du userform TRAVAUX
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    Private Sub UserForm_Initialize()
    iniListBox1
    End Sub
    -----------------------------------
    Private Sub valider_Click() ' bouton valider
    mdp.Show
    End Sub
    ---------------------------------
    Sub confirm() ' fonction que j'aimerais lancer si mdp ok
    If OptionButton1.Value = True Then
    Sheets("v43").Range("b2") = "0"
    Else
    If OptionButton2.Value = True Then
    Sheets("v43").Range("b2") = "50"
    Else
    If OptionButton3.Value = True Then
    Sheets("v43").Range("b2") = "100"
    End If
    End If
    End If
    Label2ini
    End Sub
    ---------------------------------------------------------
     
     
    voila , il y a surement plus simple a faire mais je suis novice en VBA
     
    merci a toi

  6. #6
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    enléve ... dans mon exemple cela servait à activer un bouton sur ta form... ( préalablement désactiver par : .Enabled = false)

  7. #7
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 164
    Points : 43
    Points
    43
    Par défaut
    ok
    merci a toi ca marche

  8. #8
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 164
    Points : 43
    Points
    43
    Par défaut
    oups je suis alle trop vite
    en fait le tri fonctionne tres bien , par contre qd je selectionne un travail ( qq soit le filtre) il affiche 0% dans les bouton options ( sauf qd je selectionne afficher tout, la les valeur sont bonnes)

    en plus si j'essaie de modifier une valeur, ca ne le fait pas sur la bonne , j'avais travail 6 en 50% si je le passe en termine , c'est le 3 qui change ( travail 6 etait en 3eme position dans le listbox en mode 50%: peut etre un rapport !!!)

  9. #9
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    a oui ... je comprends... , pour afficher dans bouton option ... on utilise le numéro de ligne dans listbox.. qui doit correspondre au numéro de ligne dans fichier excel ... , c'est la même chose pour écrire dans fichier excel... ..

    une solution serai de modifier ta la fonction initlistbox... , de rajouter une colonne cachée (largeur=0) dans la listbox ... colonne dans laquelle on stockerai le numéro de ligne correspondant dans feuille excel...

    ensuite lors de la relecture ou de l'écriture ,l'on se sert de la valeur contenu dans cette colonne .. pour déterminer la ligne de la feuille excel.. correspondange...

    bon je vais manger ... dis moi si cette idée te plait et si tu est arrivé à en faire quelque chose...

  10. #10
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 164
    Points : 43
    Points
    43
    Par défaut
    ok , l'idee semble bonne , de toutes facon je ne vois pas comment faire autrement

    Par contre , la c'est pas gagne pour mettre ca en place , surtout vu mes connaissances, mais on va essayer

    merci a toi

  11. #11
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    lol j'avais pas vu que le numéro de ligne été déjà dans ta list box
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      ListBox1.List(ListBox1.ListCount - 1, 1) = a.Row
    ... tu peu donc l'utiliser par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub ListBox1_Click() 'selection d'une tache
     Dim iAdv As Integer
     Dim iL As Integer 'Ligne en cours dans fichier excel..
     iL = ListBox1.List(, 1)
     
      Label1 = sh.Cells(iL, 1) 'Recupére travail sélectionné
      iAdv = sh.Cells(iL, 2) 'Recupére avancement
      Select Case iAdv
    ...

  12. #12
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 164
    Points : 43
    Points
    43
    Par défaut
    bon , c'est un essai non concluant
    voici ce que j'ai fait :
    http://lazouille83.free.fr/divers/travaux.xls

    j'ai du oublie qqchose, ou une erreur dans mon code listbox , car je ne vois pas ce que tu entend par:
    lol j'avais pas vu que le numéro de ligne été déjà dans ta list box
    Code:
    ListBox1.List(ListBox1.ListCount - 1, 1) = a.Row
    sinon , pour ton aide sur le dernier post ( comment adapter code pour les different onglet du multi page), dois-je modifie le nom des boutonet autre :

    Public sh As Worksheet

    tu remplace dans l'userform tous les Sheets("v43") par sh...
    et avant l'ouverture de l'userform tu affecte la bonne feuille à la variable

    Code:

    set Userform1.sh = Sheets("v43")
    Userform1.show
    merci a toi

  13. #13
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    Citation Envoyé par zouille
    bon , c'est un essai non concluant
    voici ce que j'ai fait :
    http://lazouille83.free.fr/divers/travaux.xls

    j'ai du oublie qqchose, ou une erreur dans mon code listbox , car je ne vois pas ce que tu entend par:
    lol j'avais pas vu que le numéro de ligne été déjà dans ta list box
    Code:
    ListBox1.List(ListBox1.ListCount - 1, 1) = a.Row
    ben la ligne cité est déjà dans ta procédure inilistbox1.... donc le numéro de ligne est déja en deuxiéme colonne ... il te suffit de l'utiliser comme
    comme dans l'exemple que je t'ai donné...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim iL As Integer 'Ligne en cours dans fichier excel..
     iL = ListBox1.List(, 1)
    ...



    Citation Envoyé par zouille
    sinon , pour ton aide sur le dernier post ( comment adapter code pour les different onglet du multi page), dois-je modifie le nom des boutonet autre :
    Public sh As Worksheet

    tu remplace dans l'userform tous les Sheets("v43") par sh...
    et avant l'ouverture de l'userform tu affecte la bonne feuille à la variable

    Code:

    set Userform1.sh = Sheets("v43")
    Userform1.show
    merci a toi
    oui relis le post... tu "vide" tous les onglets (expté le v43..)... tu déplace tous les contrôles du V43 hors de la page, pour qu'ils soit visible quelque soit l'ongle sélectionné ...
    puis utilise la procédure Page_Change.. que je t'ai transmisse dans ce post pour affecter la bonne feuille excel à la variable Sh...

    http://www.developpez.net/forums/vie...81073&start=15
    [/url]


  14. #14
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 164
    Points : 43
    Points
    43
    Par défaut
    bon , pour le multipage c'est bon , ca fonctionne
    j'ai remarque que les objet en dehors des frame ne s'affiche pas qd je les met en dessous du multipage ( bouton et barre de progression) : C'est normale ???

    Par contre toujours 2 problemes
    1- qd un filtre est active , il y a toujours ce probleme de ligne , la modif ne se fait pas sur le travail selectionne ( sinon ok qd tout affiché)

    2-la barre de progression ne fonctionne pas bien, pourtant j'ai modifié sheet("v43") par sh. il y a bien evolution de cette barre qd je fait un changement mais pas qd je change d'onglet


    merci a toi

  15. #15
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    Citation Envoyé par zouille
    bon , pour le multipage c'est bon , ca fonctionne
    j'ai remarque que les objet en dehors des frame ne s'affiche pas qd je les met en dessous du multipage ( bouton et barre de progression) : C'est normale ???

    Par contre toujours 2 problemes
    1- qd un filtre est active , il y a toujours ce probleme de ligne , la modif ne se fait pas sur le travail selectionne ( sinon ok qd tout affiché)

    2-la barre de progression ne fonctionne pas bien, pourtant j'ai modifié sheet("v43") par sh. il y a bien evolution de cette barre qd je fait un changement mais pas qd je change d'onglet


    merci a toi
    1 - tu as bien modifié toutes les lignes ou tu utilisé ListBox1.ListIndex ... pour connaitre .. le numéro de ligne dans fichier excel? par exemple majAdv...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub MajAdv() 'modification des options avancement
      If ListBox1.ListIndex >= 0 Then
        Dim iL As Integer 'Ligne en cours dans fichier excel..
       iL = ListBox1.List(, 1)
        If Opt0 Then sh.Cells(iL, 2) = 0
        'If Opt25 Then sh.Range("A2").Offset(ListBox1.ListIndex, 1) = 25
        If Opt50 Then sh.Cells(iL, 2) = 50
        'If Opt75 Then sh.Range("A2").Offset(ListBox1.ListIndex, 1) = 75
        If Opt100 Then sh.Cells(iL, 2) = 100
        majbarre
        Label2ini
      End If
    End Sub




    2.il faut que dans change page tu appelle la majbarre...

  16. #16
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 164
    Points : 43
    Points
    43
    Par défaut
    ok
    merci a toi
    j'avais fait une erreur dans une ligne, ca marche super bien

    Par contre , est il possible de faire en sorte que des bouton porte le nom du text dans une cellule car :
    dans un autre userform j'ai 100 bouton , et j'aimerais que chaque bouton est le nom de A1 a A100 avec une couleur en fonction du %age ( colonne B) ( 0--> rouge - 50 --> jaune - 100 --> vert)

    et qd je clique dessus, ca m'ouvre une description ( qui est dans collone C) dans un msgbox

    j'ai reussi , plus ou moins pour un bouton , mais c'est pour faire la variablefonction du bouton qui me pose probleme

    merci a toi :
    ps : j'ai poster un sujet sur ce prob

  17. #17
    Membre du Club
    Inscrit en
    Décembre 2005
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 164
    Points : 43
    Points
    43
    Par défaut
    donc voila , j'ai essayer ca pour les couleur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    If Sheets("bord").Range("b2") = 0 Then CommandButton1.BackColor = &HFF&
    If Sheets("bord").Range("b2") = 50 Then CommandButton1.BackColor = &HFFFF&
    If Sheets("bord").Range("b2") = 100 Then CommandButton1.BackColor = &HC000&
    et ca pour les msgbox
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MsgBox (Sheets("bord").Range("c2"))
    mais comment automatise ca pour les 100 boutons ?
    et comment donne le nom des bouton fonction du nom dans la colonne A

    merci

Discussions similaires

  1. Réponses: 10
    Dernier message: 15/05/2015, 10h03
  2. [XL-2007] Activer bouton userform depuis un autre userform
    Par stephadm dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 13/10/2012, 21h45
  3. [VBA-E] Execution d'un programme Perl depuis une macro Excel
    Par DaBeam dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 23/09/2007, 15h21
  4. Execution d'un script shell depuis un code C
    Par aproust dans le forum C
    Réponses: 6
    Dernier message: 12/05/2006, 13h53
  5. [VBA-E] mon code ne marche pas sur un autre PC
    Par yannph dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 09/01/2006, 21h03

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