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

VBA Access Discussion :

[VBA]Treeview : Ouverture de formulaire/sous-formulaire lié


Sujet :

VBA Access

  1. #1
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    691
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 691
    Points : 504
    Points
    504
    Par défaut [VBA]Treeview : Ouverture de formulaire/sous-formulaire lié
    Bonjour,

    Voilà, j'ai un petit soucis sur un treeview. J'utilise ce petit bout de code tout simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim nodClient As Node
       If Node.Parent Is Nothing Then
           Set nodClient = Node.Parent
       Else
           Set nodClient = Node
       End If
       DoCmd.OpenForm "frm_adresse", acNormal, , "[Num] = " & Right(nodClient.Key, 3)
     
    End Sub
    qui en gros en fonction de ce que l'on selectionne dans le treeview ouvre le formulaire frm_adresse, et affiche tout simplement les infos liées à ce que l'on a sélectionné.
    Le problème vient du Right(nodClient.Key, 3) . En effet, je sais pas trop pourquoi d'ailleurs, mais le nodClient.Key semble concaténer "Emp" + "[Num]", exemple :

    Pour un Num de 1, nodClient.Key renvoit Emp1
    Pour un num de 15, nodClient.Key renvoit Emp15
    etc etc ...

    D'où mon problème, si je fait un Right(nodClient.Key, 3) sur un Num = 15, ça me renvoie : "p15", et donc ça me bug sur l'ouverture de mon formulaire associé :/
    De même, Right(nodClient.Key, 3) sur un Num = 1renvoit "mp1". :/
    Right(nodClient.Key, 3)
    Par contre, Right(nodClient.Key, 3) sur un Num = 120 ouvre bien le formulaire en conséquence.

    Qqun pour maider à résoudre ça ?

    Merci

    PS : même dans la table en changeant le format du champs Num, et en mettant "000" par exemple, ça ne semble pas prendre en compte les "0" qui sont ajoutés devant, et ça les vire automatiquement :o

  2. #2
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 916
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 916
    Points : 4 816
    Points
    4 816
    Par défaut
    Eh bien,
    A la place de
    Right(nodClient.Key, 3)
    Crée une fonction
    qui détecte le nombre de chiffres, depuis la droite, dans ton nodClient.Key
    et qui te renvoie un Long


  3. #3
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    691
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 691
    Points : 504
    Points
    504
    Par défaut
    Yep je me doute que c'est un truc comme ça xD
    Mais je bloque sur la fonction pour récupérer que des "chiffres" xD

    Deuxième question au passage, quand je met :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Forms![Accueil]![frm_adresse_bis].Form![Num] = Right(nodClient.Key, 2)
    ça m'ouvre bien le formulaire, ça me met bien le bon [Num], MAIS ça me met rien du tout à jour concernant les autres champs, comme si les champs n'était pas lié entre eux :/

    J'ai essayé un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.Requery (Forms![Accueil]![frm_adresse_bis])
    mais ça bug et ça ne fait rien.

  4. #4
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 916
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 916
    Points : 4 816
    Points
    4 816
    Par défaut
    Mais je bloque sur la fonction pour récupérer que des "chiffres" xD ...
    fonction IsNumeric + F1

  5. #5
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    691
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 691
    Points : 504
    Points
    504
    Par défaut
    J'ai tenté un :
    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
     
    Dim nodClient As Node
    Dim a As String
    Dim nombreChiffre As Integer
       If Node.Parent Is Nothing Then
           Set nodClient = Node.Parent
       Else
           Set nodClient = Node
       End If
     
       For i = 0 To Len(nodClient.Key)
       a = Mid(nodClient.Key, i, 1)
            If IsNumeric(a) Then
             nombreChiffre = nombreChiffre + 1
            End If
       Next
     
    Forms![Accueil]![frm_adresse_bis].Form![Num] = Right(nodClient.Key, nombreChiffre)
    et .... (roulement de tambours) .. ça ne marche pas xD

  6. #6
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    691
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 691
    Points : 504
    Points
    504
    Par défaut
    En fait en faisant partir i à 1 au lieu de 0 ça marche beaucoup mieux, mais j'ai toujours ce problème quand je fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Forms![Accueil]![frm_adresse_bis].Form![Num] = Right(nodClient.Key, nombreChiffre)
    ça ne me met que Num à jour dans mon sous formulaire, et pas tout les autres champs en conséquence :/

  7. #7
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    691
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 691
    Points : 504
    Points
    504
    Par défaut
    un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DoCmd.OpenForm "frm_adresse_bis", acNormal, , "[Num] = " & Right(nodClient.Key, nombreChiffre)
    ouvrira le bon formulaire avec le bon paramétres et tout à jour, mais moi j'aimerais que ça reste dans un sous formulaire, d'où mon problème :/

    Y'a t-il l'équivalent mais pour faire une sorte de rafraichissement en fonction de la clé primaire (dans mon cas [Num]) pour un sous formulaire ?

  8. #8
    Expert confirmé

    Homme Profil pro
    consultant développeur
    Inscrit en
    Mai 2005
    Messages
    2 916
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : consultant développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 916
    Points : 4 816
    Points
    4 816
    Par défaut
    dqns un module, place la fonction suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Public Function ExtraireNombreADroite(ByVal sChaine As String) As Long
     
        While Not IsNumeric(sChaine)
            sChaine = Right(sChaine, Len(sChaine) - 1)
        Wend
        ExtraireNombreADroite = CLng(sChaine)
     
    End Function
    et dans ta requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.OpenForm "frm_adresse", acNormal, , "[Num] = " & ExtraireNombreADroite (nodClient.Key)
    Cà devrait le faire !

  9. #9
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    691
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 691
    Points : 504
    Points
    504
    Par défaut
    Nan mais ça marche ça hein, la fonction que j'ai faite fonctionne bien xD

    Le seul problème maintenant, c'est que je n'arrive qu'à appliquer le paramètres "[Num] = " blablabla à un DoCmd.OpenForm (donc pour ouvrir un autre formulaire).

    OR j'aimerais que ça me l'applique à un sous formulaire. J'ai fait un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Forms![Accueil]![frm_adresse_bis].Form![Num] = Right(nodClient.Key, nombreChiffre)
    mais ceci ne met que Num dans le sous formulaire à la bonne valeur, et ça ne me met pas les autres champs du sous formulaire en fonction du Num.

    Y'aurais pas une histoire de Requery ou un truc du style, pour qu'après m'avoir mis Num à la bonne valeur, il me trouve les valeurs des autres champs correspondant à ce Num là ?

Discussions similaires

  1. [AC-2010] Formulaire - Sous formulaire - Sous sous formulaire
    Par meli74 dans le forum IHM
    Réponses: 1
    Dernier message: 21/04/2011, 19h35
  2. Réponses: 4
    Dernier message: 11/04/2007, 18h46
  3. [VBA] Problème Formulaire / sous-formulaire
    Par popo68 dans le forum IHM
    Réponses: 2
    Dernier message: 26/10/2006, 12h39
  4. formulaire/sous formulaire/sous formulaire
    Par aimejielle dans le forum Access
    Réponses: 1
    Dernier message: 24/07/2006, 22h48
  5. Réponses: 1
    Dernier message: 10/07/2006, 09h15

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