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 :

Form.SetFocus ouvre un deuxième Formulaire? [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2011
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2011
    Messages : 172
    Par défaut Form.SetFocus ouvre un deuxième Formulaire?
    Bonjour,

    J'ai un petit soucis, (voir mon code plus bas), le but de cette fonction est d'ouvrir un nouveau formulaire en fonction d'un élément qui est sélectionner dans un autre formulaire. Le problème se situe lorsque la ligne 'Form_BonAchat.SetFocus' se fait, il ouvre un second formulaire 'BonAchat', et je ne sais pas pourquoi? Je dois faire un setFocus, car ma procédure RefreshPoData permet de remplir mes combobox/textebox/ListBox de mon formulaire BonAhcat, et si je ne met pas le focus sur mon formulaire aucun des élément ne se met à jour.... J'ai pourtant vérifier et tout semble fonctionné normalement c'est juste que mes contrôle reste vide... Je contourne donc se problème avec un focus sur mon formulaire, mais j'en crée un aurte.

    Merci d'avance de votre aide

    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
    Private Sub cmdModifier_Click()
    Dim intTypePO As Integer
    Me.txtActiveIdPO = Me.Form![SousFormRecherchePO]![IdAchat].Value
    lngIdActivePO = Me.txtActiveIdPO
     
    If IsNull(Me.txtActiveIdPO) Then
        MsgBox "Vous devez sélectionner un item de la liste"
        Exit Sub
    End If
    If Not CurrentProject.AllForms("BonAchat").IsLoaded Then
        DoCmd.OpenForm Form_BonAchat.Name, acNormal
    End If
     
    intTypePO = Me.Form![SousFormRecherchePO]![POType].Value
    Form_BonAchat.SetFocus
    Form_BonAchat.CadretypePO = intTypePO
    Call Form_BonAchat.TypePO
    Call Form_BonAchat.RefreshPOdata(Me.txtActiveIdPO)
     
    'DoCmd.Close acForm, Form_ListePO.Name
    End Sub
    J'ajoute ma procédure RefreshPOData au cas ou ça pourrait aider :

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    Sub RefreshPOdata(ByVal idPO As Long)
    Dim rs As DAO.Recordset
    Dim qry As DAO.QueryDef
    Dim strSQL As String
     
    'Me.Détail.Visible = True
    Set qry = CurrentDb.QueryDefs("REQ_InfoPO")
    strSQL = qry.SQL
    strSQL = Left(strSQL, InStr(strSQL, "WHERE") - 1)
    strSQL = strSQL & "WHERE Achattl.IdAchat = " & idPO
    qry.SQL = strSQL
    Set rs = qry.OpenRecordset
    'If rs.EOF Then Exit Sub
     
    With Form_BonAchat
        Form_BonAchat.txtIdPO = idPO
     
        Form_BonAchat.CadretypePO = Nz(rs.Fields("POType"), 1)
        Form_BonAchat.cmbCie = rs.Fields("IdCie")
        Form_BonAchat.cmbSite = rs.Fields("IdSite")
        Form_BonAchat.txtFournisseur = rs.Fields("NomCourt")
     
        Call RefreshContact
        Form_BonAchat.cmbContact = rs.Fields("contact")
     
        On Error Resume Next
        Form_BonAchat.txtNoPO = rs.Fields("NoPO")
        Form_BonAchat.txtPODate = Format(rs.Fields("DateAchat"), "yyyy-mm-dd")
        Form_BonAchat.DTdateLiv = Nz(rs.Fields("DateLivraison"), Date)
        Form_BonAchat.txtRef = rs.Fields("Reference")
        Form_BonAchat.txtIsActif = rs.Fields("IsActif")
        On Error GoTo 0
     
        If IsNull(Me.txtRef) Then
            Me.txtRef = GetPoReference()
        End If
     
     
        Call GetPODetail(idPO)
    End With
    End Sub

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Bonjour,

    Puisque tu sembles bien nommer le Userform avant ses contrôles, ça devrait bien fonctionner...

    Plutôt que de faire un SetFocus, essaie en faisant un Repaint du UserForm après avoir entré les données, pour voir...
    Il se peut que tu ne puisses pas voir les valeurs entrées, mais qu'elles y sont quand même.

  3. #3
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    C'est du VBA pour Access et ici nous sommes dans VBA pour Excel mais peut être en faisant un chargement de la Form avant l'affichage "Load(Objet)". Pour Excel, on pourrait faire de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Sub Ouvrir()
     
        Load Form_BonAchat 'ici, il reste invisible
     
        'remplissage des contrôles...
     
        Form_BonAchat.Show 'affichage de la Form
     
    End Sub
    Je pense que cette instruction existe aussi dans VBA Access, à voir !

    Hervé.

  4. #4
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2011
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2011
    Messages : 172
    Par défaut
    Bonjour,

    Oui désolé je me suis trompé de forum.... Mais en tk le repaint fonctionne, je ne connaissais pas, j'avais essayer .refresh et .requery, mais sans résultat.

    PS: Non l'instruction .show n'existe pas dans vba Access

    Merci!

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2009
    Messages : 652
    Par défaut
    PS: Non l'instruction .show n'existe pas dans vba Access
    Bonjour,

    Je crois que pour Access c'est l'instruction DoCmd.OpenForm
    Sub OpenForm(FormName, [View As AcFormView = acNormal], [FilterName], [WhereCondition], [DataMode As AcFormOpenDataMode = acFormPropertySettings], [WindowMode As AcWindowMode = acWindowNormal], [OpenArgs])
    Membre de Access.DoCmd

    DoCmd.OpenForm "frmTruc", , , , , , vbNullString

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

Discussions similaires

  1. [AC-2007] Form ouvre en mode formulaire au lieu de feuille de données
    Par Piou2fois dans le forum IHM
    Réponses: 4
    Dernier message: 05/04/2013, 11h38
  2. [Form] deux actions dans un formulaire ?
    Par FraK dans le forum Balisage (X)HTML et validation W3C
    Réponses: 21
    Dernier message: 16/07/2007, 15h11
  3. SetFocus dans un sous formulaire
    Par marot_r dans le forum Access
    Réponses: 5
    Dernier message: 20/04/2006, 15h53
  4. Réponses: 13
    Dernier message: 15/11/2004, 10h14
  5. Réponses: 2
    Dernier message: 29/10/2003, 11h05

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